Skip to content
Snippets Groups Projects
Commit 2c193f08 authored by OZGCloud's avatar OZGCloud
Browse files

Merge pull request 'OZG-4653-E2E-Tests-stabilisieren' (#367) from...

Merge pull request 'OZG-4653-E2E-Tests-stabilisieren' (#367) from OZG-4653-E2E-Tests-stabilisieren into master

Reviewed-on: https://git.ozg-sh.de/ozgcloud-app/alfa/pulls/367


Reviewed-by: default avatarOZGCloud <ozgcloud@mgm-tp.com>
parents 21f43ef6 d1d7e165
No related branches found
No related tags found
No related merge requests found
......@@ -219,7 +219,7 @@ pipeline {
forwardServices(generateNamespace(bezeichner), dbPort)
runTests(bezeichner, 'einheitlicher-ansprechpartner', dbPort, env.STAGE_NAME)
runTests(bezeichner, 'einheitlicher-ansprechpartner', 'user-ea', dbPort, env.STAGE_NAME)
}
}
}
......@@ -246,7 +246,7 @@ pipeline {
forwardServices(generateNamespace(bezeichner), dbPort)
runTests(bezeichner, 'main-tests', dbPort, env.STAGE_NAME)
runTests(bezeichner, 'main-tests', 'user-main', dbPort, env.STAGE_NAME)
}
}
}
......@@ -439,7 +439,9 @@ Void generateMainNamespaceYaml() {
}
Void generateNamespaceYaml(String bezeichner, String valuesPathSuffix, String userFolder) {
def envValues = readYaml file: "alfa-client/apps/alfa-e2e/src/fixtures/argocd/" + valuesPathSuffix;
def envValues
dir('alfa-client/apps/alfa-e2e/') {
envValues = readYaml file: "src/fixtures/argocd/" + valuesPathSuffix;
envValues.ozgcloud.bezeichner = bezeichner
envValues.alfa.put("image", ['tag': env.ALFA_IMAGE_TAG])
......@@ -453,6 +455,7 @@ Void generateNamespaceYaml(String bezeichner, String valuesPathSuffix, String us
envValues.alfa.sso.put("keycloak_groups", generateKeycloakGroupsForHelmChart())
envValues.alfa.sso.put("keycloak_users", generateKeycloakUserForHelmChart(userFolder))
}
writeYaml file: "gitops/dev/namespace/namespaces/by-${bezeichner}-dev.yaml", data: envValues, overwrite: true
......@@ -465,26 +468,23 @@ Void generateNamespaceYaml(String bezeichner, String valuesPathSuffix, String us
}
List generateKeycloakUserForHelmChart(String userFolder) {
def userFiles = sh (script: 'ls alfa-client/apps/alfa-e2e/src/fixtures/' + userFolder, returnStdout: true);
def helmUsers = []
userFiles.split("\\n").each { userFile ->
def userJson = readJSON file: "alfa-client/apps/alfa-e2e/src/fixtures/${userFolder}/${userFile}"
readUsersFixtures(userFolder).each { username, userFixture ->
def user = [
"name": userJson.name,
"password": userJson.password,
"first_name": userJson.get("firstName", ""),
"last_name": userJson.get("lastName", ""),
"email": userJson.get("email", "")
"name" : userFixture.name,
"password" : userFixture.password,
"first_name": userFixture.get("firstName", ""),
"last_name" : userFixture.get("lastName", ""),
"email" : userFixture.get("email", "")
]
if (userJson.containsKey("clientRoles")) {
user.put("client_roles", mapUserClientRoles(userJson.clientRoles))
if (userFixture.containsKey("clientRoles")) {
user.put("client_roles", mapUserClientRoles(userFixture.clientRoles))
}
if (userJson.containsKey("groups")) {
user.put("groups", userJson.groups)
if (userFixture.containsKey("groups")) {
user.put("groups", userFixture.groups)
}
helmUsers.add(user)
......@@ -504,12 +504,12 @@ List mapUserClientRoles(userClientRoles) {
}
List generateKeycloakGroupsForHelmChart() {
def groupFiles = sh (script: 'ls alfa-client/apps/alfa-e2e/src/fixtures/group', returnStdout: true)
def groupFiles = sh (script: 'ls src/fixtures/group', returnStdout: true)
def helmGroups = []
groupFiles.split("\\n").each { groupFile ->
def groupJson = readJSON file: "alfa-client/apps/alfa-e2e/src/fixtures/group/${groupFile}"
def groupJson = readJSON file: "src/fixtures/group/${groupFile}"
def group = ["name": groupJson.name]
groupJson.attributes.each { key, values ->
......@@ -618,8 +618,8 @@ Void publishE2ETestResult(String reportFolder, String reportName) {
)
}
String runTests(String bezeichner, String reportFolder, Integer dbPort, String stageName) {
def config = generateCypressConfig(bezeichner, reportFolder, dbPort)
String runTests(String bezeichner, String reportFolder, String userFolder, Integer dbPort, String stageName) {
def config = generateCypressConfig(bezeichner, reportFolder, userFolder, dbPort)
try {
dir('alfa-client'){
......@@ -661,7 +661,7 @@ String cutBranchNameForKeycloakRealm(String branchName, String stageName) {
return branchName.take(cutBranchNamePosition)
}
String generateCypressConfig(String bezeichner, String testFolder, Integer dbPort) {
String generateCypressConfig(String bezeichner, String testFolder, String userFolder, Integer dbPort) {
def namespace = generateNamespace(bezeichner)
def configName = "cypress-ci-"+testFolder+".json"
......@@ -676,7 +676,7 @@ String generateCypressConfig(String bezeichner, String testFolder, Integer dbPor
config.env.dbUrl = "mongodb://${decodeString(vorgangManagerDatabaseSecret.username)}:${parsablePassword}@localhost:${dbPort}/admin?ssl=false&directConnection=true" as String
config.env.keycloakUrl = "https://${env.SSO_URL}/" as String
config.env.keycloakRealm = namespace as String
config.env += createUserIdsEnv(namespace, ["sabine", "dorothea", "emil", "peter"])
config.env += createUserIdsEnv(userFolder, namespace)
config.videosFolder = "./reports/${testFolder}/videos" as String
config.screenshotsFolder = "./reports/${testFolder}/screenshots" as String
config.reporterOptions.reportDir = "./reports/${testFolder}/mochawesome-report" as String
......@@ -717,43 +717,43 @@ Map getUserManagerDatabaseSecret(String namespace) {
return readJSON ( text: sh (script: "kubectl get secret ozg-mongodb-admin-user-manager-user -n ${namespace} -o jsonpath={.data}", returnStdout: true))
}
Map createUserIdsEnv(realm, usernames) {
def env = [:]
def userIds = getUserIds(realm, usernames)
echo "userIds: ${userIds}"
for (username in usernames) {
if (userIds[username]) {
env[(username + "Uuid")] = userIds[username].id
env[(username + "InternalId")] = userIds[username].ozgCloudUserId
} else {
echo "user ${username} not found in Keycloak"
Map createUserIdsEnv(String userFolder, realm) {
def keycloakUsers = getKeycloakUsers(realm)
def usersFixtures = readUsersFixtures(userFolder)
return usersFixtures.collectEntries { username, user ->
[(username + "Uuid") : keycloakUsers[username].id,
(username + "InternalId"): keycloakUsers[username].attributes.ozgCloudUserId[0]]
}
}
return env
}
Map getUserIds(realm, usernames) {
Map getKeycloakUsers(realm) {
def shScript = """curl -H 'Content-Type: application/json' \
-H 'Authorization: bearer ${getKeycloakAccessToken(realm)}' \
'https://${env.SSO_URL}/admin/realms/${realm}/users'
"""
def keycloakUsers = readJSON text: sh(script: shScript, returnStdout: true)
def users = readJSON text: sh(script: shScript, returnStdout: true)
echo "keycloak users: ${keycloakUsers}"
echo "users: ${users}"
return keycloakUsers.collectEntries { [it.username, it] }
}
return users
.findAll { it.username in usernames }
.collectEntries {
[
(it.username): [
"id" : it.id,
"ozgCloudUserId": it.attributes.ozgCloudUserId[0]
]
]
Map readUsersFixtures(String userFolder) {
def userFolderPath = "src/fixtures/${userFolder}"
def usersFixturesFiles = sh(script: "ls ${userFolderPath}", returnStdout: true);
return usersFixturesFiles.split("\\n")
.collect { userFixtureFile ->
def userFixture = readJSON file: "${userFolderPath}/${userFixtureFile}"
return createUserFromFixture(userFixture)
}.collectEntries { [it.name, it] }
}
Map createUserFromFixture(Map userFixture) {
return ["name" : userFixture.name,
"password" : userFixture.password,
"first_name": userFixture.get("firstName", ""),
"last_name" : userFixture.get("lastName", ""),
"email" : userFixture.get("email", "")]
}
String getKeycloakAccessToken(String realm) {
......
......@@ -192,7 +192,7 @@ pipeline {
forwardServices(generateNamespace(bezeichner), dbPort)
runTests(bezeichner, 'einheitlicher-ansprechpartner', dbPort, env.STAGE_NAME)
runTests(bezeichner, 'einheitlicher-ansprechpartner', 'user-ea', dbPort, env.STAGE_NAME)
}
}
}
......@@ -222,7 +222,7 @@ pipeline {
forwardServices(generateNamespace(bezeichner), dbPort)
runTests(bezeichner, 'main-tests', dbPort, env.STAGE_NAME)
runTests(bezeichner, 'main-tests', 'user-main', dbPort, env.STAGE_NAME)
}
}
}
......@@ -327,8 +327,8 @@ Void publishE2ETestResult(String reportFolder, String reportName) {
)
}
String runTests(String bezeichner, String reportFolder, Integer dbPort, String stageName) {
def config = generateCypressConfig(bezeichner, reportFolder, dbPort)
String runTests(String bezeichner, String reportFolder, String userFolder, Integer dbPort, String stageName) {
def config = generateCypressConfig(bezeichner, reportFolder, userFolder, dbPort)
try {
dir("alfa-client") {
......@@ -370,7 +370,7 @@ String cutBranchNameForKeycloakRealm(String branchName, String stageName) {
return branchName.take(cutBranchNamePosition)
}
String generateCypressConfig(String bezeichner, String testFolder, Integer dbPort) {
String generateCypressConfig(String bezeichner, String testFolder, String userFolder, Integer dbPort) {
def namespace = generateNamespace(bezeichner)
def configName = "cypress-ci-" + testFolder + ".json"
......@@ -385,7 +385,7 @@ String generateCypressConfig(String bezeichner, String testFolder, Integer dbPor
config.env.dbUrl = "mongodb://${decodeString(vorgangManagerDatabaseSecret.username)}:${parsablePassword}@localhost:${dbPort}/admin?ssl=false&directConnection=true" as String
config.env.keycloakUrl = "https://${env.SSO_URL}/" as String
config.env.keycloakRealm = namespace as String
config.env += createUserIdsEnv(namespace, ["sabine", "dorothea", "emil", "peter"])
config.env += createUserIdsEnv(userFolder, namespace)
config.videosFolder = "./reports/${testFolder}/videos" as String
config.screenshotsFolder = "./reports/${testFolder}/screenshots" as String
config.reporterOptions.reportDir = "./reports/${testFolder}/mochawesome-report" as String
......@@ -426,43 +426,43 @@ String makePasswordUrlConform(String password) {
return sh(script: "printf %s ${password} | jq -sRr @uri", returnStdout: true);
}
Map createUserIdsEnv(realm, usernames) {
def env = [:]
def userIds = getUserIds(realm, usernames)
echo "userIds: ${userIds}"
for (username in usernames) {
if (userIds[username]) {
env[(username + "Uuid")] = userIds[username].id
env[(username + "InternalId")] = userIds[username].ozgCloudUserId
} else {
echo "user ${username} not found in Keycloak"
Map createUserIdsEnv(String userFolder, realm) {
def keycloakUsers = getKeycloakUsers(realm)
def usersFixtures = readUsersFixtures(userFolder)
return usersFixtures.collectEntries { username, user ->
[(username + "Uuid") : keycloakUsers[username].id,
(username + "InternalId"): keycloakUsers[username].attributes.ozgCloudUserId[0]]
}
}
return env
}
Map getUserIds(realm, usernames) {
Map getKeycloakUsers(realm) {
def shScript = """curl -H 'Content-Type: application/json' \
-H 'Authorization: bearer ${getKeycloakAccessToken(realm)}' \
'https://${env.SSO_URL}/admin/realms/${realm}/users'
"""
def keycloakUsers = readJSON text: sh(script: shScript, returnStdout: true)
def users = readJSON text: sh(script: shScript, returnStdout: true)
echo "keycloak users: ${keycloakUsers}"
echo "users: ${users}"
return keycloakUsers.collectEntries { [it.username, it] }
}
return users
.findAll { it.username in usernames }
.collectEntries {
[
(it.username): [
"id" : it.id,
"ozgCloudUserId": it.attributes.ozgCloudUserId[0]
]
]
Map readUsersFixtures(String userFolder) {
def userFolderPath = "src/fixtures/${userFolder}"
def usersFixturesFiles = sh(script: "ls ${userFolderPath}", returnStdout: true);
return usersFixturesFiles.split("\\n")
.collect { userFixtureFile ->
def userFixture = readJSON file: "${userFolderPath}/${userFixtureFile}"
return createUserFromFixture(userFixture)
}.collectEntries { [it.name, it] }
}
Map createUserFromFixture(Map userFixture) {
return ["name" : userFixture.name,
"password" : userFixture.password,
"first_name": userFixture.get("firstName", ""),
"last_name" : userFixture.get("lastName", ""),
"email" : userFixture.get("email", "")]
}
String getKeycloakAccessToken(String realm) {
......@@ -476,19 +476,15 @@ String getKeycloakAccessToken(String realm) {
Map getUserManagerApiUserCredentials(String namespace) {
def userManagerApiUserCredentials = readJSON(text: sh(script: "kubectl get secret usermanagerapiuser-credentials -n ${namespace} -o jsonpath={.data}", returnStdout: true))
return [
"user": decodeString(userManagerApiUserCredentials.name),
"password": decodeString(userManagerApiUserCredentials.password)
]
return ["user" : decodeString(userManagerApiUserCredentials.name),
"password": decodeString(userManagerApiUserCredentials.password)]
}
Void sendFailureMessage() {
def data = [
"msgtype": "m.text",
def data = ["msgtype" : "m.text",
"body" : "E2E-Tests: Failed stage: ${getFailedStage()} Build-ID: ${env.BUILD_NUMBER} Link: ${BLUE_OCEAN_URL}" as String,
"format" : "org.matrix.custom.html",
"formatted_body": "E2E-Tests: Failed stage: ${getFailedStage()} Build-ID: <a href='${BLUE_OCEAN_URL}'>${env.BUILD_NUMBER}</a>" as String
]
"formatted_body": "E2E-Tests: Failed stage: ${getFailedStage()} Build-ID: <a href='${BLUE_OCEAN_URL}'>${env.BUILD_NUMBER}</a>" as String]
sh "curl -XPOST -H 'authorization: Bearer ${getElementAccessToken()}' -d '${JsonOutput.toJson(data)}' https://matrix.ozg-sh.de/_matrix/client/v3/rooms/${getElementRoomId()}/send/m.room.message"
}
......@@ -521,20 +517,17 @@ String getElementAccessToken() {
Map getElasticsearchEnv(String namespace) {
def elasticsearchSecret = getElasticsearchSecret(namespace)
return [
"user": decodeString(elasticsearchSecret.username),
return ["user" : decodeString(elasticsearchSecret.username),
"password": decodeString(elasticsearchSecret.password),
"index" : decodeString(elasticsearchSecret.index),
"url": "https://localhost:9200"
]
"url" : "https://localhost:9200"]
}
Void forwardServices(String namespace, Integer dbPort) {
try {
forwardDatenbank(namespace, dbPort)
forwardElasticSearch()
}
catch (Exception e) {
} catch (Exception e) {
echo "forwardServices Exception: ${e}"
error("Error forwarding service")
}
......
......@@ -37,7 +37,7 @@ import { buildVorgang, createVorgang, initVorgaenge, objectIds } from '../../../
registerLocaleData(localeDe, 'de', localeDeExtra);
describe.skip('Vorgang Detailansicht with formData', () => {
describe('Vorgang Detailansicht with formData', () => {
const mainPage: MainPage = new MainPage();
const vorgangList: VorgangListE2EComponent = mainPage.getVorgangList();
......@@ -46,17 +46,17 @@ describe.skip('Vorgang Detailansicht with formData', () => {
const vorgangHeader: VorgangDetailHeaderE2EComponent = vorgangPage.getVorgangDetailHeader();
const vorgang: VorgangE2E = { ...createVorgang(), name: 'TestVorgang' };
const vorgangWithLabels: VorgangE2E = buildVorgang(objectIds[0], 'TestVorgangWithLabels');
const ort: string = 'Ort';
const sh_strasse: string = 'Strasse';
const sh_hausnummer: string = 'Hausnummer';
const emailadresse: string = 'E-Mail Adresse';
const postleitzahl: string = 'PLZ';
const vorgang: VorgangE2E = { ...createVorgang(), name: 'TestVorgang' };
const vorgangWithLabels: VorgangE2E = createVorgangWithLabels();
before(() => {
initVorgaenge([vorgang]);//, createVorgangWithLabels()]);
initVorgaenge([vorgang, vorgangWithLabels]);
loginAsSabine();
......@@ -64,17 +64,38 @@ describe.skip('Vorgang Detailansicht with formData', () => {
exist(vorgangList.getRoot());
})
function createVorgangWithLabels(){
vorgangWithLabels.eingangs[0].formData._kopControlData = {
function createVorgangWithLabels(): VorgangE2E{
const vorgang = buildVorgang(objectIds[0], 'TestVorgangWithLabels');
return {
...vorgang,
eingangs: [{
...vorgang.eingangs[0],
formData: createFormDataWithLabels()
}]
}
}
function createFormDataWithLabels(): FormData {
return {
...vorgang.eingangs[0].formData,
_kopControlData: {
metaData: true,
labels: { ort, sh_strasse, sh_hausnummer }
};
},
empfangendestelle: createEmpfangendestelleWithLabels()
}
}
vorgangWithLabels.eingangs[0].formData.empfangendestelle._kopControlData.labels = {
function createEmpfangendestelleWithLabels(): any {
return {
...vorgang.eingangs[0].formData.empfangendestelle,
_kopControlData: {
labels: {
emailadresse,
postleitzahl
};
return vorgangWithLabels;
}
}
}
}
after(() => {
......
......@@ -65,7 +65,7 @@ export function contains(element: any, containing: string): void {
}
export function notContains(element: any, containing: string): void {
element.should('exist').not.contains(containing);
element.contains(containing).should('not.exist');
}
export function haveLength(element: any, length: number): void {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment