Skip to content

Commit

Permalink
Spsh 689 benutzer alle standardrollen (#35)
Browse files Browse the repository at this point in the history
* 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 <[email protected]>

* fakerjs wieder aktiviert

* removed new line

---------

Co-authored-by: Julian Aggarwal <[email protected]>
  • Loading branch information
jakobmadp and jaggarnaut authored Jun 13, 2024
1 parent c191fb8 commit 823635f
Show file tree
Hide file tree
Showing 8 changed files with 307 additions and 154 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
9 changes: 7 additions & 2 deletions pages/admin/PersonCreationView.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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');
}
Expand Down
3 changes: 1 addition & 2 deletions playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
347 changes: 258 additions & 89 deletions tests/Person.spec.ts

Large diffs are not rendered by default.

30 changes: 9 additions & 21 deletions tests/Rolle.spec.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
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";
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;
Expand All @@ -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";
Expand All @@ -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 () => {
Expand Down Expand Up @@ -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();
});
});

Expand All @@ -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();
});
});
});
46 changes: 14 additions & 32 deletions tests/Schule.spec.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
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";
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;
Expand All @@ -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();
Expand All @@ -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();
Expand All @@ -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();
});
});

Expand All @@ -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();
});
});
Expand Down
18 changes: 15 additions & 3 deletions tests/api.spec.ts
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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);
Expand All @@ -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": {
Expand All @@ -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();
});
})
})
4 changes: 1 addition & 3 deletions tests/workflow.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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();
});
Expand Down

0 comments on commit 823635f

Please sign in to comment.