From 823635f7eb8f4a42026f909012220f123105c907 Mon Sep 17 00:00:00 2001 From: Manfred <141728305+jakobmadp@users.noreply.github.com> Date: Thu, 13 Jun 2024 07:04:55 +0200 Subject: [PATCH] Spsh 689 benutzer alle standardrollen (#35) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Testfall Suchfunktion Ergebnisliste fertig * beforeEach mit step * Tests für Benutzer für alle Standardrollen anlegen fertig * Update pages/admin/PersonCreationView.page.ts Co-authored-by: Julian Aggarwal <141040785+jaggarnaut@users.noreply.github.com> * fakerjs wieder aktiviert * removed new line --------- Co-authored-by: Julian Aggarwal <141040785+jaggarnaut@users.noreply.github.com> --- README.md | 4 +- pages/admin/PersonCreationView.page.ts | 9 +- playwright.config.ts | 3 +- tests/Person.spec.ts | 347 ++++++++++++++++++------- tests/Rolle.spec.ts | 30 +-- tests/Schule.spec.ts | 46 +--- tests/api.spec.ts | 18 +- tests/workflow.spec.ts | 4 +- 8 files changed, 307 insertions(+), 154 deletions(-) diff --git a/README.md b/README.md index d655a3e..b3e3a07 100644 --- a/README.md +++ b/README.md @@ -54,11 +54,11 @@ Die Default-Umgebung ist in der playwright.config.ts konfiguriert (dotenv.config ## ESLint ausführen -`npm run lint` +npm run lint ## Testdatenerstellung durch die Playwright-Tests -Neue Testdaten, die während der Testausführung erstellt werden, haben den Prefix 'TAuto', gefolgt von einem Buchstaben für den Typ + einen Zufallswert aus faker-js(Beispiel: XXX). Der Name einer Rolle ist z.B. TAutoR1XXX. Somit ist es einfacher, die Testdaten zu erkennen, die durch die Playwright-Tests erstellt wurden. +Neue Testdaten, die während der Testausführung erstellt werden, haben den Prefix 'TAuto-PW-', gefolgt von einem Buchstaben für den Typ + einen Zufallswert aus der Methode generateRandomString. Der Name einer Rolle ist z.B. TAuto-PW-R-xxxxxxxxx. Somit ist es einfacher, die Testdaten zu erkennen, die durch die Playwright-Tests erstellt wurden. ## Hinweise für die Entwicklung der Tests diff --git a/pages/admin/PersonCreationView.page.ts b/pages/admin/PersonCreationView.page.ts index a7a4dff..78b522c 100644 --- a/pages/admin/PersonCreationView.page.ts +++ b/pages/admin/PersonCreationView.page.ts @@ -8,9 +8,12 @@ export class PersonCreationViewPage{ readonly Input_Vorname: Locator; readonly Input_Nachname: Locator; readonly combobox_Schulstrukturknoten: Locator; + readonly combobox_Klasse: Locator; readonly button_PersonAnlegen: Locator; readonly text_success: Locator; - readonly text_Neuer_Benutzername: Locator; + readonly text_Bestaetigungsseite_Benutzername: Locator; + readonly text_Bestaetigungsseite_Benutzernachname: Locator; + readonly text_Bestaetigungsseite_Rolle: Locator; readonly input_EinstiegsPasswort: Locator; readonly button_ZurueckErgebnisliste: Locator; @@ -22,9 +25,11 @@ export class PersonCreationViewPage{ this.Input_Vorname = page.getByTestId('vorname-input').locator('.v-field__input'); this.Input_Nachname = page.getByTestId('familienname-input').locator('.v-field__input'); this.combobox_Schulstrukturknoten = page.getByTestId('organisation-select').locator('.v-field__input'); + this.combobox_Klasse = page.getByTestId('klasse-select').locator('.v-field__input'); this.button_PersonAnlegen = page.getByTestId('person-creation-form-create-button'); this.text_success = page.getByTestId('person-success-text'); - this.text_Neuer_Benutzername = page.getByTestId('created-person-username'); + this.text_Bestaetigungsseite_Benutzername = page.getByTestId('created-person-username'); + this.text_Bestaetigungsseite_Rolle = page.getByTestId('created-person-rolle'); this.input_EinstiegsPasswort = page.locator('[data-testid="password-output-field"] input'); this.button_ZurueckErgebnisliste = page.getByTestId('back-to-list-button'); } diff --git a/playwright.config.ts b/playwright.config.ts index 4b1e261..15b18ea 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -15,8 +15,7 @@ export default defineConfig({ workers: process.env.CI ? 1 : undefined, reporter: [["html"]], use: { - actionTimeout: 0, - trace: "on-first-retry", + // trace: "on-first-retry", locale: "de-DE", timezoneId: "Europe/Brussels", screenshot: "only-on-failure", diff --git a/tests/Person.spec.ts b/tests/Person.spec.ts index b218ebb..887ecec 100644 --- a/tests/Person.spec.ts +++ b/tests/Person.spec.ts @@ -1,4 +1,3 @@ -import { faker } from "@faker-js/faker/locale/de"; import { test, expect } from "@playwright/test"; import { LandingPage } from "../pages/LandingView.page"; import { LoginPage } from "../pages/LoginView.page"; @@ -7,6 +6,7 @@ import { MenuPage } from "../pages/MenuBar.page"; import { PersonCreationViewPage } from "../pages/admin/PersonCreationView.page"; import { PersonManagementViewPage } from "../pages/admin/PersonManagementView.page"; import { HeaderPage } from "../pages/Header.page"; +import { faker } from "@faker-js/faker/locale/de"; const PW = process.env.PW; const ADMIN = process.env.USER; @@ -18,7 +18,6 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro const Landing = new LandingPage(page); const Startseite = new StartPage(page); const Login = new LoginPage(page); - await page.goto(FRONTEND_URL); await Landing.button_Anmelden.click(); await Login.login(ADMIN, PW); @@ -26,7 +25,9 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro }); }); - test("Einen Benutzer mit der Rolle Lehrkraft anlegen", async ({ page }) => { + test("Einen Benutzer mit der Rolle Lehrkraft anlegen und anschließend mit diesem Benutzer anmelden", async ({ + page, + }) => { const Landing = new LandingPage(page); const Startseite = new StartPage(page); const Login = new LoginPage(page); @@ -36,9 +37,8 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro const Header = new HeaderPage(page); const Rolle = "Lehrkraft"; - const Vorname = "TAutoV" + faker.person.firstName(); - const Nachname = - "TAutoN" + faker.person.lastName() + "-" + faker.person.lastName(); // Wahrscheinlichkeit doppelter Namen verringern + const Vorname = "TAuto-PW-V-" + faker.person.firstName(); + const Nachname = "TAuto-PW-N-" + faker.person.lastName(); const Schulstrukturknoten = "(Testschule Schulportal)"; let Benutzername = ""; let Einstiegspasswort = ""; @@ -46,9 +46,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro await test.step(`Dialog Person anlegen öffnen`, async () => { await Startseite.card_item_schulportal_administration.click(); await Menue.menueItem_BenutzerAnlegen.click(); - await expect(PersonCreationView.text_h2_PersonAnlegen).toHaveText( - "Neuen Benutzer hinzufügen" - ); + await expect(PersonCreationView.text_h2_PersonAnlegen).toHaveText("Neuen Benutzer hinzufügen"); }); await test.step(`Benutzer anlegen`, async () => { @@ -64,23 +62,17 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro await PersonCreationView.button_PersonAnlegen.click(); await expect(PersonCreationView.text_success).toBeVisible(); - Benutzername = - await PersonCreationView.text_Neuer_Benutzername.innerText(); - Einstiegspasswort = - await PersonCreationView.input_EinstiegsPasswort.inputValue(); + Benutzername = await PersonCreationView.text_Bestaetigungsseite_Benutzername.innerText(); + Einstiegspasswort = await PersonCreationView.input_EinstiegsPasswort.inputValue(); }); await test.step(`In der Ergebnisliste prüfen dass der neue Benutzer ${Nachname} angezeigt wird`, async () => { // Der Klick auf die Ergebnisliste funktioniert nicht zuverlaessig, darum der direkte Sprung in die Ergebnisliste via URL await page.goto(FRONTEND_URL + "admin/personen"); - await expect(PersonManagementView.text_h2_Benutzerverwaltung).toHaveText( - "Benutzerverwaltung" - ); + await expect(PersonManagementView.text_h2_Benutzerverwaltung).toHaveText("Benutzerverwaltung"); await PersonManagementView.input_Suchfeld.fill(Nachname); await PersonManagementView.button_Suchen.click(); - await expect( - page.getByRole("cell", { name: Nachname, exact: true }) - ).toBeVisible(); + await expect(page.getByRole("cell", { name: Nachname, exact: true })).toBeVisible(); }); await test.step(`Der neue Benutzer meldet sich mit dem temporären Passwort am Portal an und vergibt ein neues Passwort`, async () => { @@ -90,6 +82,196 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro await Login.UpdatePW(); await expect(Startseite.text_h2_Ueberschrift).toBeVisible(); }); + + await test.step(`Benutzer wieder löschen`, async () => { + await Header.button_logout.click(); + await Landing.button_Anmelden.click(); + await Login.login(ADMIN, PW); + await expect(Startseite.text_h2_Ueberschrift).toBeVisible(); + + await page.goto(FRONTEND_URL + "admin/personen"); + await PersonManagementView.input_Suchfeld.fill(Nachname); + await PersonManagementView.button_Suchen.click(); + await page.getByRole("cell", { name: Nachname, exact: true }).click(); + await page.getByTestId("open-person-delete-dialog-icon").click(); + await page.getByTestId("person-delete-button").click(); + await page.getByTestId("close-person-delete-success-dialog-button").click(); + }); + }); + + test("Einen Benutzer mit der Rolle Landesadmin anlegen", async ({ page }) => { + const Startseite = new StartPage(page); + const Menue = new MenuPage(page); + const PersonCreationView = new PersonCreationViewPage(page); + const PersonManagementView = new PersonManagementViewPage(page); + + const Rolle = "Landesadmin"; + const Vorname = "TAuto-PW-V-" + faker.person.firstName(); + const Nachname = "TAuto-PW-N-" + faker.person.lastName(); + const Schulstrukturknoten = "Öffentliche Schulen Land Schleswig Holstein"; + + await test.step(`Dialog Person anlegen öffnen`, async () => { + await Startseite.card_item_schulportal_administration.click(); + await Menue.menueItem_BenutzerAnlegen.click(); + await expect(PersonCreationView.text_h2_PersonAnlegen).toHaveText("Neuen Benutzer hinzufügen"); + }); + + await test.step(`Benutzer anlegen`, async () => { + await PersonCreationView.combobox_Rolle.click(); + await page.getByText(Rolle).click(); + await PersonCreationView.Input_Vorname.fill(Vorname); + await PersonCreationView.Input_Nachname.fill(Nachname); + await PersonCreationView.combobox_Schulstrukturknoten.click(); + await page.getByText(Schulstrukturknoten).click(); + await PersonCreationView.button_PersonAnlegen.click(); + }); + + await test.step(`Prüfen dass der Benutzer mit der Rolle Landesadmin angelegt wurde`, async () => { + await expect(PersonCreationView.text_success).toBeVisible(); + await expect(PersonCreationView.text_Bestaetigungsseite_Rolle).toHaveText("Landesadmin"); + }); + + await test.step(`Benutzer wieder löschen`, async () => { + await page.goto(FRONTEND_URL + "admin/personen"); + await PersonManagementView.input_Suchfeld.fill(Nachname); + await PersonManagementView.button_Suchen.click(); + await page.getByRole("cell", { name: Nachname, exact: true }).click(); + await page.getByTestId("open-person-delete-dialog-icon").click(); + await page.getByTestId("person-delete-button").click(); + await page.getByTestId("close-person-delete-success-dialog-button").click(); + }); + }); + + test("Einen Benutzer mit der Rolle LiV anlegen", async ({ page }) => { + const Startseite = new StartPage(page); + const Menue = new MenuPage(page); + const PersonCreationView = new PersonCreationViewPage(page); + const PersonManagementView = new PersonManagementViewPage(page); + + const Rolle = "LiV"; + const Vorname = "TAuto-PW-V-" + faker.person.firstName(); + const Nachname = "TAuto-PW-N-" + faker.person.lastName(); + const Schulstrukturknoten = "(Testschule Schulportal)"; + + await test.step(`Dialog Person anlegen öffnen`, async () => { + await Startseite.card_item_schulportal_administration.click(); + await Menue.menueItem_BenutzerAnlegen.click(); + await expect(PersonCreationView.text_h2_PersonAnlegen).toHaveText("Neuen Benutzer hinzufügen"); + }); + + await test.step(`Benutzer anlegen`, async () => { + await PersonCreationView.combobox_Rolle.click(); + await page.getByText(Rolle).click(); + await PersonCreationView.Input_Vorname.fill(Vorname); + await PersonCreationView.Input_Nachname.fill(Nachname); + await PersonCreationView.combobox_Schulstrukturknoten.click(); + await page.getByText(Schulstrukturknoten).click(); + await PersonCreationView.button_PersonAnlegen.click(); + }); + + await test.step(`Prüfen dass der Benutzer mit der Rolle Landesadmin angelegt wurde`, async () => { + await expect(PersonCreationView.text_success).toBeVisible(); + await expect(PersonCreationView.text_Bestaetigungsseite_Rolle).toHaveText("LiV"); + }); + + await test.step(`Benutzer wieder löschen`, async () => { + await page.goto(FRONTEND_URL + "admin/personen"); + await PersonManagementView.input_Suchfeld.fill(Nachname); + await PersonManagementView.button_Suchen.click(); + await page.getByRole("cell", { name: Nachname, exact: true }).click(); + await page.getByTestId("open-person-delete-dialog-icon").click(); + await page.getByTestId("person-delete-button").click(); + await page.getByTestId("close-person-delete-success-dialog-button").click(); + }); + }); + + test("Einen Benutzer mit der Rolle Schuladmin anlegen", async ({ page }) => { + const Startseite = new StartPage(page); + const Menue = new MenuPage(page); + const PersonCreationView = new PersonCreationViewPage(page); + const PersonManagementView = new PersonManagementViewPage(page); + + const Rolle = "Schuladmin"; + const Vorname = "TAuto-PW-V-" + faker.person.firstName(); + const Nachname = "TAuto-PW-N-" + faker.person.lastName(); + const Schulstrukturknoten = "(Testschule Schulportal)"; + + await test.step(`Dialog Person anlegen öffnen`, async () => { + await Startseite.card_item_schulportal_administration.click(); + await Menue.menueItem_BenutzerAnlegen.click(); + await expect(PersonCreationView.text_h2_PersonAnlegen).toHaveText("Neuen Benutzer hinzufügen"); + }); + + await test.step(`Benutzer anlegen`, async () => { + await PersonCreationView.combobox_Rolle.click(); + await page.getByText(Rolle).click(); + await PersonCreationView.Input_Vorname.fill(Vorname); + await PersonCreationView.Input_Nachname.fill(Nachname); + await PersonCreationView.combobox_Schulstrukturknoten.click(); + await page.getByText(Schulstrukturknoten).click(); + await PersonCreationView.button_PersonAnlegen.click(); + }); + + await test.step(`Prüfen dass der Benutzer mit der Rolle Landesadmin angelegt wurde`, async () => { + await expect(PersonCreationView.text_success).toBeVisible(); + await expect(PersonCreationView.text_Bestaetigungsseite_Rolle).toHaveText("Schuladmin"); + }); + + await test.step(`Benutzer wieder löschen`, async () => { + await page.goto(FRONTEND_URL + "admin/personen"); + await PersonManagementView.input_Suchfeld.fill(Nachname); + await PersonManagementView.button_Suchen.click(); + await page.getByRole("cell", { name: Nachname, exact: true }).click(); + await page.getByTestId("open-person-delete-dialog-icon").click(); + await page.getByTestId("person-delete-button").click(); + await page.getByTestId("close-person-delete-success-dialog-button").click(); + }); + }); + + test("Einen Benutzer mit der Rolle SuS anlegen", async ({ page }) => { + const Startseite = new StartPage(page); + const Menue = new MenuPage(page); + const PersonCreationView = new PersonCreationViewPage(page); + const PersonManagementView = new PersonManagementViewPage(page); + + const Rolle = "SuS"; + const Vorname = "TAuto-PW-V-" + faker.person.firstName(); + const Nachname = "TAuto-PW-N-" + faker.person.lastName(); + const Schulstrukturknoten = "(Carl-Orff-Schule)"; + const Klasse = "9a" + + await test.step(`Dialog Person anlegen öffnen`, async () => { + await Startseite.card_item_schulportal_administration.click(); + await Menue.menueItem_BenutzerAnlegen.click(); + await expect(PersonCreationView.text_h2_PersonAnlegen).toHaveText("Neuen Benutzer hinzufügen"); + }); + + await test.step(`Benutzer anlegen`, async () => { + await PersonCreationView.combobox_Rolle.click(); + await page.getByText(Rolle).click(); + await PersonCreationView.Input_Vorname.fill(Vorname); + await PersonCreationView.Input_Nachname.fill(Nachname); + await PersonCreationView.combobox_Schulstrukturknoten.click(); + await page.getByText(Schulstrukturknoten).click(); + await PersonCreationView.combobox_Klasse.click(); + await page.getByText(Klasse).click(); + await PersonCreationView.button_PersonAnlegen.click(); + }); + + await test.step(`Prüfen dass der Benutzer mit der Rolle Landesadmin angelegt wurde`, async () => { + await expect(PersonCreationView.text_success).toBeVisible(); + await expect(PersonCreationView.text_Bestaetigungsseite_Rolle).toHaveText("SuS"); + }); + + await test.step(`Benutzer wieder löschen`, async () => { + await page.goto(FRONTEND_URL + "admin/personen"); + await PersonManagementView.input_Suchfeld.fill(Nachname); + await PersonManagementView.button_Suchen.click(); + await page.getByRole("cell", { name: Nachname, exact: true }).click(); + await page.getByTestId("open-person-delete-dialog-icon").click(); + await page.getByTestId("person-delete-button").click(); + await page.getByTestId("close-person-delete-success-dialog-button").click(); + }); }); test("Ergebnisliste Benutzer auf Vollständigkeit prüfen", async ({ @@ -102,22 +284,14 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro await test.step(`Benutzerverwaltung öffnen und alle Elemente in der Ergebnisliste auf Existenz prüfen`, async () => { await Startseite.card_item_schulportal_administration.click(); await Menue.menueItem_AlleBenutzerAnzeigen.click(); - await expect( - PersonManagementView.text_h1_Administrationsbereich - ).toBeVisible(); - await expect( - PersonManagementView.text_h2_Benutzerverwaltung - ).toBeVisible(); - await expect(PersonManagementView.text_h2_Benutzerverwaltung).toHaveText( - "Benutzerverwaltung" - ); + await expect(PersonManagementView.text_h1_Administrationsbereich).toBeVisible(); + await expect(PersonManagementView.text_h2_Benutzerverwaltung ).toBeVisible(); + await expect(PersonManagementView.text_h2_Benutzerverwaltung).toHaveText("Benutzerverwaltung"); await expect(PersonManagementView.input_Suchfeld).toBeVisible(); await expect(PersonManagementView.button_Suchen).toBeVisible(); await expect(PersonManagementView.table_header_Nachname).toBeVisible(); await expect(PersonManagementView.table_header_Vorname).toBeVisible(); - await expect( - PersonManagementView.table_header_Benutzername - ).toBeVisible(); + await expect(PersonManagementView.table_header_Benutzername).toBeVisible(); await expect(PersonManagementView.table_header_KopersNr).toBeVisible(); await expect(PersonManagementView.table_header_Rolle).toBeVisible(); await expect(PersonManagementView.table_header_Zuordnungen).toBeVisible(); @@ -146,21 +320,16 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro await test.step(`Dialog Person anlegen öffnen`, async () => { await Startseite.card_item_schulportal_administration.click(); await Menue.menueItem_BenutzerAnlegen.click(); - await expect(PersonCreationView.text_h2_PersonAnlegen).toHaveText( - "Neuen Benutzer hinzufügen" - ); + await expect(PersonCreationView.text_h2_PersonAnlegen).toHaveText("Neuen Benutzer hinzufügen"); }); await test.step(`Rolle Landesadmin auswaehlen und verfügbare Einträge für die Organisationsebene prüfen(Gültige Organisationen: ROOT, LAND)`, async () => { await PersonCreationView.combobox_Rolle.click(); await page.getByText(Rolle_LANDESADMIN).click(); - const response_schulstrukturknoten = await page.waitForResponse( - (response) => - response.url().includes("/api/personenkontext/schulstrukturknoten") + const response_schulstrukturknoten = await page.waitForResponse((response) => response.url().includes("/api/personenkontext/schulstrukturknoten") ); - const responseBody_schulstrukturknoten = - await response_schulstrukturknoten.json(); + const responseBody_schulstrukturknoten = await response_schulstrukturknoten.json(); let gueltig = true; responseBody_schulstrukturknoten.moeglicheSsks.forEach((element) => { @@ -179,10 +348,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro await PersonCreationView.combobox_Rolle.click(); await page.getByText(Rolle_LEHR).click(); - const response_schulstrukturknoten = await page.waitForResponse( - (response) => - response.url().includes("/api/personenkontext/schulstrukturknoten") - ); + const response_schulstrukturknoten = await page.waitForResponse((response) => response.url().includes("/api/personenkontext/schulstrukturknoten")); const responseBody_schulstrukturknoten = await response_schulstrukturknoten.json(); let gueltig = true; @@ -200,12 +366,8 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro await PersonCreationView.combobox_Rolle.click(); await page.getByText(Rolle_LIV).click(); - const response_schulstrukturknoten = await page.waitForResponse( - (response) => - response.url().includes("/api/personenkontext/schulstrukturknoten") - ); - const responseBody_schulstrukturknoten = - await response_schulstrukturknoten.json(); + const response_schulstrukturknoten = await page.waitForResponse((response) => response.url().includes("/api/personenkontext/schulstrukturknoten")); + const responseBody_schulstrukturknoten = await response_schulstrukturknoten.json(); let gueltig = true; responseBody_schulstrukturknoten.moeglicheSsks.forEach((element) => { @@ -221,12 +383,8 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro await PersonCreationView.combobox_Rolle.click(); await page.getByText(Rolle_SCHULADMIN).click(); - const response_schulstrukturknoten = await page.waitForResponse( - (response) => - response.url().includes("/api/personenkontext/schulstrukturknoten") - ); - const responseBody_schulstrukturknoten = - await response_schulstrukturknoten.json(); + const response_schulstrukturknoten = await page.waitForResponse((response) => response.url().includes("/api/personenkontext/schulstrukturknoten")); + const responseBody_schulstrukturknoten = await response_schulstrukturknoten.json(); let gueltig = true; responseBody_schulstrukturknoten.moeglicheSsks.forEach((element) => { @@ -242,10 +400,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro await PersonCreationView.combobox_Rolle.click(); await page.getByText(Rolle_SUS).click(); - const response_schulstrukturknoten = await page.waitForResponse( - (response) => - response.url().includes("/api/personenkontext/schulstrukturknoten") - ); + const response_schulstrukturknoten = await page.waitForResponse((response) => response.url().includes("/api/personenkontext/schulstrukturknoten")); const responseBody_schulstrukturknoten = await response_schulstrukturknoten.json(); let gueltig = true; @@ -260,58 +415,72 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro }); test("In der Ergebnisliste die Suchfunktion ausführen", async ({ page }) => { - const Startseite = new StartPage(page); - const Menue = new MenuPage(page); const PersonManagementView = new PersonManagementViewPage(page); + const PersonCreationView = new PersonCreationViewPage(page); + + const Rolle = "Lehrkraft"; + const Vorname = "TAuto-PW-V-" + faker.person.firstName(); + const Nachname = "TAuto-PW-N-" + faker.person.lastName(); + const Schulstrukturknoten = "(Testschule Schulportal)"; + let Benutzername = ""; + + await test.step(`Benutzer Lehrkraft anlegen`, async () => { + await page.goto(FRONTEND_URL + "admin/personen/new"); + await PersonCreationView.combobox_Rolle.click(); + await page.getByText(Rolle).click(); + + await PersonCreationView.Input_Vorname.fill(Vorname); + await PersonCreationView.Input_Nachname.fill(Nachname); + + await PersonCreationView.combobox_Schulstrukturknoten.click(); + await page.getByText(Schulstrukturknoten).click(); + + await PersonCreationView.button_PersonAnlegen.click(); + Benutzername = await PersonCreationView.text_Bestaetigungsseite_Benutzername.innerText(); + await expect(PersonCreationView.text_success).toBeVisible(); + }); await test.step(`Benutzerverwaltung öffnen und Suche nach Vornamen `, async () => { - await Startseite.card_item_schulportal_administration.click(); - await Menue.menueItem_AlleBenutzerAnzeigen.click(); - await expect(PersonManagementView.text_h2_Benutzerverwaltung).toHaveText( - "Benutzerverwaltung" - ); - await PersonManagementView.input_Suchfeld.fill("Yvonne"); + await page.goto(FRONTEND_URL + "admin/personen"); + await expect(PersonManagementView.text_h2_Benutzerverwaltung).toHaveText("Benutzerverwaltung"); + await PersonManagementView.input_Suchfeld.fill(Vorname); await PersonManagementView.button_Suchen.click(); - await expect( - page.getByRole("cell", { name: "yvonbreitenfelshohenroehr" }) - ).toBeVisible(); + await expect(page.getByRole("cell", { name: Vorname })).toBeVisible(); }); await test.step(`Suche nach Nachnamen `, async () => { - await PersonManagementView.input_Suchfeld.fill( - "von Breitenfels-Hohenröhr" - ); + await PersonManagementView.input_Suchfeld.fill(Nachname); await PersonManagementView.button_Suchen.click(); - await expect( - page.getByRole("cell", { name: "yvonbreitenfelshohenroehr" }) - ).toBeVisible(); + await expect(page.getByRole("cell", { name: Nachname })).toBeVisible(); }); await test.step(`Suche nach Benutzernamen `, async () => { - await PersonManagementView.input_Suchfeld.fill( - "yvonbreitenfelshohenroehr" - ); + await PersonManagementView.input_Suchfeld.fill(Benutzername); await PersonManagementView.button_Suchen.click(); - await expect( - page.getByRole("cell", { name: "von Breitenfels-Hohenröhr" }) - ).toBeVisible(); + await expect(page.getByRole("cell", { name: Nachname})).toBeVisible(); }); await test.step(`Suche nach Dienststellennummer `, async () => { await PersonManagementView.input_Suchfeld.fill("0056357"); await PersonManagementView.button_Suchen.click(); - await expect( - page.getByRole("cell", { name: "ssuperadmin" }) - ).toBeVisible(); + await expect(page.getByRole("cell", { name: "ssuperadmin" })).toBeVisible(); }); await test.step(`Suche mit leerer Ergebnisliste. Gepüft wird das der Text "Keine Daten gefunden." gefunden wird, danach wird gepüft dass die Tabelle 0 Zeilen hat.`, async () => { await PersonManagementView.input_Suchfeld.fill("!§$%aavvccdd44xx@"); await PersonManagementView.button_Suchen.click(); - await expect( - page.getByRole("cell", { name: "Keine Daten gefunden." }) - ).toBeVisible(); + await expect(page.getByRole("cell", { name: "Keine Daten gefunden." })).toBeVisible(); await expect(page.locator("v-data-table__td")).toHaveCount(0); }); + + await test.step(`Benutzer wieder löschen`, async () => { + await page.goto(FRONTEND_URL + "admin/personen"); + await PersonManagementView.input_Suchfeld.fill(Nachname); + await PersonManagementView.button_Suchen.click(); + await page.getByRole("cell", { name: Nachname, exact: true }).click(); + await page.getByTestId("open-person-delete-dialog-icon").click(); + await page.getByTestId("person-delete-button").click(); + await page.getByTestId("close-person-delete-success-dialog-button").click(); + }); }); -}); +}); \ No newline at end of file diff --git a/tests/Rolle.spec.ts b/tests/Rolle.spec.ts index 8596439..b9a03ad 100644 --- a/tests/Rolle.spec.ts +++ b/tests/Rolle.spec.ts @@ -1,4 +1,3 @@ -import { faker } from "@faker-js/faker/locale/de"; import { test, expect } from "@playwright/test"; import { LandingPage } from "../pages/LandingView.page"; import { LoginPage } from "../pages/LoginView.page"; @@ -6,6 +5,7 @@ import { StartPage } from "../pages/StartView.page"; import { MenuPage } from "../pages/MenuBar.page"; import { RolleCreationViewPage } from "../pages/admin/RolleCreationView.page"; import { RolleManagementViewPage } from "../pages/admin/RolleManagementView.page"; +import { faker } from "@faker-js/faker/locale/de"; const PW = process.env.PW; const ADMIN = process.env.USER; @@ -31,8 +31,8 @@ test.describe(`Testfälle für die Administration von Rollen: Umgebung: ${proces const RolleCreationView = new RolleCreationViewPage(page); const RolleManagementView = new RolleManagementViewPage(page); - const ROLLENNAME1 = "TAutoR1" + faker.word.noun() + "-" + faker.word.noun(); // Wahrscheinlichkeit doppelter Namen verringern - const ROLLENNAME2 = "TAutoR2" + faker.word.noun() + "-" + faker.word.noun(); + const ROLLENNAME1 = "TAuto-PW-R1-" + faker.lorem.word({ length: { min: 8, max: 12 }}); + const ROLLENNAME2 = "TAuto-PW-R2-" + faker.lorem.word({ length: { min: 8, max: 12 }}); const SCHULSTRUKTURKNOTEN1 = "Wurzel Land Schleswig Holstein"; const SCHULSTRUKTURKNOTEN2 = "Amalie-Sieveking-Schule"; const ROLLENART1 = "Lern"; @@ -41,9 +41,7 @@ test.describe(`Testfälle für die Administration von Rollen: Umgebung: ${proces await test.step(`Dialog Rolle anlegen öffnen`, async () => { await Startseite.card_item_schulportal_administration.click(); await Menue.menueItem_RolleAnlegen.click(); - await expect(RolleCreationView.text_h2_RolleAnlegen).toHaveText( - "Neue Rolle hinzufügen" - ); + await expect(RolleCreationView.text_h2_RolleAnlegen).toHaveText("Neue Rolle hinzufügen"); }); await test.step(`Erste Rolle anlegen`, async () => { @@ -73,15 +71,9 @@ test.describe(`Testfälle für die Administration von Rollen: Umgebung: ${proces await test.step(`In der Ergebnisliste prüfen dass die beiden neuen Rollen angezeigt sind`, async () => { await Menue.menueItem_AlleRollenAnzeigen.click(); - await expect(RolleManagementView.text_h2_Rollenverwaltung).toHaveText( - "Rollenverwaltung" - ); - await expect( - page.getByRole("cell", { name: `${ROLLENNAME1}` }) - ).toBeVisible(); - await expect( - page.getByRole("cell", { name: `${ROLLENNAME2}` }) - ).toBeVisible(); + await expect(RolleManagementView.text_h2_Rollenverwaltung).toHaveText("Rollenverwaltung"); + await expect(page.getByRole("cell", { name: ROLLENNAME1 })).toBeVisible(); + await expect(page.getByRole("cell", { name: ROLLENNAME2 })).toBeVisible(); }); }); @@ -93,16 +85,12 @@ test.describe(`Testfälle für die Administration von Rollen: Umgebung: ${proces await test.step(`Rollenverwaltung öffnen und alle Elemente in der Ergebnisliste auf Existenz prüfen`, async () => { await Startseite.card_item_schulportal_administration.click(); await Menue.menueItem_AlleRollenAnzeigen.click(); - await expect( - RolleManagementView.text_h1_Administrationsbereich - ).toBeVisible(); + await expect(RolleManagementView.text_h1_Administrationsbereich).toBeVisible(); await expect(RolleManagementView.text_h2_Rollenverwaltung).toBeVisible(); await expect(RolleManagementView.table_header_Rollenname).toBeVisible(); await expect(RolleManagementView.table_header_Rollenart).toBeVisible(); await expect(RolleManagementView.table_header_Merkmale).toBeVisible(); - await expect( - RolleManagementView.table_header_Administrationsebene - ).toBeVisible(); + await expect(RolleManagementView.table_header_Administrationsebene).toBeVisible(); }); }); }); diff --git a/tests/Schule.spec.ts b/tests/Schule.spec.ts index 0f46b03..1bc8fa0 100644 --- a/tests/Schule.spec.ts +++ b/tests/Schule.spec.ts @@ -1,4 +1,3 @@ -import { faker } from "@faker-js/faker/locale/de"; import { test, expect } from "@playwright/test"; import { LandingPage } from "../pages/LandingView.page"; import { LoginPage } from "../pages/LoginView.page"; @@ -6,6 +5,7 @@ import { StartPage } from "../pages/StartView.page"; import { MenuPage } from "../pages/MenuBar.page"; import { SchuleCreationViewPage } from "../pages/admin/SchuleCreationView.page"; import { SchuleManagementViewPage } from "../pages/admin/SchuleManagementView.page"; +import { faker } from "@faker-js/faker/locale/de"; const PW = process.env.PW; const ADMIN = process.env.USER; @@ -31,25 +31,21 @@ test.describe(`Testfälle für die Administration von Schulen: Umgebung: ${proce const SchuleCreationView = new SchuleCreationViewPage(page); const SchuleManagementView = new SchuleManagementViewPage(page); - const SCHULNAME1 = "TAutoS1" + faker.word.noun() + "-" + faker.word.noun(); // Wahrscheinlichkeit doppelter Namen verringern - const SCHULNAME2 = "TAutoS2" + faker.word.noun() + "-" + faker.word.noun(); - const DIENSTSTELLENNUMMER1 = "3310176111"; - const DIENSTSTELLENNUMMER2 = "0481165563"; + const SCHULNAME1 = "TAuto-PW-S1-" + faker.lorem.word({ length: { min: 8, max: 12 }}); + const SCHULNAME2 = "TAuto-PW-S2-" + faker.lorem.word({ length: { min: 8, max: 12 }}); + const DIENSTSTELLENNUMMER1 = "0" + faker.number.bigInt({ min: 10000000, max: 100000000 }); + const DIENSTSTELLENNUMMER2 = "0" + faker.number.bigInt({ min: 10000000, max: 100000000 }); await test.step(`Dialog Schule anlegen öffnen`, async () => { await Startseite.card_item_schulportal_administration.click(); await Menue.menueItem_SchuleAnlegen.click(); - await expect(SchuleCreationView.text_h2_SchuleAnlegen).toHaveText( - "Neue Schule hinzufügen" - ); + await expect(SchuleCreationView.text_h2_SchuleAnlegen).toHaveText("Neue Schule hinzufügen"); }); await test.step(`Erste Schule anlegen`, async () => { await SchuleCreationView.radio_button_Public_Schule.click(); - await SchuleCreationView.input_Dienststellennummer.fill( - DIENSTSTELLENNUMMER1 - ); + await SchuleCreationView.input_Dienststellennummer.fill(DIENSTSTELLENNUMMER1); await SchuleCreationView.input_Schulname.fill(SCHULNAME1); await SchuleCreationView.button_SchuleAnlegen.click(); await expect(SchuleCreationView.text_success).toBeVisible(); @@ -60,9 +56,7 @@ test.describe(`Testfälle für die Administration von Schulen: Umgebung: ${proce await SchuleCreationView.radio_button_Public_Schule.click(); await SchuleCreationView.input_Dienststellennummer.click(); - await SchuleCreationView.input_Dienststellennummer.fill( - DIENSTSTELLENNUMMER2 - ); + await SchuleCreationView.input_Dienststellennummer.fill(DIENSTSTELLENNUMMER2); await SchuleCreationView.input_Schulname.fill(SCHULNAME2); await SchuleCreationView.button_SchuleAnlegen.click(); @@ -71,15 +65,9 @@ test.describe(`Testfälle für die Administration von Schulen: Umgebung: ${proce await test.step(`In der Ergebnisliste prüfen, dass die beiden neuen Schulen angezeigt werden`, async () => { await Menue.menueItem_AlleSchulenAnzeigen.click(); - await expect(SchuleManagementView.text_h2_Schulverwaltung).toHaveText( - "Schulverwaltung" - ); - await expect( - page.getByRole("cell", { name: `${SCHULNAME1}` }) - ).toBeVisible(); - await expect( - page.getByRole("cell", { name: `${SCHULNAME2}` }) - ).toBeVisible(); + await expect(SchuleManagementView.text_h2_Schulverwaltung).toHaveText("Schulverwaltung"); + await expect(page.getByRole("cell", { name: SCHULNAME1 })).toBeVisible(); + await expect(page.getByRole("cell", { name: SCHULNAME2 })).toBeVisible(); }); }); @@ -91,16 +79,10 @@ test.describe(`Testfälle für die Administration von Schulen: Umgebung: ${proce await test.step(`Schulverwaltung öffnen und Alle Elemente in der Ergebnisliste auf Existenz prüfen`, async () => { await Startseite.card_item_schulportal_administration.click(); await Menue.menueItem_AlleSchulenAnzeigen.click(); - await expect( - SchuleManagementView.text_h1_Administrationsbereich - ).toBeVisible(); + await expect(SchuleManagementView.text_h1_Administrationsbereich).toBeVisible(); await expect(SchuleManagementView.text_h2_Schulverwaltung).toBeVisible(); - await expect(SchuleManagementView.text_h2_Schulverwaltung).toHaveText( - "Schulverwaltung" - ); - await expect( - SchuleManagementView.table_header_Dienstellennummer - ).toBeVisible(); + await expect(SchuleManagementView.text_h2_Schulverwaltung).toHaveText("Schulverwaltung"); + await expect(SchuleManagementView.table_header_Dienstellennummer).toBeVisible(); await expect(SchuleManagementView.table_header_Schulname).toBeVisible(); }); }); diff --git a/tests/api.spec.ts b/tests/api.spec.ts index 25e57ab..f31e79b 100644 --- a/tests/api.spec.ts +++ b/tests/api.spec.ts @@ -1,8 +1,9 @@ -import { faker } from '@faker-js/faker/locale/de'; import { test, expect } from '@playwright/test'; import { LoginPage } from '../pages/LoginView.page'; import { LandingPage } from '../pages/LandingView.page'; import { StartPage } from '../pages/StartView.page'; +import { faker } from "@faker-js/faker/locale/de"; +import { PersonManagementViewPage } from "../pages/admin/PersonManagementView.page"; const PW = process.env.PW; const USER = process.env.USER; @@ -13,6 +14,9 @@ test.describe(`Spike um die API anzusprechen: Umgebung: ${process.env.UMGEBUNG}: const Login = new LoginPage(page); const Landing = new LandingPage(page); const Start = new StartPage(page); + const PersonManagementView = new PersonManagementViewPage(page); + const Vorname = "TAuto-PW-V-" + faker.person.firstName(); + const Nachname = "TAuto-PW-N-" + faker.person.lastName(); await test.step(`Anmelden mit Benutzer ${USER}`, async () => { await page.goto(FRONTEND_URL); @@ -28,8 +32,6 @@ test.describe(`Spike um die API anzusprechen: Umgebung: ${process.env.UMGEBUNG}: }) await test.step(`POST Request personen, neuen Benutzer anlegen`, async () => { - const Vorname = 'TAutoV' + faker.person.firstName(); - const Nachname = 'TAutoN' + faker.person.lastName() + '-' + faker.person.lastName(); // Wahrscheinlichkeit doppelter Namen verringern const response = await page.request.post(FRONTEND_URL + 'api/personen/', { data: { "name": { @@ -40,5 +42,15 @@ test.describe(`Spike um die API anzusprechen: Umgebung: ${process.env.UMGEBUNG}: }) expect(response.status()).toBe(201); }) + + await test.step(`Benutzer wieder löschen`, async () => { + await page.goto(FRONTEND_URL + "admin/personen"); + await PersonManagementView.input_Suchfeld.fill(Nachname); + await PersonManagementView.button_Suchen.click(); + await page.getByRole("cell", { name: Nachname, exact: true }).click(); + await page.getByTestId("open-person-delete-dialog-icon").click(); + await page.getByTestId("person-delete-button").click(); + await page.getByTestId("close-person-delete-success-dialog-button").click(); + }); }) }) \ No newline at end of file diff --git a/tests/workflow.spec.ts b/tests/workflow.spec.ts index 1e8b34d..1ccb638 100644 --- a/tests/workflow.spec.ts +++ b/tests/workflow.spec.ts @@ -72,9 +72,7 @@ test.describe(`Testfälle für den Test von workflows: Umgebung: ${process.env.U }); await test.step(`In den User-Details PW-Reset Dialog starten`, async () => { - await expect( - PersonManagementDetail.text_h2_BenutzerBearbeiten - ).toBeVisible(); + await expect(PersonManagementDetail.text_h2_BenutzerBearbeiten).toBeVisible(); await PersonManagementDetail.button_pwChange.click(); await expect(PersonManagementDetail.text_pwResetInfo).toBeVisible(); });