diff --git a/goofy-client/apps/goofy-e2e/cypress.json b/goofy-client/apps/goofy-e2e/cypress.json index 07f1d7d07edade45d610d2dbd5074abc8bb44cd6..a96b1ba8aca296ff98b385809c9009dbf41e9e81 100644 --- a/goofy-client/apps/goofy-e2e/cypress.json +++ b/goofy-client/apps/goofy-e2e/cypress.json @@ -7,12 +7,12 @@ "keycloakUrl": "https://sso.dev.ozg-sh.de/", "keycloakClient": "sh-e2e-dev-goofy", "sabineUuid": "203002d1-c25f-4722-a9aa-a4291e0184bc", - "elasticsearch": { + "search": { "url": "http://localhost:9200", "index": "e2e-test-index", "user": "elastic", "password": "password" - } + } }, "fileServerFolder": ".", "fixturesFolder": "./src/fixtures", diff --git a/goofy-client/apps/goofy-e2e/docker-compose.yml b/goofy-client/apps/goofy-e2e/docker-compose.yml index 2e7b73b248ae668ea96caa8d754fd94fe75e03c2..9aeed9381150be568b7b6077a9f582fe1e78c501 100644 --- a/goofy-client/apps/goofy-e2e/docker-compose.yml +++ b/goofy-client/apps/goofy-e2e/docker-compose.yml @@ -13,7 +13,7 @@ services: platform: linux/amd64 environment: - SPRING_DATA_MONGODB_HOST=ozg-mongodb - - SPRING_PROFILES_ACTIVE=${SPRING_PROFILE} + - SPRING_PROFILES_ACTIVE=${SPRING_PROFILE:-dev,e2e} - logging_level_org_springframework_security=${LOGGING_LEVEL:-WARN} - SPRING_ELASTICSEARCH_URIS=http://ozg-elastic:9200 - SPRING_ELASTICSEARCH_USERNAME=elastic diff --git a/goofy-client/apps/goofy-e2e/src/integration/einheitlicher-ansprechpartner/vorgang-list/vorgang-list-ea.search.e2e-spec.ts b/goofy-client/apps/goofy-e2e/src/integration/einheitlicher-ansprechpartner/vorgang-list/vorgang-list-ea.search.e2e-spec.ts index 445732dcb64927c9a50a7ec43bf3b4d31cb05ab7..a1e37f16e7b8ddb729aa8ed3a659df9c962d671a 100644 --- a/goofy-client/apps/goofy-e2e/src/integration/einheitlicher-ansprechpartner/vorgang-list/vorgang-list-ea.search.e2e-spec.ts +++ b/goofy-client/apps/goofy-e2e/src/integration/einheitlicher-ansprechpartner/vorgang-list/vorgang-list-ea.search.e2e-spec.ts @@ -6,7 +6,7 @@ import { VorgangPage } from '../../../page-objects/vorgang.po'; import { dropCollections, reload } from '../../../support/cypress-helper'; import { CypressKeyboardActions, exist, notExist } from '../../../support/cypress.util'; import { loginAsEmil, UserRoleE2E } from '../../../support/user-util'; -import { buildVorgang, createVorgang, initElasticsearch, initVorgaenge, objectIds } from '../../../support/vorgang-util'; +import { buildVorgang, createVorgang, initSearchIndex, initVorgaenge, objectIds } from '../../../support/vorgang-util'; describe('VorgangList Suche for EA User', () => { const mainPage: MainPage = new MainPage(); @@ -29,7 +29,7 @@ describe('VorgangList Suche for EA User', () => { before(() => { initVorgaenge([vorgangToStay, vorgangToDisappear]) - initElasticsearch([vorgangToStay, vorgangToDisappear]) + initSearchIndex([vorgangToStay, vorgangToDisappear]) loginAsEmil(); diff --git a/goofy-client/apps/goofy-e2e/src/integration/main-tests/navigation/navigation.e2e-spec.ts b/goofy-client/apps/goofy-e2e/src/integration/main-tests/navigation/navigation.e2e-spec.ts index 417da36ef95e80ce999ff6a93d5b40b8b4368187..714751cdb1e5415f00616cbffd53f5e7c1a95e15 100644 --- a/goofy-client/apps/goofy-e2e/src/integration/main-tests/navigation/navigation.e2e-spec.ts +++ b/goofy-client/apps/goofy-e2e/src/integration/main-tests/navigation/navigation.e2e-spec.ts @@ -5,7 +5,7 @@ import { MainPage, waitForSpinnerToDisappear } from 'apps/goofy-e2e/src/page-obj import { dropCollections } from 'apps/goofy-e2e/src/support/cypress-helper'; import { CypressKeyboardActions, exist, notExist } from 'apps/goofy-e2e/src/support/cypress.util'; import { getUserSabineUuid, loginAsSabine } from 'apps/goofy-e2e/src/support/user-util'; -import { buildVorgang, createVorgang, initVorgaenge, objectIds } from 'apps/goofy-e2e/src/support/vorgang-util'; +import { buildVorgang, createVorgang, initSearchIndex, initVorgaenge, objectIds } from 'apps/goofy-e2e/src/support/vorgang-util'; describe('Navigation', () => { const mainPage: MainPage = new MainPage(); @@ -22,6 +22,7 @@ describe('Navigation', () => { before(() => { initVorgaenge([vorgang, vorgangNotBeFiltered, vorgangAssigned, vorgangAssignedNotBeFiltered]); + initSearchIndex([vorgang, vorgangNotBeFiltered, vorgangAssigned, vorgangAssignedNotBeFiltered]); loginAsSabine(); @@ -62,8 +63,7 @@ describe('Navigation', () => { exist(vorgangList.getListItem(vorgangAssignedNotBeFiltered.name).getRoot()); }) - // Skipped wegen OZG-2964 E2E Tests funktionieren nicht mit Ansible+ElasticSearch - it.skip('should hide not matching vorgaenge after do search', () => { + it('should hide not matching vorgaenge after do search', () => { doSearch(searchString); waitForSpinnerToDisappear(); @@ -86,8 +86,7 @@ describe('Navigation', () => { exist(vorgangList.getListItem(vorgangAssignedNotBeFiltered.name).getRoot()); }) - // Skipped wegen OZG-2964 E2E Tests funktionieren nicht mit Ansible+ElasticSearch - it.skip('should hide not matching vorgaenge after do search', () => { + it('should hide not matching vorgaenge after do search', () => { doSearch(searchString); waitForSpinnerToDisappear(); diff --git a/goofy-client/apps/goofy-e2e/src/integration/main-tests/vorgang-list/vorgang-list.search.e2e-spec.ts b/goofy-client/apps/goofy-e2e/src/integration/main-tests/vorgang-list/vorgang-list.search.e2e-spec.ts index a44e788e4e1e0de42edf4a1f7d124ad665a4ec1c..4c12baf8657cec86779e628707f53071cbb90962 100644 --- a/goofy-client/apps/goofy-e2e/src/integration/main-tests/vorgang-list/vorgang-list.search.e2e-spec.ts +++ b/goofy-client/apps/goofy-e2e/src/integration/main-tests/vorgang-list/vorgang-list.search.e2e-spec.ts @@ -6,13 +6,12 @@ import { EingangE2E, VorgangE2E, VorgangStatusE2E } from 'apps/goofy-e2e/src/mod import { VorgangPage } from 'apps/goofy-e2e/src/page-objects/vorgang.po'; import { dropCollections, reload } from 'apps/goofy-e2e/src/support/cypress-helper'; import { generate12ByteId } from 'apps/goofy-e2e/src/support/tech.util'; -import { AntragstellerE2ETestData, buildVorgang, createVorgang, EingangE2ETestData, EingangHeaderE2ETestData, initVorgaenge } from 'apps/goofy-e2e/src/support/vorgang-util'; +import { AntragstellerE2ETestData, buildVorgang, createVorgang, EingangE2ETestData, EingangHeaderE2ETestData, initSearchIndex, initVorgaenge, objectIds } from 'apps/goofy-e2e/src/support/vorgang-util'; import { MainPage, waitForSpinnerToDisappear } from '../../../page-objects/main.po'; import { CypressKeyboardActions, exist, haveText, haveValue, notExist } from '../../../support/cypress.util'; import { loginAsSabine, UserRoleE2E } from '../../../support/user-util'; -// Skipped wegen OZG-2964 E2E Tests funktionieren nicht mit Ansible+ElasticSearch -describe.skip('VorgangList Suche', () => { +describe('VorgangList Suche', () => { const mainPage: MainPage = new MainPage(); const vorgangList: VorgangListE2EComponent = mainPage.getVorgangList(); @@ -35,6 +34,7 @@ describe.skip('VorgangList Suche', () => { before(() => { initVorgaenge([vorgangToStay, vorgangToDisappear]) + initSearchIndex([vorgangToStay, vorgangToDisappear]) loginAsSabine(); @@ -47,7 +47,7 @@ describe.skip('VorgangList Suche', () => { }) it('should filter list', () => { - doSearchWith(requestId); + doSearchWith(vorgangToStay.name); waitForSpinnerToDisappear(); exist(vorgangStayInList.getRoot()); @@ -57,7 +57,7 @@ describe.skip('VorgangList Suche', () => { describe('on reload', () => { beforeEach(() => { - doSearchWith(requestId); + doSearchWith(vorgangToStay.name); }) it('should filter list and keep criteria on reload', () => { @@ -74,14 +74,14 @@ describe.skip('VorgangList Suche', () => { waitForSpinnerToDisappear(); exist(mainPage.getVorgangSearch().getRoot()) - haveValue(mainPage.getVorgangSearch().getInput(), requestId); + haveValue(mainPage.getVorgangSearch().getInput(), vorgangToStay.name); }) }) describe('navigate with filtered list to vorgang detail', () => { beforeEach(() => { - doSearchWith(requestId); + doSearchWith(vorgangToStay.name); waitForSpinnerToDisappear(); exist(vorgangList.getRoot()); @@ -105,7 +105,7 @@ describe.skip('VorgangList Suche', () => { describe('on clear search button', () => { it('should show unfiltered list', () => { - doSearchWith(requestId); + doSearchWith(vorgangToStay.name); waitForSpinnerToDisappear(); mainPage.getVorgangSearch().getClearButton().click(); @@ -125,13 +125,14 @@ describe.skip('VorgangList Suche', () => { const vorgang: VorgangE2E = { ...createVorgang(), name: vorgangName }; const vorgangOtherName: string = 'VorgangOther'; - const vorgangOther: VorgangE2E = { ...buildVorgang(generate12ByteId(), vorgangOtherName), status: VorgangStatusE2E.NEU }; + const vorgangOther: VorgangE2E = { ...buildVorgang(objectIds[0], vorgangOtherName), status: VorgangStatusE2E.NEU }; const previewListItemVorgang: VorgangSearchPreviewListItemE2EComponent = mainPage.getVorgangSearch().getVorgangSearchPreviewListItem(vorgang.name); const previewListItemVorgangOther: VorgangSearchPreviewListItemE2EComponent = mainPage.getVorgangSearch().getVorgangSearchPreviewListItem(vorgangOther.name); before(() => { initVorgaenge([vorgang, vorgangOther]) + initSearchIndex([vorgang, vorgangOther]) loginAsSabine(); @@ -221,7 +222,7 @@ describe.skip('VorgangList Suche', () => { antragsteller: { ...AntragstellerE2ETestData, vorname: NO_MATCH, nachname: NO_MATCH }, header: { ...EingangHeaderE2ETestData, requestId: NO_MATCH } } - const vorgangStayByVorgangName: VorgangE2E = { ...buildVorgang(generate12ByteId(), vorgangNameToMatch), aktenzeichen: NO_MATCH, eingangs: [eingangByVorgangName] }; + const vorgangStayByVorgangName: VorgangE2E = { ...buildVorgang(objectIds[0], vorgangNameToMatch), aktenzeichen: NO_MATCH, eingangs: [eingangByVorgangName] }; const aktenzeichenToMatch: string = 'Ein Aktenzeichen'; @@ -239,7 +240,7 @@ describe.skip('VorgangList Suche', () => { antragsteller: { ...AntragstellerE2ETestData, vorname: antragstellerVornameToMatch, nachname: NO_MATCH }, header: { ...EingangHeaderE2ETestData, requestId: NO_MATCH } } - const vorgangStayByAntragstellerVorname: VorgangE2E = { ...buildVorgang(generate12ByteId(), 'VorgangStayByAntragstellerVorname'), aktenzeichen: NO_MATCH, eingangs: [eingangByAntragstellerVorname] }; + const vorgangStayByAntragstellerVorname: VorgangE2E = { ...buildVorgang(objectIds[1], 'VorgangStayByAntragstellerVorname'), aktenzeichen: NO_MATCH, eingangs: [eingangByAntragstellerVorname] }; const antragstellerNachnameToMatch: string = 'Nachname vom Antragsteller'; @@ -248,7 +249,7 @@ describe.skip('VorgangList Suche', () => { antragsteller: { ...AntragstellerE2ETestData, vorname: NO_MATCH, nachname: antragstellerNachnameToMatch }, header: { ...EingangHeaderE2ETestData, requestId: NO_MATCH } } - const vorgangStayByAntragstellerNachname: VorgangE2E = { ...buildVorgang(generate12ByteId(), 'VorgangStayByAntragstellerNachname'), aktenzeichen: NO_MATCH, eingangs: [eingangByAntragstellerNachname] }; + const vorgangStayByAntragstellerNachname: VorgangE2E = { ...buildVorgang(objectIds[2], 'VorgangStayByAntragstellerNachname'), aktenzeichen: NO_MATCH, eingangs: [eingangByAntragstellerNachname] }; const requestIdToMatch: string = "EINNE_TOLLE_REQUEST_ID"; @@ -257,11 +258,12 @@ describe.skip('VorgangList Suche', () => { antragsteller: { ...AntragstellerE2ETestData, vorname: NO_MATCH, nachname: NO_MATCH }, header: { ...EingangHeaderE2ETestData, requestId: requestIdToMatch } } - const vorgangStayByRequestId: VorgangE2E = { ...buildVorgang(generate12ByteId(), 'VorgangStayByRequestId'), aktenzeichen: NO_MATCH, eingangs: [eingangByRequestId] }; + const vorgangStayByRequestId: VorgangE2E = { ...buildVorgang(objectIds[3], 'VorgangStayByRequestId'), aktenzeichen: NO_MATCH, eingangs: [eingangByRequestId] }; before(() => { initVorgaenge([vorgangStayByVorgangName, vorgangStayByAktenzeichen, vorgangStayByAntragstellerVorname, vorgangStayByAntragstellerNachname, vorgangStayByRequestId]) + initSearchIndex([vorgangStayByVorgangName, vorgangStayByAktenzeichen, vorgangStayByAntragstellerVorname, vorgangStayByAntragstellerNachname, vorgangStayByRequestId]) loginAsSabine();; diff --git a/goofy-client/apps/goofy-e2e/src/support/commands.ts b/goofy-client/apps/goofy-e2e/src/support/commands.ts index 3d4589b8821f61eb474aec2e3403e137d79445fd..458e9453440a0a98d2dea09d1c240eccef8151fe 100644 --- a/goofy-client/apps/goofy-e2e/src/support/commands.ts +++ b/goofy-client/apps/goofy-e2e/src/support/commands.ts @@ -7,7 +7,8 @@ declare namespace Cypress { login(user, password); logout(); getUserInfo(); - addVorgangToElasticsearchIndex(vorgang); + addVorgangToSearchIndex(vorgang); + removeAllDocumentsFromSearchIndex(); } } @@ -86,26 +87,44 @@ Cypress.Commands.add('logout', () => { }); }) -Cypress.Commands.add('addVorgangToElasticsearchIndex', (vorgang) => { - const elasticsearchEnv = Cypress.env("elasticsearch") - const token = btoa(`${elasticsearchEnv["user"]}:${elasticsearchEnv["password"]}`) +Cypress.Commands.add('addVorgangToSearchIndex', (vorgang) => { + const searchEnv = Cypress.env("search") + const token = btoa(`${searchEnv["user"]}:${searchEnv["password"]}`) cy.request({ method: 'POST', - url: `${elasticsearchEnv["url"]}/${elasticsearchEnv["index"]}/_doc/${vorgang._id.$oid}`, + url: `${searchEnv["url"]}/${searchEnv["index"]}/_doc/${vorgang._id.$oid}`, headers: { 'Authorization': `Basic ${token}` }, - body: { + body: { "_class" : "de.itvsh.ozg.pluto.common.search.IndexedVorgang", "vorgangId" : vorgang._id.$oid, "vorgangName" : vorgang.name, "vorgangNummer" : vorgang.nummer, "createdAt" : vorgang.createdAt.$date, - "antragstellerName" : "Testermann", - "antragstellerVorname" : "Max", + "antragstellerName" : vorgang.eingangs[0]?.antragsteller.nachname, + "antragstellerVorname" : vorgang.eingangs[0]?.antragsteller.vorname, "status" : vorgang.status, - "organisationseinheitenId" : "12345678" + "organisationseinheitenId" : vorgang.eingangs[0]?.zustaendigeStelle.organisationseinheitenId + } + }); +}) + +Cypress.Commands.add('removeAllDocumentsFromSearchIndex', () => { + const searchEnv = Cypress.env("search") + const token = btoa(`${searchEnv["user"]}:${searchEnv["password"]}`) + + cy.request({ + method: 'POST', + url: `${searchEnv["url"]}/${searchEnv["index"]}/_delete_by_query`, + headers: { + 'Authorization': `Basic ${token}` + }, + body: { + "query": { + "match_all": {} + } } }); }) diff --git a/goofy-client/apps/goofy-e2e/src/support/cypress-helper.ts b/goofy-client/apps/goofy-e2e/src/support/cypress-helper.ts index c29bb7aeca7192d1fc575d9ef4eeae58e5c24f12..975ba502c96101ea83c25ca6549820c5f602d61e 100644 --- a/goofy-client/apps/goofy-e2e/src/support/cypress-helper.ts +++ b/goofy-client/apps/goofy-e2e/src/support/cypress-helper.ts @@ -65,9 +65,10 @@ export function initVorgangData(data: VorgangE2E[]): void { cy.task(CypressTasks.INIT_VORGANG_DATA, { collection: MongoCollections.VORGANG, data }); } -export function initElasticsearchData(vorgaenge: VorgangE2E[]): void { +export function initSearchIndexData(vorgaenge: VorgangE2E[]): void { + cy.removeAllDocumentsFromSearchIndex(); vorgaenge.forEach(vorgang => { - cy.addVorgangToElasticsearchIndex(vorgang) + cy.addVorgangToSearchIndex(vorgang) }) } diff --git a/goofy-client/apps/goofy-e2e/src/support/vorgang-util.ts b/goofy-client/apps/goofy-e2e/src/support/vorgang-util.ts index fa4c922ac78967d51d2adb40753d41e192c50556..ba2a5d5e69e61fed2358ef9091098e02f14e15f6 100644 --- a/goofy-client/apps/goofy-e2e/src/support/vorgang-util.ts +++ b/goofy-client/apps/goofy-e2e/src/support/vorgang-util.ts @@ -1,6 +1,6 @@ import { AccessPermissionE2E, AntragstellerE2E, ClientAttributeE2E, ClientAttributesE2E, EingangE2E, EingangHeaderE2E, VorgangE2E } from '../model/vorgang'; import { VorgangAttachedItemClientE2E } from '../model/vorgang-attached-item'; -import { initVorgangData, initElasticsearchData } from './cypress-helper'; +import { initSearchIndexData, initVorgangData } from './cypress-helper'; import { buildUrl, encodeUrl } from './tech.util'; export const objectIds: string[] = require('../fixtures/util/object_id_collection.json'); @@ -18,8 +18,8 @@ export function buildVorgang($oid: string, uiIdentifier: string): VorgangE2E { }; } -export function initElasticsearch(vorgaenge: VorgangE2E[]): void { - initElasticsearchData(vorgaenge); +export function initSearchIndex(vorgaenge: VorgangE2E[]): void { + initSearchIndexData(vorgaenge); } export function initVorgang(vorgang: VorgangE2E): void { diff --git a/goofy-client/apps/goofy-e2e/start-e2e-environment.sh b/goofy-client/apps/goofy-e2e/start-e2e-environment.sh index b1897a85c30516d9b437551eb328c32af2a4c522..d24d6f7dd5861e977d41b4f3429e4747ee305317 100755 --- a/goofy-client/apps/goofy-e2e/start-e2e-environment.sh +++ b/goofy-client/apps/goofy-e2e/start-e2e-environment.sh @@ -1,10 +1,33 @@ -docker-compose up -d ozg-mongodb ozg-elastic +#!/bin/bash -while [[ $(curl -w '%{http_code}' "http://localhost:9200" | grep -c 200) != 1 ]] +SCRIPT_DIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) + +if nc -z localhost 9091 &> /dev/null +then + echo "Pluto already running. Exiting." + exit +fi + +echo "Using docker-compose -f ${SCRIPT_DIR}/docker-compose.yml ..." +echo + +docker-compose -f ${SCRIPT_DIR}/docker-compose.yml up -d ozg-mongodb ozg-elastic + +echo +while [[ $(curl -sw '%{http_code}' "http://localhost:9200" | grep -c 200) != 1 ]] do - sleep 1 + echo "Waiting for search service coming up..." + sleep 3 done -SPRING_PROFILE=dev,e2e,initSearchIndex docker-compose up ozg-pluto +echo +echo "Starting Pluto to init search index..." +SPRING_PROFILE=dev,e2e,initSearchIndex docker-compose -f ${SCRIPT_DIR}/docker-compose.yml up ozg-pluto + +echo +echo "Starting Pluto and Goofy for normal operations..." +SPRING_PROFILE=dev,e2e docker-compose -f ${SCRIPT_DIR}/docker-compose.yml up -d ozg-pluto ozg-goofy -SPRING_PROFILE=dev,e2e docker-compose up ozg-pluto ozg-goofy \ No newline at end of file +echo +echo "Check for \"Started\" lines:" +docker-compose -f ${SCRIPT_DIR}/docker-compose.yml logs -f | egrep "(Starting|Started)" diff --git a/goofy-client/apps/goofy-e2e/stop-e2e-environment.sh b/goofy-client/apps/goofy-e2e/stop-e2e-environment.sh new file mode 100755 index 0000000000000000000000000000000000000000..9dae589d6852b6e7d5d379b0fe2d176ac965522b --- /dev/null +++ b/goofy-client/apps/goofy-e2e/stop-e2e-environment.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +SCRIPT_DIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) + +echo "Using docker-compose -f ${SCRIPT_DIR}/docker-compose.yml ..." +echo + +docker-compose -f ${SCRIPT_DIR}/docker-compose.yml down