From 4064a10b709ada6fb61d02e1255f6420dc7b6f28 Mon Sep 17 00:00:00 2001 From: Haby-Phael Mouko <130637379+phaelcg@users.noreply.github.com> Date: Mon, 25 Nov 2024 17:28:15 +0100 Subject: [PATCH] SPSH-967: Implemented PW tests for 2FA (#95) * SPSH-967: Implemented PW tests for 2FA * SPSH-967: Refactored and implemented the tests for 2FA * SPSH-967: Removed the 2FA test user from the config * SPSH-967: Reverted changes for 2FA tests * SPSH-967: PR Review & Refactor. * SPSH-967: undone the env.dev file * SPSH-967: Fixed issues caused by merge conflicts * SPSH-967: Fixed 2FA tests --- base/api/testHelperPerson.page.ts | 6 +- base/rollentypen.ts | 3 +- base/sp.ts | 3 +- base/testHelperGenerateTestdataNames.ts | 4 +- pages/ProfileView.page.ts | 1 - pages/admin/PersonDetailsView.page.ts | 52 +++++++ tests/Person.spec.ts | 6 +- tests/PersonBearbeiten.spec.ts | 197 +++++++++++++++++++++++- tests/Profile.spec.ts | 26 ++-- 9 files changed, 269 insertions(+), 29 deletions(-) diff --git a/base/api/testHelperPerson.page.ts b/base/api/testHelperPerson.page.ts index 5f24416..610dcf8 100644 --- a/base/api/testHelperPerson.page.ts +++ b/base/api/testHelperPerson.page.ts @@ -6,7 +6,7 @@ import { HeaderPage } from '../../pages/Header.page'; import { LoginPage } from '../../pages/LoginView.page'; import { faker } from '@faker-js/faker'; import { lehrkraftOeffentlichRolle } from '../roles'; -import { generateLehrerNachname, generateLehrerVorname } from "../testHelperGenerateTestdataNames"; +import { generateNachname, generateVorname } from "../testHelperGenerateTestdataNames"; const FRONTEND_URL: string | undefined = process.env.FRONTEND_URL || ""; @@ -98,8 +98,8 @@ export async function getPersonId(page: Page, Benutzername: string): Promise { - userInfoLehrer = await createRolleAndPersonWithUserContext(page, testschule, typelehrer, await generateLehrerNachname(), await generateLehrerVorname(), await getSPId(page, email), await generateRolleName()); + userInfoLehrer = await createRolleAndPersonWithUserContext(page, testschule, typelehrer, await generateNachname(), await generateVorname(), await getSPId(page, email), await generateRolleName()); username.push(userInfoLehrer.username); rolleId.push(userInfoLehrer.rolleId); }) @@ -175,7 +175,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro const sperrDatumBis = await generateDateFuture(5, 2); // Konkrete Testdaten für diesen Testfall await test.step(`Testdaten: Lehrer mit einer Rolle(LEHR) und SP(email) über die api anlegen ${ADMIN}`, async () => { - userInfoLehrer = await createRolleAndPersonWithUserContext(page, testschule, typelehrer, await generateLehrerNachname(), await generateLehrerVorname(), await getSPId(page, email), await generateRolleName()); + userInfoLehrer = await createRolleAndPersonWithUserContext(page, testschule, typelehrer, await generateNachname(), await generateVorname(), await getSPId(page, email), await generateRolleName()); username.push(userInfoLehrer.username); rolleId.push(userInfoLehrer.rolleId); }) @@ -195,4 +195,191 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro await personDetailsView.checkLockDateTo(sperrDatumBis); // Der Benutzer muss gesperrt sein bis zun dem eingegebenen Datum }) }) + + test("Gesamtübersicht für einen Benutzer als Schueler öffnen und Unsichtbarkeit des 2FA Abschnitts prüfen", {tag: [LONG]}, async ({ page }) => { + let userInfoLehrer: UserInfo; + + await test.step(`Testdaten: Schüler mit einer Rolle(LERN) über die api anlegen ${ADMIN}`, async () => { + userInfoLehrer = await createRolleAndPersonWithUserContext(page, testschule, typeSchueler, await generateNachname(), await generateVorname(), await getSPId(page, itslearning), await generateRolleName()); + username.push(userInfoLehrer.username); + rolleId.push(userInfoLehrer.rolleId); + }) + + const personManagementView: PersonManagementViewPage = new PersonManagementViewPage(page); + + const personDetailsView: PersonDetailsViewPage = await test.step(`Gesamtübersicht öffnen`, async () => { + await gotoTargetURL(page, "admin/personen"); + await personManagementView.searchBySuchfeld(userInfoLehrer.username); + return await personManagementView.openGesamtuebersichtPerson(page, userInfoLehrer.username); + }) + + await test.step(`Gesamtübersicht Abschnitte prüfen`, async () => { + await expect(personDetailsView.text_h2_benutzerBearbeiten).toHaveText('Benutzer bearbeiten'); + await expect(personDetailsView.text_h3_passwort_headline).toBeVisible(); + await expect(personDetailsView.text_h3_schulzuordnung_headline).toBeVisible(); + await expect(personDetailsView.text_h3_lockPerson_headline).toBeVisible(); + }) + + await test.step(`Unsichtbarkeit des 2FA Abschnitts prüfen`, async () => { + await expect(personDetailsView.text_h3_2FA).toBeHidden(); + await expect(personDetailsView.text_token_IstEingerichtet_info).toBeHidden(); + await expect(personDetailsView.text_neuen_token_einrichten_info).toBeHidden(); + await expect(personDetailsView.text_kein_token_ist_Eingerichtet).toBeHidden(); + await expect(personDetailsView.button_2FAEinrichten).toBeHidden(); + }) + }) + + test("Gesamtübersicht für einen Benutzer als Lehrkraft öffnen und 2FA Status prüfen dass kein Token eingerichtet ist", {tag: [LONG]}, async ({ page }) => { + let userInfoLehrer: UserInfo; + + await test.step(`Testdaten: Lehrer mit einer Rolle(LEHR) über die api anlegen ${ADMIN}`, async () => { + userInfoLehrer = await createRolleAndPersonWithUserContext(page, testschule, typelehrer, await generateNachname(), await generateVorname(), await getSPId(page, email), await generateRolleName()); + username.push(userInfoLehrer.username); + rolleId.push(userInfoLehrer.rolleId); + }) + + const personManagementView: PersonManagementViewPage = new PersonManagementViewPage(page); + + const personDetailsView: PersonDetailsViewPage = await test.step(`Gesamtübersicht öffnen`, async () => { + await gotoTargetURL(page, "admin/personen"); + await personManagementView.searchBySuchfeld(userInfoLehrer.username); + return await personManagementView.openGesamtuebersichtPerson(page, userInfoLehrer.username); + }) + + await test.step(`2FA Status prüfen dass kein Token eingerichtet ist`, async () => { + await expect(personDetailsView.text_h3_2FA).toBeVisible(); + await expect(personDetailsView.text_kein_token_ist_Eingerichtet).toBeVisible(); + }) + }) + + test("Gesamtübersicht für einen Benutzer als Schuladmin öffnen und 2FA Status prüfen dass kein Token eingerichtet ist", {tag: [LONG]}, async ({ page }) => { + const addminVorname = "TAuto-PW-V-" + faker.person.firstName(); + const adminNachname = "TAuto-PW-N-" + faker.person.lastName(); + const adminRollenart = 'LEIT'; + const adminOrganisation = 'Testschule-PW665'; + const adminIdSP = await getSPId(page, 'Schulportal-Administration'); + let userInfoAdmin: UserInfo; + + await test.step(`Testdaten: Schuladmin mit einer Rolle(LEIT) über die api anlegen ${ADMIN}`, async () => { + userInfoAdmin = await createRolleAndPersonWithUserContext(page, adminOrganisation, adminRollenart, addminVorname, adminNachname, adminIdSP, await generateRolleName()); + await addSystemrechtToRolle(page, userInfoAdmin.rolleId, 'PERSONEN_VERWALTEN'); + username.push(userInfoAdmin.username); + rolleId.push(userInfoAdmin.rolleId); + }) + + const personManagementView: PersonManagementViewPage = new PersonManagementViewPage(page); + + const personDetailsView: PersonDetailsViewPage = await test.step(`Gesamtübersicht öffnen`, async () => { + await gotoTargetURL(page, "admin/personen"); + await personManagementView.searchBySuchfeld(userInfoAdmin.username); + return await personManagementView.openGesamtuebersichtPerson(page, userInfoAdmin.username); + }) + + await test.step(`2FA Status prüfen dass kein Token eingerichtet ist`, async () => { + await expect(personDetailsView.text_h3_2FA).toBeVisible(); + await expect(personDetailsView.text_kein_token_ist_Eingerichtet).toBeVisible(); + }) + }) + + test("Gesamtübersicht für einen Benutzer als Landesadmin öffnen, 2FA Token einrichten und 2FA Status prüfen dass ein Token eingerichtet ist", {tag: [LONG]}, async ({ page }) => { + const addminVorname = "TAuto-PW-V-" + faker.person.firstName(); + const adminNachname = "TAuto-PW-N-" + faker.person.lastName(); + const organisation = 'Land Schleswig-Holstein'; + const rollenart = 'SYSADMIN' + const adminIdSP = await getSPId(page, 'Schulportal-Administration'); + + let userInfoAdmin: UserInfo; + + await test.step(`Testdaten: Landesadmin mit einer Rolle(SYSADMIN) über die api anlegen ${ADMIN}`, async () => { + userInfoAdmin = await createRolleAndPersonWithUserContext(page, organisation, rollenart, addminVorname, adminNachname, adminIdSP, await generateRolleName()); + await addSystemrechtToRolle(page, userInfoAdmin.rolleId, 'ROLLEN_VERWALTEN'); + await addSystemrechtToRolle(page, userInfoAdmin.rolleId, 'PERSONEN_SOFORT_LOESCHEN'); + await addSystemrechtToRolle(page, userInfoAdmin.rolleId, 'PERSONEN_VERWALTEN'); + await addSystemrechtToRolle(page, userInfoAdmin.rolleId, 'SCHULEN_VERWALTEN'); + await addSystemrechtToRolle(page, userInfoAdmin.rolleId, 'KLASSEN_VERWALTEN'); + await addSystemrechtToRolle(page, userInfoAdmin.rolleId, 'SCHULTRAEGER_VERWALTEN'); + await addSystemrechtToRolle(page, userInfoAdmin.rolleId, 'PERSONEN_ANLEGEN'); + + username.push(userInfoAdmin.username); + rolleId.push(userInfoAdmin.rolleId); + }) + + const personManagementView: PersonManagementViewPage = new PersonManagementViewPage(page); + + const personDetailsView: PersonDetailsViewPage = await test.step(`Gesamtübersicht öffnen`, async () => { + await gotoTargetURL(page, "admin/personen"); + await personManagementView.searchBySuchfeld(userInfoAdmin.username); + return await personManagementView.openGesamtuebersichtPerson(page, userInfoAdmin.username); + }) + + await test.step(`2FA Token einrichten`, async () => { + await expect(personDetailsView.text_h3_2FA).toBeVisible(); + await personDetailsView.softwareTokenEinrichten(); + }) + + await test.step(`2FA Status prüfen dass ein Token eingerichtet ist`, async () => { + await expect(personDetailsView.text_token_IstEingerichtet_info).toBeVisible(); + await expect(personDetailsView.text_neuen_token_einrichten_info).toBeVisible(); + }) + }) + + test("Gesamtübersicht für einen Benutzer als Schuladmin öffnen, 2FA Token einrichten und 2FA Status prüfen dass ein Token eingerichtet ist", {tag: [LONG]}, async ({ page }) => { + const adminRollenart = 'LEIT'; + const adminOrganisation = 'Testschule-PW665'; + const adminIdSP = await getSPId(page, 'Schulportal-Administration'); + let userInfoAdmin: UserInfo; + + await test.step(`Testdaten: Schuladmin mit einer Rolle(LEIT) über die api anlegen ${ADMIN}`, async () => { + userInfoAdmin = await createRolleAndPersonWithUserContext(page, adminOrganisation, adminRollenart, await generateNachname(), await generateVorname(), adminIdSP, await generateRolleName()); + await addSystemrechtToRolle(page, userInfoAdmin.rolleId, 'PERSONEN_VERWALTEN'); + username.push(userInfoAdmin.username); + rolleId.push(userInfoAdmin.rolleId); + }) + + const personManagementView: PersonManagementViewPage = new PersonManagementViewPage(page); + + const personDetailsView: PersonDetailsViewPage = await test.step(`Gesamtübersicht öffnen`, async () => { + await gotoTargetURL(page, "admin/personen"); + await personManagementView.searchBySuchfeld(userInfoAdmin.username); + return await personManagementView.openGesamtuebersichtPerson(page, userInfoAdmin.username); + }) + + await test.step(`2FA Token einrichten`, async () => { + await expect(personDetailsView.text_h3_2FA).toBeVisible(); + await personDetailsView.softwareTokenEinrichten(); + }) + + await test.step(`2FA Status prüfen dass ein Token eingerichtet ist`, async () => { + await expect(personDetailsView.text_token_IstEingerichtet_info).toBeVisible(); + await expect(personDetailsView.text_neuen_token_einrichten_info).toBeVisible(); + }) + }) + + test("Gesamtübersicht für einen Benutzer als Lehrkraft öffnen, 2FA Token einrichten und 2FA Status prüfen dass ein Token eingerichtet ist", {tag: [LONG]}, async ({ page }) => { + let userInfoLehrer: UserInfo; + + await test.step(`Testdaten: Lehrer mit einer Rolle(LEHR) über die api anlegen ${ADMIN}`, async () => { + userInfoLehrer = await createRolleAndPersonWithUserContext(page, testschule, typelehrer, await generateNachname(), await generateVorname(), await getSPId(page, email), await generateRolleName()); + username.push(userInfoLehrer.username); + rolleId.push(userInfoLehrer.rolleId); + }) + + const personManagementView: PersonManagementViewPage = new PersonManagementViewPage(page); + + const personDetailsView: PersonDetailsViewPage = await test.step(`Gesamtübersicht öffnen`, async () => { + await gotoTargetURL(page, "admin/personen"); + await personManagementView.searchBySuchfeld(userInfoLehrer.username); + return await personManagementView.openGesamtuebersichtPerson(page, userInfoLehrer.username); + }) + + await test.step(`2FA Token einrichten`, async () => { + await expect(personDetailsView.text_h3_2FA).toBeVisible(); + await personDetailsView.softwareTokenEinrichten(); + }) + + await test.step(`2FA Status prüfen dass ein Token eingerichtet ist`, async () => { + await expect(personDetailsView.text_token_IstEingerichtet_info).toBeVisible(); + await expect(personDetailsView.text_neuen_token_einrichten_info).toBeVisible(); + }) + }) }); \ No newline at end of file diff --git a/tests/Profile.spec.ts b/tests/Profile.spec.ts index ebefe5d..0dcf5ed 100644 --- a/tests/Profile.spec.ts +++ b/tests/Profile.spec.ts @@ -12,7 +12,7 @@ import { UserInfo } from "../base/api/testHelper.page"; import { addSystemrechtToRolle } from "../base/api/testHelperRolle.page"; import { LONG, SHORT, STAGE, BROWSER } from "../base/tags"; import { deleteRolleById, deletePersonByUsername} from "../base/testHelperDeleteTestdata"; -import { generateLehrerNachname, generateLehrerVorname, generateRolleName } from "../base/testHelperGenerateTestdataNames.ts"; +import { generateNachname, generateVorname, generateRolleName } from "../base/testHelperGenerateTestdataNames.ts"; import { testschule, testschule665, landSH } from "../base/organisation.ts"; const PW: string | undefined = process.env.PW; @@ -71,8 +71,8 @@ test.describe(`Testfälle für das eigene Profil anzeigen: Umgebung: ${process.e const login: LoginPage = new LoginPage(page); const startseite: StartPage = new StartPage(page); - const vorname = await generateLehrerVorname(); - const nachname = await generateLehrerNachname(); + const vorname = await generateVorname(); + const nachname = await generateNachname(); const organisation = landSH; const rollenname = await generateRolleName(); const rollenart = 'SYSADMIN' @@ -138,8 +138,8 @@ test.describe(`Testfälle für das eigene Profil anzeigen: Umgebung: ${process.e const header = new HeaderPage(page); const login: LoginPage = new LoginPage(page); - const vorname = await generateLehrerVorname(); - const nachname = await generateLehrerNachname(); + const vorname = await generateVorname(); + const nachname = await generateNachname(); const organisation = testschule; const dienststellenNr = '1111111'; const rollenname = await generateRolleName(); @@ -196,8 +196,8 @@ test.describe(`Testfälle für das eigene Profil anzeigen: Umgebung: ${process.e const header = new HeaderPage(page); const login: LoginPage = new LoginPage(page); - const vorname = await generateLehrerVorname(); - const nachname = await generateLehrerNachname(); + const vorname = await generateVorname(); + const nachname = await generateNachname(); const organisation = testschule; const dienststellenNr = '1111111'; const rollenname = await generateRolleName(); @@ -253,8 +253,8 @@ test.describe(`Testfälle für das eigene Profil anzeigen: Umgebung: ${process.e const header = new HeaderPage(page); const login: LoginPage = new LoginPage(page); - const vorname = await generateLehrerVorname(); - const nachname = await generateLehrerNachname(); + const vorname = await generateVorname(); + const nachname = await generateNachname(); const organisation = testschule; const dienststellenNr = '1111111'; const rollenname = await generateRolleName(); @@ -312,8 +312,8 @@ test.describe(`Testfälle für das eigene Profil anzeigen: Umgebung: ${process.e const login: LoginPage = new LoginPage(page); let personId = ''; - const vorname = await generateLehrerVorname(); - const nachname = await generateLehrerNachname(); + const vorname = await generateVorname(); + const nachname = await generateNachname(); const organisation1 = testschule; const organisation2 = testschule665; const dienststellenNr1 = '1111111'; @@ -420,7 +420,7 @@ test.describe(`Testfälle für das eigene Profil anzeigen: Umgebung: ${process.e await test.step(`Lehrer via api anlegen und mit diesem anmelden`, async () => { const idSP = await getSPId(page, 'itslearning'); - const userInfo: UserInfo = await createRolleAndPersonWithUserContext(page, organisation, rollenart, await generateLehrerNachname(), await generateLehrerVorname(), idSP, await generateRolleName()); + const userInfo: UserInfo = await createRolleAndPersonWithUserContext(page, organisation, rollenart, await generateNachname(), await generateVorname(), idSP, await generateRolleName()); roleId.push(userInfo.rolleId); username.push(userInfo.username); @@ -452,4 +452,4 @@ test.describe(`Testfälle für das eigene Profil anzeigen: Umgebung: ${process.e await page.goBack(); }); }); -}); +}); \ No newline at end of file