Skip to content
Snippets Groups Projects
Commit 43f49667 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-2964 Refactor search related E2E tests

- Remove "elastic" everywhere - make it independ from a specific product
- Remove data from search server before adding Vorgänge
- Adding more dynamic Vorgänge attributes to the search index
- Make _start-e2e-environment.sh_ more robust
- Add _start-e2e-environment.sh_ to stop the Docker container
- Make remaining search related E2E tests work with new search engine
parent cffad617
Branches
Tags
No related merge requests found
Showing
with 94 additions and 42 deletions
......@@ -7,7 +7,7 @@
"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",
......
......@@ -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
......
......@@ -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();
......
......@@ -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();
......
......@@ -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();;
......
......@@ -7,7 +7,8 @@ declare namespace Cypress {
login(user, password);
logout();
getUserInfo();
addVorgangToElasticsearchIndex(vorgang);
addVorgangToSearchIndex(vorgang);
removeAllDocumentsFromSearchIndex();
}
}
......@@ -86,13 +87,13 @@ 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}`
},
......@@ -102,10 +103,28 @@ Cypress.Commands.add('addVorgangToElasticsearchIndex', (vorgang) => {
"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": {}
}
}
});
})
......
......@@ -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)
})
}
......
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 {
......
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)"
#!/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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment