Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SPSH-967: Implemented PW tests for 2FA #95

Merged
merged 13 commits into from
Nov 25, 2024
1 change: 0 additions & 1 deletion pages/ProfileView.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,5 @@ export class ProfilePage{
this.cardHeadline_2FA = page.getByTestId('two-factor-card');
this.text_no2FA = page.getByText('Es wurde noch kein zweiter Faktor für Sie eingerichtet.');
this.button_2FAEinrichten = page.getByTestId('open-2FA-self-service-dialog-icon');

}
}
42 changes: 42 additions & 0 deletions pages/admin/PersonDetailsView.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,22 @@ export class PersonDetailsViewPage{
readonly radio_button_befristet: Locator;
readonly text_sperrdatumAb: Locator;
readonly text_sperrdatumBis: Locator;

// 2FA
readonly text_h3_2FA: Locator;
readonly text_token_IstEingerichtet_info: Locator;
readonly text_neuen_token_einrichten_info: Locator;
readonly text_kein_token_ist_Eingerichtet: Locator;
readonly button_2FAEinrichten: Locator;
readonly text_2FA_info: Locator;
readonly dialog_2FA_Einrichten: Locator;
readonly text_h2_2FA_cardheadline: Locator;
readonly selectOption_2FA_softwareToken: Locator;
readonly text_2FA_softwareToken_info: Locator;
readonly button_2FA_Einrichten_Weiter: Locator;
readonly button_close_softwareToken_dialog: Locator;
readonly button_2FA_Zuruecksetzen_Weiter: Locator;


constructor(page){
this.page = page;
Expand Down Expand Up @@ -77,6 +93,20 @@ export class PersonDetailsViewPage{
this.radio_button_befristet = page.getByTestId('befristet-radio-button').getByLabel('Befristet');
this.text_sperrdatumAb = page.getByTestId('lock-info-1-attribute');
this.text_sperrdatumBis = page.getByTestId('lock-info-2-attribute');

//2FA
this.text_h3_2FA = page.getByText('Zwei-Faktor-Authentifizierung (2FA)');
this.text_kein_token_ist_Eingerichtet = page.getByText('Für diesen Benutzer ist aktuell keine 2FA eingerichtet.');
this.text_token_IstEingerichtet_info = page.getByText('Für diesen Benutzer ist aktuell ein Software-Token eingerichtet.');
this.text_neuen_token_einrichten_info = page.getByText('Um einen neuen Token einzurichten, muss der aktuelle Token durch die schulischen Administratorinnen und Administratoren zurückgesetzt werden.');
this.button_2FAEinrichten = page.getByTestId('open-2FA-dialog-icon');
this.dialog_2FA_Einrichten = page.getByTestId('two-factor-authentication-dialog');
this.text_h2_2FA_cardheadline = this.dialog_2FA_Einrichten.getByTestId('layout-card-headline');
this.text_2FA_softwareToken_info = page.getByText('Ein QR-Code wird generiert, welcher direkt eingescannt oder ausgedruckt werden kann.');
this.selectOption_2FA_softwareToken = page.getByTestId('software-token-radio-button');
this.button_2FA_Einrichten_Weiter = page.getByTestId('proceed-two-factor-authentication-dialog-button');
this.button_close_softwareToken_dialog = page.getByTestId('close-software-token-dialog-button');
this.button_2FA_Zuruecksetzen_Weiter = page.getByTestId('two-way-authentification-set-up-button');
}

public async lockUserWithoutDate() {
Expand Down Expand Up @@ -111,4 +141,16 @@ export class PersonDetailsViewPage{
public async checkLockDateTo(lockDateTo: string) {
await expect(this.text_sperrdatumBis).toHaveText(lockDateTo);
}

public async tokenEinrichten() {
await this.button_2FAEinrichten.click();
await expect(this.text_h2_2FA_cardheadline).toHaveText('Zwei-Faktor-Authentifizierung einrichten');
await expect(this.selectOption_2FA_softwareToken).toHaveText('Software-Token einrichten');
await expect(this.text_2FA_softwareToken_info).toBeVisible();
await this.button_2FA_Einrichten_Weiter.click();

await expect(this.text_h2_2FA_cardheadline).toHaveText('Software-Token einrichten');
await this.button_close_softwareToken_dialog.click();
}

}
184 changes: 184 additions & 0 deletions tests/PersonBearbeiten.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -195,4 +195,188 @@ 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, STAGE]}, async ({ page }) => {
const vorname = "TAuto-PW-V-" + faker.person.firstName();
const nachname = "TAuto-PW-N-" + faker.person.lastName();
let userInfoLehrer: UserInfo;

await test.step(`Testdaten: Lehrer mit einer Rolle(LERN) über die api anlegen ${ADMIN}`, async () => {
userInfoLehrer = await createRolleAndPersonWithUserContext(page, testschule, 'LERN', nachname, vorname, 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(`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, STAGE]}, 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 generateLehrerNachname(), await generateLehrerVorname(), 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, STAGE]}, 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, STAGE]}, 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.tokenEinrichten();
})

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, STAGE]}, 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 Token einrichten`, async () => {
await expect(personDetailsView.text_h3_2FA).toBeVisible();
await personDetailsView.tokenEinrichten();
})

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, STAGE]}, 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 generateLehrerNachname(), await generateLehrerVorname(), 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.tokenEinrichten();
})

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();
})
})
});
2 changes: 1 addition & 1 deletion tests/Profile.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -452,4 +452,4 @@ test.describe(`Testfälle für das eigene Profil anzeigen: Umgebung: ${process.e
await page.goBack();
});
});
});
});