diff --git a/base/api/testHelperOrganisation.page.ts b/base/api/testHelperOrganisation.page.ts index 779e3ff..5112fcb 100644 --- a/base/api/testHelperOrganisation.page.ts +++ b/base/api/testHelperOrganisation.page.ts @@ -26,4 +26,16 @@ export async function getOrganisationId(page: Page, nameOrganisation: string): P expect(response.status()).toBe(200); const json = await response.json(); return json[0].id; +} + +export async function deleteKlasse(page: Page, KlasseId: string): Promise { + const response = await page.request.delete(FRONTEND_URL + `api/organisationen/${KlasseId}/klasse`, {}); + expect(response.status()).toBe(204); +} + +export async function getKlasseId(page: Page, Klassennname: string): Promise { + const response = await page.request.get(FRONTEND_URL + `api/organisationen?name=${Klassennname}&excludeTyp=ROOT&excludeTyp=LAND&excludeTyp=TRAEGER&excludeTyp=SCHULE&excludeTyp=ANBIETER&excludeTyp=SONSTIGE%20ORGANISATION%20%2F%20EINRICHTUNG&excludeTyp=UNBESTAETIGT`, {}); + expect(response.status()).toBe(200); + const json = await response.json(); + return json[0].id; } \ No newline at end of file diff --git a/base/api/testHelperPerson.page.ts b/base/api/testHelperPerson.page.ts index 6112ca1..69764e8 100644 --- a/base/api/testHelperPerson.page.ts +++ b/base/api/testHelperPerson.page.ts @@ -26,6 +26,7 @@ export async function createPerson(page: Page, familienname: string, vorname: st } export async function createPersonWithUserContext(page: Page, organisationName: string, rollenArt: string, familienname: string, vorname: string, idSP: string, rolleName: string): Promise { + // Organisation wird nicht angelegt, da diese zur Zeit nicht gelöscht werden kann // API-Calls machen und Benutzer mit Kontext anlegen const organisationId: string = await getOrganisationId(page, organisationName); const rolleId: string = await createRolle(page, rollenArt, organisationId, rolleName); @@ -37,4 +38,11 @@ export async function createPersonWithUserContext(page: Page, organisationName: export async function deletePersonen(page: Page, personId: string): Promise { const response = await page.request.delete(FRONTEND_URL + `api/personen/${personId}`, {}); expect(response.status()).toBe(204); +} + +export async function getPersonId(page: Page, Benutzername: string): Promise { + const response = await page.request.get(FRONTEND_URL + `api/personen-frontend?suchFilter=${Benutzername}`, {}); + expect(response.status()).toBe(200); + const json = await response.json(); + return json.items[0].person.id; } \ No newline at end of file diff --git a/base/api/testHelperRolle.page.ts b/base/api/testHelperRolle.page.ts index b784d17..23e0e20 100644 --- a/base/api/testHelperRolle.page.ts +++ b/base/api/testHelperRolle.page.ts @@ -38,4 +38,11 @@ export async function addSystemrechtToRolle(page: Page, rolleId: string, systemr export async function deleteRolle(page: Page, RolleId: string): Promise { const response = await page.request.delete(FRONTEND_URL + `api/rolle/${RolleId}`, {}); expect(response.status()).toBe(204); +} + +export async function getRolleId(page: Page, Rollenname: string): Promise { + const response = await page.request.get(FRONTEND_URL + `api/rolle?searchStr=${Rollenname}`, {}); + expect(response.status()).toBe(200); + const json = await response.json(); + return json[0].id; } \ No newline at end of file diff --git a/pages/FooterDataTable.page .ts b/pages/FooterDataTable.page.ts similarity index 100% rename from pages/FooterDataTable.page .ts rename to pages/FooterDataTable.page.ts diff --git a/pages/LoginView.page.ts b/pages/LoginView.page.ts index acb2886..3f15d96 100644 --- a/pages/LoginView.page.ts +++ b/pages/LoginView.page.ts @@ -44,5 +44,6 @@ export class LoginPage{ await this.input_ConfirmPW.click(); await this.input_ConfirmPW.fill(new_Password); await this.button_submitPWChange.click(); + return new_Password; } } \ No newline at end of file diff --git a/pages/admin/KlasseCreationView.page.ts b/pages/admin/KlasseCreationView.page.ts index 90ed1cb..fc2131a 100644 --- a/pages/admin/KlasseCreationView.page.ts +++ b/pages/admin/KlasseCreationView.page.ts @@ -3,17 +3,37 @@ import { type Locator, Page } from '@playwright/test'; export class KlasseCreationViewPage{ readonly page: Page; readonly text_h2_KlasseAnlegen: Locator; + readonly button_Schliessen: Locator; readonly combobox_Schulstrukturknoten: Locator; readonly input_Klassenname: Locator; readonly button_KlasseAnlegen: Locator; readonly text_success: Locator; + readonly icon_success: Locator; + readonly text_DatenGespeichert: Locator; + readonly label_Schule: Locator; + readonly data_Schule: Locator; + readonly label_Klasse: Locator; + readonly data_Klasse: Locator; + readonly button_ZurueckErgebnisliste: Locator; + readonly button_WeitereKlasseAnlegen: Locator; constructor(page){ + // Anlage Klasse this.page = page; this.text_h2_KlasseAnlegen = page.getByTestId('layout-card-headline'); + this.button_Schliessen = page.getByTestId('close-layout-card-button'); this.combobox_Schulstrukturknoten = page.getByTestId('schule-select').locator('.v-input__control'); this.input_Klassenname = page.getByTestId('klassenname-input').locator('input'); this.button_KlasseAnlegen = page.getByTestId('klasse-form-create-button'); + // Bestätigungsseite Klasse this.text_success = page.getByTestId('klasse-success-text'); + this.icon_success = page.locator('.mdi-check-circle'); + this.text_DatenGespeichert = page.getByText('Folgende Daten wurden gespeichert:'); + this.label_Schule = page.getByText('Schule:', { exact: true }); + this.data_Schule = page.getByTestId('created-klasse-schule'); + this.label_Klasse = page.getByText('Klassenname:', { exact: true }); + this.data_Klasse = page.getByTestId('created-klasse-name'); + this.button_ZurueckErgebnisliste = page.getByTestId('back-to-list-button'); + this.button_WeitereKlasseAnlegen = page.getByTestId('create-another-klasse-button'); } } \ No newline at end of file diff --git a/pages/admin/KlasseManagementView.page.ts b/pages/admin/KlasseManagementView.page.ts index b747a62..c82ce2f 100644 --- a/pages/admin/KlasseManagementView.page.ts +++ b/pages/admin/KlasseManagementView.page.ts @@ -8,6 +8,9 @@ export class KlasseManagementViewPage{ readonly combobox_Filter_Klasse: Locator; readonly table_header_Dienststellennummer: Locator; readonly table_header_Klassenname: Locator; + readonly icon_KlasseLoeschen: Locator; + readonly button_KlasseLoeschen: Locator; + readonly button_SchliesseKlasseLoeschenDialog: Locator; constructor(page){ this.page = page; @@ -17,5 +20,8 @@ export class KlasseManagementViewPage{ this.combobox_Filter_Klasse = page.getByPlaceholder('Klasse'); this.table_header_Dienststellennummer = page.getByText('Dienststellennummer'); this.table_header_Klassenname = page.getByTestId('klasse-table').getByText('Klasse', { exact: true }); + this.icon_KlasseLoeschen = page.getByTestId('open-klasse-delete-dialog-icon'); + this.button_KlasseLoeschen = page.getByTestId('klasse-delete-button'); + this.button_SchliesseKlasseLoeschenDialog = page.getByTestId('close-klasse-delete-success-dialog-button'); } } \ No newline at end of file diff --git a/pages/admin/PersonCreationView.page.ts b/pages/admin/PersonCreationView.page.ts index 0e682f6..5b28754 100644 --- a/pages/admin/PersonCreationView.page.ts +++ b/pages/admin/PersonCreationView.page.ts @@ -4,6 +4,7 @@ export class PersonCreationViewPage{ readonly page: Page; readonly body: Locator; readonly text_h2_PersonAnlegen: Locator; + readonly button_Schliessen: Locator; readonly combobox_Rolle: Locator; readonly combobox_Rolle_Clear: Locator; readonly Input_Vorname: Locator; @@ -13,16 +14,32 @@ export class PersonCreationViewPage{ readonly combobox_Klasse: Locator; readonly button_PersonAnlegen: Locator; readonly text_success: Locator; - readonly text_Bestaetigungsseite_Benutzername: Locator; + readonly icon_success: Locator; + readonly text_DatenGespeichert: Locator; readonly text_Bestaetigungsseite_Benutzernachname: Locator; - readonly text_Bestaetigungsseite_Rolle: Locator; readonly input_EinstiegsPasswort: Locator; + readonly label_EinstiegsPasswort: Locator; readonly button_ZurueckErgebnisliste: Locator; + readonly button_WeiterenBenutzerAnlegen: Locator; + readonly label_Vorname: Locator; + readonly data_Vorname: Locator; + readonly label_Nachname: Locator; + readonly data_Nachname: Locator; + readonly label_Benutzername: Locator; + readonly data_Benutzername: Locator; + readonly label_Rolle: Locator; + readonly data_Rolle: Locator; + readonly label_Organisationsebene: Locator; + readonly data_Organisationsebene: Locator; + readonly label_Klasse: Locator; + readonly data_Klasse: Locator; constructor(page){ + // Anlage Person this.page = page; this.body = page.locator('body'); this.text_h2_PersonAnlegen = page.getByTestId('layout-card-headline'); + this.button_Schliessen = page.getByTestId('close-layout-card-button'); this.combobox_Rolle = page.getByTestId('rolle-select').locator('.v-field__input'); this.combobox_Rolle_Clear = page.getByTestId('rolle-select').getByLabel('leeren'); this.combobox_Schulstrukturknoten_Clear = page.getByTestId('organisation-select').getByLabel('leeren'); @@ -31,10 +48,25 @@ export class PersonCreationViewPage{ 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'); + // Bestätigungsseite Klasse this.text_success = page.getByTestId('person-success-text'); - this.text_Bestaetigungsseite_Benutzername = page.getByTestId('created-person-username'); - this.text_Bestaetigungsseite_Rolle = page.getByTestId('created-person-rolle'); + this.icon_success = page.locator('.mdi-check-circle'); + this.text_DatenGespeichert = page.getByText('Folgende Daten wurden gespeichert:'); + this.label_Vorname = page.getByText('Vorname:', { exact: true }); + this.data_Vorname = page.getByTestId('created-person-vorname'); + this.label_Nachname = page.getByText('Nachname:', { exact: true }); + this.data_Nachname = page.getByTestId('created-person-familienname'); + this.label_Benutzername = page.getByText('Benutzername:', { exact: true }); + this.data_Benutzername = page.getByTestId('created-person-username'); + this.label_Rolle = page.getByText('Rolle:', { exact: true }); + this.data_Rolle = page.getByTestId('created-person-rolle'); + this.label_Organisationsebene = page.getByText('Organisationsebene:', { exact: true }); + this.data_Organisationsebene = page.getByTestId('created-person-organisation'); + this.label_Klasse = page.getByText('Klasse:', { exact: true }); + this.data_Klasse = page.getByTestId('created-person-klasse'); + this.label_EinstiegsPasswort = page.getByText(' Einstiegs-Passwort:', { exact: true }); this.input_EinstiegsPasswort = page.locator('[data-testid="password-output-field"] input'); this.button_ZurueckErgebnisliste = page.getByTestId('back-to-list-button'); + this.button_WeiterenBenutzerAnlegen = page.getByTestId('create-another-person-button'); } } \ No newline at end of file diff --git a/pages/admin/RolleCreationView.page.ts b/pages/admin/RolleCreationView.page.ts index e7aaaf5..f11b5ce 100644 --- a/pages/admin/RolleCreationView.page.ts +++ b/pages/admin/RolleCreationView.page.ts @@ -3,23 +3,61 @@ import { type Locator, Page } from '@playwright/test'; export class RolleCreationViewPage{ readonly page: Page; readonly text_h2_RolleAnlegen: Locator; + readonly button_Schliessen: Locator; readonly combobox_Schulstrukturknoten: Locator; readonly combobox_Rollenart: Locator; readonly input_Rollenname: Locator; readonly combobox_Merkmal: Locator; + readonly combobox_Angebote: Locator; + readonly combobox_Systemrechte: Locator; readonly button_RolleAnlegen: Locator; readonly button_WeitereRolleAnlegen: Locator; + readonly button_ZurueckErgebnisliste: Locator; readonly text_success: Locator; + readonly icon_success: Locator; + readonly text_DatenGespeichert: Locator; + readonly label_Administrationsebene: Locator; + readonly data_Administrationsebene: Locator; + readonly label_Rollenart: Locator; + readonly data_Rollenart: Locator; + readonly label_Rollenname: Locator; + readonly data_Rollenname: Locator; + readonly label_Merkmale: Locator; + readonly data_Merkmale: Locator; + readonly label_Angebote: Locator; + readonly data_Angebote: Locator; + readonly label_Systemrechte: Locator; + readonly data_Systemrechte: Locator; constructor(page){ + // Anlage Rolle this.page = page; this.text_h2_RolleAnlegen = page.getByTestId('layout-card-headline'); + this.button_Schliessen = page.getByTestId('close-layout-card-button'); this.combobox_Schulstrukturknoten = page.getByTestId('administrationsebene-select').locator('.v-input__control'); this.combobox_Rollenart = page.getByTestId('rollenart-select').locator('.v-input__control'); this.input_Rollenname = page.getByTestId('rollenname-input').locator('input'); this.combobox_Merkmal = page.getByTestId('merkmale-select').locator('.v-input__control'); + this.combobox_Angebote = page.getByTestId('service-provider-select').locator('.v-input__control'); + this.combobox_Systemrechte = page.getByTestId('systemrechte-select').locator('.v-input__control'); this.button_RolleAnlegen = page.getByTestId('rolle-form-create-button'); this.button_WeitereRolleAnlegen = page.getByTestId('create-another-rolle-button'); + // Bestätigungsseite Rolle + this.button_ZurueckErgebnisliste = page.getByTestId('back-to-list-button'); this.text_success = page.getByTestId('rolle-success-text'); + this.icon_success = page.locator('.mdi-check-circle'); + this.text_DatenGespeichert = page.getByText('Folgende Daten wurden gespeichert:'); + this.label_Administrationsebene = page.getByText('Administrationsebene:', { exact: true }); + this.data_Administrationsebene = page.getByTestId('created-rolle-administrationsebene'); + this.label_Rollenart = page.getByText('Rollenart:', { exact: true }); + this.data_Rollenart = page.getByTestId('created-rolle-rollenart'); + this.label_Rollenname = page.getByText('Rollenname:', { exact: true }); + this.data_Rollenname = page.getByTestId('created-rolle-name'); + this.label_Merkmale = page.getByText('Merkmale:', { exact: true }); + this.data_Merkmale = page.getByTestId('created-rolle-merkmale'); + this.label_Angebote = page.getByText('Zugeordnete Angebote:', { exact: true }); + this.data_Angebote = page.getByTestId('created-rolle-angebote'); + this.label_Systemrechte = page.getByText('Systemrechte:', { exact: true }); + this.data_Systemrechte = page.getByTestId('created-rolle-systemrecht'); } } \ No newline at end of file diff --git a/pages/admin/SchuleCreationView.page.ts b/pages/admin/SchuleCreationView.page.ts index f2b350f..e7904b2 100644 --- a/pages/admin/SchuleCreationView.page.ts +++ b/pages/admin/SchuleCreationView.page.ts @@ -3,23 +3,45 @@ import { type Locator, Page } from '@playwright/test'; export class SchuleCreationViewPage{ readonly page: Page; readonly text_h2_SchuleAnlegen: Locator; + readonly button_Schliessen: Locator; readonly radio_button_Public_Schule: Locator; readonly radio_button_Ersatzschule: Locator; readonly input_Dienststellennummer: Locator; readonly input_Schulname: Locator; readonly button_SchuleAnlegen: Locator; readonly button_WeitereSchuleAnlegen: Locator; + readonly button_ZurueckErgebnisliste: Locator; readonly text_success: Locator; - + readonly icon_success: Locator; + readonly text_DatenGespeichert: Locator; + readonly label_Schulform: Locator; + readonly data_Schulform: Locator; + readonly label_Dienststellennummer: Locator; + readonly data_Dienststellennummer: Locator; + readonly label_Schulname: Locator; + readonly data_Schulname: Locator; + constructor(page){ + // Anlage Schule this.page = page; this.text_h2_SchuleAnlegen = page.getByTestId('layout-card-headline'); + this.button_Schliessen = page.getByTestId('close-layout-card-button'); this.radio_button_Public_Schule = page.getByTestId('public-schule-radio-button'); this.radio_button_Ersatzschule = page.getByTestId('ersatzschule-radio-button'); this.input_Dienststellennummer = page.getByTestId('dienststellennummer-input').locator('input'); this.input_Schulname = page.getByTestId('schulname-input').locator('input'); this.button_SchuleAnlegen = page.getByTestId('schule-creation-form-create-button'); this.button_WeitereSchuleAnlegen = page.getByTestId('create-another-schule-button'); + // Bestätigungsseite + this.button_ZurueckErgebnisliste = page.getByTestId('back-to-list-button'); this.text_success = page.getByTestId('schule-success-text'); + this.icon_success = page.locator('.mdi-check-circle'); + this.text_DatenGespeichert = page.getByText('Folgende Daten wurden gespeichert:'); + this.label_Schulform = page.getByText('Schulform:', { exact: true }); + this.data_Schulform = page.getByTestId('created-schule-form'); + this.label_Dienststellennummer = page.getByText('Dienststellennummer:', { exact: true }); + this.data_Dienststellennummer = page.getByTestId('created-schule-dienststellennummer'); + this.label_Schulname = page.getByText('Schulname:', { exact: true }); + this.data_Schulname = page.getByTestId('created-schule-name'); } } \ No newline at end of file diff --git a/pages/admin/SchuleManagementView.page.ts b/pages/admin/SchuleManagementView.page.ts index ab74a89..3670390 100644 --- a/pages/admin/SchuleManagementView.page.ts +++ b/pages/admin/SchuleManagementView.page.ts @@ -4,14 +4,14 @@ export class SchuleManagementViewPage{ readonly page: Page; readonly text_h1_Administrationsbereich: Locator; readonly text_h2_Schulverwaltung: Locator; - readonly table_header_Dienstellennummer: Locator; + readonly table_header_Dienststellennummer: Locator; readonly table_header_Schulname: Locator; constructor(page){ this.page = page; this.text_h1_Administrationsbereich = page.getByTestId('admin-headline'); this.text_h2_Schulverwaltung = page.getByTestId('layout-card-headline'); - this.table_header_Dienstellennummer = page.getByText('Dienststellennummer'); + this.table_header_Dienststellennummer = page.getByText('Dienststellennummer'); this.table_header_Schulname = page.getByText('Schulname'); } } \ No newline at end of file diff --git a/tests/Klasse.spec.ts b/tests/Klasse.spec.ts index b102df6..3ce66c3 100644 --- a/tests/Klasse.spec.ts +++ b/tests/Klasse.spec.ts @@ -7,6 +7,7 @@ import { KlasseCreationViewPage } from "../pages/admin/KlasseCreationView.page"; import { KlasseManagementViewPage } from "../pages/admin/KlasseManagementView.page"; import { faker } from "@faker-js/faker/locale/de"; import { HeaderPage } from "../pages/Header.page"; +import { getKlasseId, deleteKlasse } from "../base/api/testHelperOrganisation.page"; const PW = process.env.PW; const ADMIN = process.env.USER; @@ -33,7 +34,7 @@ test.describe(`Testfälle für die Administration von Klassen: Umgebung: ${proce }); }); - test("Eine Klasse anlegen und die Klasse anschließend in der Ergebnisliste suchen", async ({ page }) => { + test("Eine Klasse anlegen und die Klasse anschließend in der Ergebnisliste suchen und dann löschen", async ({ page }) => { const Startseite = new StartPage(page); const Menue = new MenuPage(page); const KlasseCreationView = new KlasseCreationViewPage(page); @@ -60,11 +61,15 @@ test.describe(`Testfälle für die Administration von Klassen: Umgebung: ${proce await KlasseManagementView.combobox_Filter_Schule.fill(SCHULNAME); await page.keyboard.press('ArrowDown'); await page.keyboard.press('Enter'); - await KlasseManagementView.combobox_Filter_Klasse.fill(KLASSENNAME); - await page.keyboard.press('ArrowDown'); - await page.keyboard.press('Enter'); - await expect(KlasseManagementView.text_h2_Klassenverwaltung).toHaveText("Klassenverwaltung"); - await expect(page.getByRole("cell", { name: KLASSENNAME })).toBeVisible(); + await KlasseManagementView.text_h2_Klassenverwaltung.click(); // dies schließt das Dropdown Klasse + await expect(page.getByRole('cell', { name: KLASSENNAME })).toBeVisible(); + }); + + await test.step(`Klasse löschen`, async () => { + await page.getByRole('cell', { name: KLASSENNAME }).click(); + await page.getByTestId('open-klasse-delete-dialog-button').click(); + await page.getByTestId('klasse-delete-button').click(); + await page.getByTestId('close-klasse-delete-success-dialog-button').click(); }); }); @@ -84,4 +89,41 @@ test.describe(`Testfälle für die Administration von Klassen: Umgebung: ${proce await expect(KlasseManagementView.table_header_Klassenname).toBeVisible(); }); }); + + test("Eine Klasse anlegen und die Bestätigungsseite vollständig prüfen", async ({ page }) => { + const KlasseCreationView = new KlasseCreationViewPage(page); + const DIENSTSTELLENNUMMER = '1111111'; + const SCHULNAME = "Testschule Schulportal"; + const KLASSENNAME = "TAuto-PW-K-12 " + faker.lorem.word({ length: { min: 10, max: 10 }}); + + await test.step(`Dialog Schule anlegen öffnen`, async () => { + await page.goto(FRONTEND_URL + 'admin/klassen/new'); + }); + + await test.step(`Klasse anlegen`, async () => { + await KlasseCreationView.combobox_Schulstrukturknoten.click(); + await page.getByText(SCHULNAME).click(); + await KlasseCreationView.input_Klassenname.fill(KLASSENNAME); + await KlasseCreationView.button_KlasseAnlegen.click(); + }); + + await test.step(`Bestätigungsseite prüfen`, async () => { + await expect(KlasseCreationView.text_h2_KlasseAnlegen).toHaveText('Neue Klasse hinzufügen'); + await expect(KlasseCreationView.button_Schliessen).toBeVisible(); + await expect(KlasseCreationView.text_success).toHaveText('Die Klasse wurde erfolgreich hinzugefügt.'); + await expect(KlasseCreationView.icon_success).toBeVisible(); + await expect(KlasseCreationView.text_DatenGespeichert).toBeVisible(); + await expect(KlasseCreationView.label_Schule).toBeVisible(); + await expect(KlasseCreationView.data_Schule).toHaveText(DIENSTSTELLENNUMMER + ' (' + SCHULNAME + ')'); + await expect(KlasseCreationView.label_Klasse).toBeVisible(); + await expect(KlasseCreationView.data_Klasse).toHaveText(KLASSENNAME); + await expect(KlasseCreationView.button_WeitereKlasseAnlegen).toBeVisible(); + await expect(KlasseCreationView.button_ZurueckErgebnisliste).toBeVisible(); + }); + + await test.step(`Testdaten löschen via API`, async () => { + const KlassenID = await getKlasseId(page, KLASSENNAME); + await deleteKlasse(page, KlassenID); + }); + }); }); \ No newline at end of file diff --git a/tests/Person.spec.ts b/tests/Person.spec.ts index ddff0d5..cbc51b8 100644 --- a/tests/Person.spec.ts +++ b/tests/Person.spec.ts @@ -7,6 +7,10 @@ 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"; +import { deletePersonen, getPersonId, createPersonWithUserContext } from "../base/api/testHelperPerson.page"; +import { getSPId } from "../base/api/testHelperServiceprovider.page"; +import { UserInfo } from "../base/api/testHelper.page"; +import { addSystemrechtToRolle, deleteRolle } from "../base/api/testHelperRolle.page"; const PW = process.env.PW; const ADMIN = process.env.USER; @@ -66,7 +70,7 @@ 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_Bestaetigungsseite_Benutzername.innerText(); + Benutzername = await PersonCreationView.data_Benutzername.innerText(); Einstiegspasswort = await PersonCreationView.input_EinstiegsPasswort.inputValue(); }); @@ -136,7 +140,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro 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 expect(PersonCreationView.data_Rolle).toHaveText("Landesadmin"); }); await test.step(`Benutzer wieder löschen`, async () => { @@ -179,7 +183,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro 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 expect(PersonCreationView.data_Rolle).toHaveText("LiV"); }); await test.step(`Benutzer wieder löschen`, async () => { @@ -222,7 +226,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro 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 expect(PersonCreationView.data_Rolle).toHaveText("Schuladmin"); }); await test.step(`Benutzer wieder löschen`, async () => { @@ -268,7 +272,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro 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 expect(PersonCreationView.data_Rolle).toHaveText("SuS"); }); await test.step(`Benutzer wieder löschen`, async () => { @@ -310,9 +314,9 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro const Menue = new MenuPage(page); const PersonCreationView = new PersonCreationViewPage(page); - const Organisation_Land = "Land Schleswig-Holstein"; - const Organisation_OeffentlicheSchule = "Öffentliche Schulen Land Schleswig-Holstein"; - const Organisation_Ersatzschule = "Ersatzschulen Land Schleswig-Holstein"; + const Organisation_Land = "0701114 (Land Schleswig-Holstein)"; + const Organisation_OeffentlicheSchule = "0702224 (Öffentliche Schulen Land Schleswig-Holstein)"; + const Organisation_Ersatzschule = "0703334 (Ersatzschulen Land Schleswig-Holstein)"; const Organisation_Schule = "1111111 (Testschule Schulportal)"; const Rolle_Landesadmin = "Landesadmin"; @@ -394,7 +398,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro await PersonCreationView.Input_Vorname.fill(Vorname); await PersonCreationView.Input_Nachname.fill(Nachname); await PersonCreationView.button_PersonAnlegen.click(); - Benutzername = await PersonCreationView.text_Bestaetigungsseite_Benutzername.innerText(); + Benutzername = await PersonCreationView.data_Benutzername.innerText(); await expect(PersonCreationView.text_success).toBeVisible(); }); @@ -441,4 +445,232 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro await page.getByTestId("close-person-delete-success-dialog-button").click(); }); }); -}); + + test("Eine Lehrkraft anlegen in der Rolle Landesadmin und die Bestätigungsseite vollständig prüfen", async ({ 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"; + const Dienststellennummer = "1111111"; + let BenutzerID = ''; + let Benutzername = ''; + + await test.step(`Dialog Person anlegen öffnen`, async () => { + await page.goto(FRONTEND_URL + 'admin/personen/new'); + }); + + await test.step(`Benutzer anlegen`, async () => { + await PersonCreationView.combobox_Schulstrukturknoten.click(); + await page.getByText(Schulstrukturknoten).click(); + await PersonCreationView.combobox_Rolle.click(); + await page.getByText(Rolle, { exact: true }).click(); + await PersonCreationView.Input_Vorname.fill(Vorname); + await PersonCreationView.Input_Nachname.fill(Nachname); + await PersonCreationView.button_PersonAnlegen.click(); + }); + + await test.step(`Bestätigungsseite prüfen`, async () => { + await expect(PersonCreationView.text_h2_PersonAnlegen).toBeVisible(); + await expect(PersonCreationView.button_Schliessen).toBeVisible(); + await expect(PersonCreationView.text_success).toHaveText(Vorname + ' ' + Nachname + ' wurde erfolgreich hinzugefügt.'); + await expect(PersonCreationView.text_DatenGespeichert).toBeVisible(); + await expect(PersonCreationView.label_Vorname).toHaveText('Vorname:'); + await expect(PersonCreationView.data_Vorname).toHaveText(Vorname); + await expect(PersonCreationView.label_Nachname).toHaveText('Nachname:'); + await expect(PersonCreationView.data_Nachname).toHaveText(Nachname); + await expect(PersonCreationView.label_Benutzername).toHaveText('Benutzername:'); + await expect(PersonCreationView.data_Benutzername).toContainText('tautopw'); + await expect(PersonCreationView.label_EinstiegsPasswort).toHaveText('Einstiegs-Passwort:'); + await expect(PersonCreationView.input_EinstiegsPasswort).toBeVisible(); + await expect(PersonCreationView.label_Rolle).toHaveText('Rolle:'); + await expect(PersonCreationView.data_Rolle).toHaveText(Rolle); + await expect(PersonCreationView.label_Organisationsebene).toHaveText('Organisationsebene:'); + await expect(PersonCreationView.data_Organisationsebene).toHaveText(Dienststellennummer + ' (' + Schulstrukturknoten + ')'); + await expect(PersonCreationView.label_Klasse).toHaveText('Klasse:'); + await expect(PersonCreationView.button_WeiterenBenutzerAnlegen).toBeVisible(); + await expect(PersonCreationView.button_ZurueckErgebnisliste).toBeVisible(); + }); + + await test.step(`Benutzer wieder löschen`, async () => { + Benutzername = await PersonCreationView.data_Benutzername.innerText(); + BenutzerID = await getPersonId(page, Benutzername); + await deletePersonen(page, BenutzerID); + }); + }); + + test("Mehere Benutzer hintereinander anlegen in der Rolle Landesadmin für die Rollenarten SuS und LEHR und die Bestätigungsseiten vollständig prüfen", async ({ page }) => { + const Landing = new LandingPage(page); + const Startseite = new StartPage(page); + const Login = new LoginPage(page); + const Header = new HeaderPage(page); + const PersonCreationView = new PersonCreationViewPage(page); + let userInfo: UserInfo; + + await test.step(`Testdaten: Landesadmin anlegen und mit diesem anmelden`, async () => { + const idSP = await getSPId(page, 'Schulportal-Administration'); + userInfo = await createPersonWithUserContext(page, 'Land Schleswig-Holstein', 'SYSADMIN', 'TAuto-PW-B-Master', 'TAuto-PW-B-Hans', idSP, 'TAuto-PW-R-RolleSYSADMIN'); + await addSystemrechtToRolle(page, userInfo.rolleId, 'ROLLEN_VERWALTEN'); + await addSystemrechtToRolle(page, userInfo.rolleId, 'PERSONEN_SOFORT_LOESCHEN'); + await addSystemrechtToRolle(page, userInfo.rolleId, 'PERSONEN_VERWALTEN'); + await addSystemrechtToRolle(page, userInfo.rolleId, 'SCHULEN_VERWALTEN'); + await addSystemrechtToRolle(page, userInfo.rolleId, 'KLASSEN_VERWALTEN'); + await addSystemrechtToRolle(page, userInfo.rolleId, 'SCHULTRAEGER_VERWALTEN'); + + await Header.button_logout.click(); + await Landing.button_Anmelden.click(); + await Login.login(userInfo.username, userInfo.password); + userInfo.password = await Login.UpdatePW(); + await expect(Startseite.text_h2_Ueberschrift).toBeVisible(); + }); + + // Testdaten + const Schulstrukturknoten = "Testschule Schulportal"; + const Dienststellennummer = "1111111"; + const Rolle1 = "SuS"; + const Vorname1 = "TAuto-PW-VA-" + faker.person.firstName(); + const Nachname1 = "TAuto-PW-NA-" + faker.person.lastName(); + const KLASSENNAME = "Playwright3a"; + let BenutzerID1 = ''; + let Benutzername1 = ''; + + const Rolle2 = "Lehrkraft"; + const Vorname2 = "TAuto-PW-VB-" + faker.person.firstName(); + const Nachname2 = "TAuto-PW-NB-" + faker.person.lastName(); + let BenutzerID2 = ''; + let Benutzername2 = ''; + + const Rolle3 = "Lehrkraft"; + const Vorname3 = "TAuto-PW-VC-" + faker.person.firstName(); + const Nachname3 = "TAuto-PW-NC-" + faker.person.lastName(); + let BenutzerID3 = ''; + let Benutzername3 = ''; + + await test.step(`Dialog Person anlegen öffnen`, async () => { + await page.goto(FRONTEND_URL + 'admin/personen/new'); + }); + + await test.step(`Benutzer Schüler anlegen`, async () => { + await PersonCreationView.combobox_Schulstrukturknoten.click(); + await page.getByText(Schulstrukturknoten).click(); + await PersonCreationView.combobox_Rolle.click(); + await page.getByText(Rolle1, { exact: true }).click(); + await PersonCreationView.combobox_Klasse.click(); + await page.getByText(KLASSENNAME).click(); + await PersonCreationView.Input_Vorname.fill(Vorname1); + await PersonCreationView.Input_Nachname.fill(Nachname1); + await PersonCreationView.Input_Vorname.click(); + await PersonCreationView.button_PersonAnlegen.click(); + }); + + await test.step(`Bestätigungsseite Schüler prüfen`, async () => { + await expect(PersonCreationView.text_h2_PersonAnlegen).toBeVisible(); + await expect(PersonCreationView.button_Schliessen).toBeVisible(); + await expect(PersonCreationView.text_success).toHaveText(Vorname1 + ' ' + Nachname1 + ' wurde erfolgreich hinzugefügt.'); + await expect(PersonCreationView.text_DatenGespeichert).toBeVisible(); + await expect(PersonCreationView.label_Vorname).toHaveText('Vorname:'); + await expect(PersonCreationView.data_Vorname).toHaveText(Vorname1); + await expect(PersonCreationView.label_Nachname).toHaveText('Nachname:'); + await expect(PersonCreationView.data_Nachname).toHaveText(Nachname1); + await expect(PersonCreationView.label_Benutzername).toHaveText('Benutzername:'); + await expect(PersonCreationView.data_Benutzername).toContainText('tautopw'); + await expect(PersonCreationView.label_EinstiegsPasswort).toHaveText('Einstiegs-Passwort:'); + await expect(PersonCreationView.input_EinstiegsPasswort).toBeVisible(); + await expect(PersonCreationView.label_Rolle).toHaveText('Rolle:'); + await expect(PersonCreationView.data_Rolle).toHaveText(Rolle1); + await expect(PersonCreationView.label_Organisationsebene).toHaveText('Organisationsebene:'); + await expect(PersonCreationView.data_Organisationsebene).toHaveText(Dienststellennummer + ' (' + Schulstrukturknoten + ')'); + await expect(PersonCreationView.label_Klasse).toHaveText('Klasse:'); + await expect(PersonCreationView.data_Klasse).toHaveText(KLASSENNAME); + await expect(PersonCreationView.button_WeiterenBenutzerAnlegen).toBeVisible(); + await expect(PersonCreationView.button_ZurueckErgebnisliste).toBeVisible(); + Benutzername1 = await PersonCreationView.data_Benutzername.innerText(); + BenutzerID1 = await getPersonId(page, Benutzername1); + }); + + await test.step(`Weiteren Benutzer Lehrer1 anlegen`, async () => { + await PersonCreationView.button_WeiterenBenutzerAnlegen.click(); + await PersonCreationView.combobox_Schulstrukturknoten.click(); + await page.getByText(Schulstrukturknoten).click(); + await PersonCreationView.combobox_Rolle.click(); + await page.getByText(Rolle2, { exact: true }).click(); + await PersonCreationView.Input_Vorname.fill(Vorname2); + await PersonCreationView.Input_Nachname.fill(Nachname2); + await PersonCreationView.Input_Vorname.click(); + await PersonCreationView.button_PersonAnlegen.click(); + }); + + await test.step(`Bestätigungsseite Lehrer1 prüfen`, async () => { + await expect(PersonCreationView.text_h2_PersonAnlegen).toBeVisible(); + await expect(PersonCreationView.button_Schliessen).toBeVisible(); + await expect(PersonCreationView.text_success).toHaveText(Vorname2 + ' ' + Nachname2 + ' wurde erfolgreich hinzugefügt.'); + await expect(PersonCreationView.text_DatenGespeichert).toBeVisible(); + await expect(PersonCreationView.label_Vorname).toHaveText('Vorname:'); + await expect(PersonCreationView.data_Vorname).toHaveText(Vorname2); + await expect(PersonCreationView.label_Nachname).toHaveText('Nachname:'); + await expect(PersonCreationView.data_Nachname).toHaveText(Nachname2); + await expect(PersonCreationView.label_Benutzername).toHaveText('Benutzername:'); + await expect(PersonCreationView.data_Benutzername).toContainText('tautopw'); + await expect(PersonCreationView.label_EinstiegsPasswort).toHaveText('Einstiegs-Passwort:'); + await expect(PersonCreationView.input_EinstiegsPasswort).toBeVisible(); + await expect(PersonCreationView.label_Rolle).toHaveText('Rolle:'); + await expect(PersonCreationView.data_Rolle).toHaveText(Rolle2); + await expect(PersonCreationView.label_Organisationsebene).toHaveText('Organisationsebene:'); + await expect(PersonCreationView.data_Organisationsebene).toHaveText(Dienststellennummer + ' (' + Schulstrukturknoten + ')'); + await expect(PersonCreationView.label_Klasse).toHaveText('Klasse:'); + await expect(PersonCreationView.data_Klasse).toHaveText('---'); + await expect(PersonCreationView.button_WeiterenBenutzerAnlegen).toBeVisible(); + await expect(PersonCreationView.button_ZurueckErgebnisliste).toBeVisible(); + Benutzername2 = await PersonCreationView.data_Benutzername.innerText(); + BenutzerID2 = await getPersonId(page, Benutzername2); + }); + + await test.step(`Weiteren Benutzer Lehrer2 anlegen`, async () => { + await PersonCreationView.button_WeiterenBenutzerAnlegen.click(); + await PersonCreationView.combobox_Schulstrukturknoten.click(); + await page.getByText(Schulstrukturknoten).click(); + await PersonCreationView.combobox_Rolle.click(); + await page.getByText(Rolle3, { exact: true }).click(); + await PersonCreationView.Input_Vorname.fill(Vorname3); + await PersonCreationView.Input_Nachname.fill(Nachname3); + await PersonCreationView.Input_Vorname.click(); + await PersonCreationView.button_PersonAnlegen.click(); + }); + + await test.step(`Bestätigungsseite Lehrer2 prüfen`, async () => { + await expect(PersonCreationView.text_h2_PersonAnlegen).toBeVisible(); + await expect(PersonCreationView.button_Schliessen).toBeVisible(); + await expect(PersonCreationView.text_success).toHaveText(Vorname3 + ' ' + Nachname3 + ' wurde erfolgreich hinzugefügt.'); + await expect(PersonCreationView.text_DatenGespeichert).toBeVisible(); + await expect(PersonCreationView.label_Vorname).toHaveText('Vorname:'); + await expect(PersonCreationView.data_Vorname).toHaveText(Vorname3); + await expect(PersonCreationView.label_Nachname).toHaveText('Nachname:'); + await expect(PersonCreationView.data_Nachname).toHaveText(Nachname3); + await expect(PersonCreationView.label_Benutzername).toHaveText('Benutzername:'); + await expect(PersonCreationView.data_Benutzername).toContainText('tautopw'); + await expect(PersonCreationView.label_EinstiegsPasswort).toHaveText('Einstiegs-Passwort:'); + await expect(PersonCreationView.input_EinstiegsPasswort).toBeVisible(); + await expect(PersonCreationView.label_Rolle).toHaveText('Rolle:'); + await expect(PersonCreationView.data_Rolle).toHaveText(Rolle3); + await expect(PersonCreationView.label_Organisationsebene).toHaveText('Organisationsebene:'); + await expect(PersonCreationView.data_Organisationsebene).toHaveText(Dienststellennummer + ' (' + Schulstrukturknoten + ')'); + await expect(PersonCreationView.label_Klasse).toHaveText('Klasse:'); + await expect(PersonCreationView.data_Klasse).toHaveText('---'); + await expect(PersonCreationView.button_WeiterenBenutzerAnlegen).toBeVisible(); + await expect(PersonCreationView.button_ZurueckErgebnisliste).toBeVisible(); + Benutzername3 = await PersonCreationView.data_Benutzername.innerText(); + BenutzerID3 = await getPersonId(page, Benutzername3); + }); + + await test.step(`Benutzer wieder löschen`, async () => { + await Header.button_logout.click(); + await Landing.button_Anmelden.click(); + await Login.login(ADMIN, PW); + await deletePersonen(page, BenutzerID1); + await deletePersonen(page, BenutzerID2); + await deletePersonen(page, BenutzerID3); + await deletePersonen(page, userInfo.personId); + await deleteRolle(page, userInfo.rolleId); + }); + }); +}); \ No newline at end of file diff --git a/tests/Rolle.spec.ts b/tests/Rolle.spec.ts index 3d03387..8ed66dc 100644 --- a/tests/Rolle.spec.ts +++ b/tests/Rolle.spec.ts @@ -7,6 +7,7 @@ import { RolleCreationViewPage } from "../pages/admin/RolleCreationView.page"; import { RolleManagementViewPage } from "../pages/admin/RolleManagementView.page"; import { faker } from "@faker-js/faker/locale/de"; import { HeaderPage } from "../pages/Header.page"; +import { getRolleId, deleteRolle } from "../base/api/testHelperRolle.page"; const PW = process.env.PW; const ADMIN = process.env.USER; @@ -33,7 +34,7 @@ test.describe(`Testfälle für die Administration von Rollen: Umgebung: ${proces }); }); - test("2 Rollen nacheinander anlegen", async ({ page }) => { + test("2 Rollen nacheinander anlegen mit Rollenarten LERN und LEHR", async ({ page }) => { const Startseite = new StartPage(page); const Menue = new MenuPage(page); const RolleCreationView = new RolleCreationViewPage(page); @@ -41,10 +42,14 @@ test.describe(`Testfälle für die Administration von Rollen: Umgebung: ${proces 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 = "Land Schleswig-Holstein"; + const SCHULSTRUKTURKNOTEN1 = "0701114 (Land Schleswig-Holstein)"; const SCHULSTRUKTURKNOTEN2 = "0703754 (Amalie-Sieveking-Schule)"; const ROLLENART1 = "Lern"; const ROLLENART2 = "Lehr"; + const Merkmal2 = "KoPers-Nr. ist Pflichtangabe"; + const Angebot1 = "itslearning"; + const AngebotA2 = "E-Mail"; + const AngebotB2 = "Kalender" await test.step(`Dialog Rolle anlegen öffnen`, async () => { await Startseite.card_item_schulportal_administration.click(); @@ -54,37 +59,48 @@ test.describe(`Testfälle für die Administration von Rollen: Umgebung: ${proces await test.step(`Erste Rolle anlegen`, async () => { await RolleCreationView.combobox_Schulstrukturknoten.click(); - await page.getByText(SCHULSTRUKTURKNOTEN1, { exact: true }).click(); + await page.getByText(SCHULSTRUKTURKNOTEN1, { exact: true }).click(); await RolleCreationView.combobox_Rollenart.click(); await page.getByText(ROLLENART1, { exact: true }).click(); - await RolleCreationView.input_Rollenname.fill(ROLLENNAME1); + await RolleCreationView.combobox_Angebote.click(); + await page.getByText(Angebot1, { exact: true }).click(); await RolleCreationView.button_RolleAnlegen.click(); await expect(RolleCreationView.text_success).toBeVisible(); }); await test.step(`Zweite Rolle anlegen`, async () => { await RolleCreationView.button_WeitereRolleAnlegen.click(); + await RolleCreationView.combobox_Schulstrukturknoten.click(); await page.getByText(SCHULSTRUKTURKNOTEN2, { exact: true }).click(); - await RolleCreationView.combobox_Rollenart.click(); await page.getByText(ROLLENART2, { exact: true }).click(); - await RolleCreationView.input_Rollenname.fill(ROLLENNAME2); + await RolleCreationView.combobox_Merkmal.click(); + await page.getByText(Merkmal2, { exact: true }).click(); + await RolleCreationView.combobox_Angebote.click(); + await page.getByText(AngebotA2, { exact: true }).click(); + await page.getByText(AngebotB2, { exact: true }).click(); + await RolleCreationView.button_RolleAnlegen.click(); await expect(RolleCreationView.text_success).toBeVisible(); }); 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(RolleManagementView.text_h2_Rollenverwaltung).toHaveText("Rollenverwaltung"); await expect(page.getByRole("cell", { name: ROLLENNAME1 })).toBeVisible(); await expect(page.getByRole("cell", { name: ROLLENNAME2 })).toBeVisible(); }); + + await test.step(`Rollen wieder löschen`, async () => { + const RollenID1 = await getRolleId(page, ROLLENNAME1); + const RollenID2 = await getRolleId(page, ROLLENNAME2); + await deleteRolle(page, RollenID1); + await deleteRolle(page, RollenID2); + }); }); test("Ergebnisliste Rollen auf Vollständigkeit prüfen", async ({ page }) => { @@ -103,4 +119,73 @@ test.describe(`Testfälle für die Administration von Rollen: Umgebung: ${proces await expect(RolleManagementView.table_header_Administrationsebene).toBeVisible(); }); }); -}); + + test("Eine Rolle anlegen und die Bestätigungsseite vollständig prüfen ", async ({ page }) => { + const RolleCreationView = new RolleCreationViewPage(page); + const ROLLENNAME = "TAuto-PW-R-" + faker.lorem.word({ length: { min: 8, max: 12 } }); + const DIENSTSTELLENNUMMER = '1111111'; + const SCHULSTRUKTURKNOTEN = DIENSTSTELLENNUMMER + " (Testschule Schulportal)"; + const ROLLENART = "Leit"; + const Merkmal = "KoPers-Nr. ist Pflichtangabe"; + const AngebotA = "E-Mail"; + const AngebotB = "Schulportal-Administration"; + const AngebotC = "Kalender"; + const SystemrechtA = 'Darf Benutzer verwalten'; + const SystemrechtB = 'Darf Schulen verwalten'; + const SystemrechtC = 'Darf Klassen verwalten'; + + await test.step(`Dialog Rolle anlegen öffnen`, async () => { + await page.goto(FRONTEND_URL + 'admin/rollen/new'); + }); + + await test.step(`Rolle anlegen`, async () => { + await RolleCreationView.combobox_Schulstrukturknoten.click(); + + await page.getByText(SCHULSTRUKTURKNOTEN, { exact: true }).click(); + await RolleCreationView.combobox_Rollenart.click(); + await page.getByText(ROLLENART, { exact: true }).click(); + await RolleCreationView.input_Rollenname.fill(ROLLENNAME); + await RolleCreationView.combobox_Merkmal.click(); + await page.getByText(Merkmal, { exact: true }).click(); + await RolleCreationView.combobox_Angebote.click(); + await page.getByText(AngebotA, { exact: true }).click(); + await page.getByText(AngebotB, { exact: true }).click(); + await page.getByText(AngebotC, { exact: true }).click(); + await RolleCreationView.combobox_Systemrechte.click(); + await page.getByText(SystemrechtA, { exact: true }).click(); + await page.getByText(SystemrechtB, { exact: true }).click(); + await page.getByText(SystemrechtC, { exact: true }).click(); + + await RolleCreationView.button_RolleAnlegen.click(); + }); + + await test.step(`Bestätigungsseite prüfen`, async () => { + await expect(RolleCreationView.text_h2_RolleAnlegen).toHaveText('Neue Rolle hinzufügen'); + await expect(RolleCreationView.button_Schliessen).toBeVisible(); + await expect(RolleCreationView.text_success).toBeVisible(); + await expect(RolleCreationView.icon_success).toBeVisible(); + await expect(RolleCreationView.text_DatenGespeichert).toHaveText('Folgende Daten wurden gespeichert:'); + await expect(RolleCreationView.label_Administrationsebene).toHaveText('Administrationsebene:'); + await expect(RolleCreationView.data_Administrationsebene).toHaveText(SCHULSTRUKTURKNOTEN); + await expect(RolleCreationView.label_Rollenart).toHaveText('Rollenart:'); + await expect(RolleCreationView.data_Rollenart).toHaveText(ROLLENART); + await expect(RolleCreationView.label_Rollenname).toHaveText('Rollenname:'); + await expect(RolleCreationView.data_Rollenname).toHaveText(ROLLENNAME); + await expect(RolleCreationView.label_Merkmale).toHaveText('Merkmale:'); + await expect(RolleCreationView.data_Merkmale).toHaveText(Merkmal); + await expect(RolleCreationView.label_Angebote).toHaveText('Zugeordnete Angebote:'); + await expect(RolleCreationView.data_Angebote).toContainText(AngebotA); + await expect(RolleCreationView.data_Angebote).toContainText(AngebotB); + await expect(RolleCreationView.data_Angebote).toContainText(AngebotC); + await expect(RolleCreationView.label_Systemrechte).toHaveText('Systemrechte:'); + await expect(RolleCreationView.data_Systemrechte).toContainText(SystemrechtA + ', ' + SystemrechtB + ', ' + SystemrechtC); + await expect(RolleCreationView.button_WeitereRolleAnlegen).toBeVisible(); + await expect(RolleCreationView.button_ZurueckErgebnisliste).toBeVisible(); + }); + + await test.step(`Rolle wieder löschen`, async () => { + const RollenID = await getRolleId(page, ROLLENNAME); + await deleteRolle(page, RollenID); + }); + }); +}); \ No newline at end of file diff --git a/tests/Schule.spec.ts b/tests/Schule.spec.ts index 15b1d5a..262675e 100644 --- a/tests/Schule.spec.ts +++ b/tests/Schule.spec.ts @@ -7,7 +7,11 @@ import { SchuleCreationViewPage } from "../pages/admin/SchuleCreationView.page"; import { SchuleManagementViewPage } from "../pages/admin/SchuleManagementView.page"; import { faker } from "@faker-js/faker/locale/de"; import { HeaderPage } from "../pages/Header.page"; -import { FooterDataTablePage } from "../pages/FooterDataTable.page "; +import { createPersonWithUserContext, deletePersonen } from "../base/api/testHelperPerson.page"; +import { getSPId } from "../base/api/testHelperServiceprovider.page"; +import { UserInfo } from "../base/api/testHelper.page"; +import { addSystemrechtToRolle, deleteRolle } from "../base/api/testHelperRolle.page"; +import { FooterDataTablePage } from "../pages/FooterDataTable.page"; const PW = process.env.PW; const ADMIN = process.env.USER; @@ -41,8 +45,10 @@ test.describe(`Testfälle für die Administration von Schulen: Umgebung: ${proce const SchuleManagementView = new SchuleManagementViewPage(page); const FooterDataTable = new FooterDataTablePage(page); - 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 }}); + // Schulen können noch nicht gelöscht werden. Um doppelte Namen zu vermeiden, wird am dem Schulnamen eine Zufallszahl angehängt + const ZUFALLSNUMMER = faker.number.bigInt({ min: 1000, max: 9000 }) + const SCHULNAME1 = "TAuto-PW-S1-" + faker.lorem.word({ length: { min: 8, max: 12 }}) + ZUFALLSNUMMER; + const SCHULNAME2 = "TAuto-PW-S2-" + faker.lorem.word({ length: { min: 8, max: 12 }}) + ZUFALLSNUMMER; const DIENSTSTELLENNUMMER1 = "0" + faker.number.bigInt({ min: 10000000, max: 100000000 }); const DIENSTSTELLENNUMMER2 = "0" + faker.number.bigInt({ min: 10000000, max: 100000000 }); @@ -76,7 +82,7 @@ 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 FooterDataTable.combobox_AnzahlEintraege.click(); - await page.getByText('300').click(); + await page.getByText('300', { exact: true }).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(); @@ -94,8 +100,70 @@ test.describe(`Testfälle für die Administration von Schulen: Umgebung: ${proce 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.table_header_Dienststellennummer).toBeVisible(); await expect(SchuleManagementView.table_header_Schulname).toBeVisible(); }); }); + + test("Eine Schule anlegen als Schuladmin und die Bestätigungsseite vollständig prüfen ", async ({ page }) => { + const SchuleCreationView = new SchuleCreationViewPage(page); + // Schulen können noch nicht gelöscht werden. Um doppelte Namen zu vermeiden, wird am dem Schulnamen eine Zufallszahl angehängt + const ZUFALLSNUMMER = faker.number.bigInt({ min: 1000, max: 9000 }); + const SCHULNAME = "TAuto-PW-S1-" + faker.lorem.word({ length: { min: 8, max: 12 }}) + ZUFALLSNUMMER; + const DIENSTSTELLENNUMMER = "0" + faker.number.bigInt({ min: 10000000, max: 100000000 }); + const Landing = new LandingPage(page); + const Startseite = new StartPage(page); + const Login = new LoginPage(page); + const Header = new HeaderPage(page); + let userInfo: UserInfo; + + await test.step(`Testdaten: Schuladmin anlegen und mit diesem anmelden`, async () => { + const idSP = await getSPId(page, 'Schulportal-Administration'); + userInfo = await createPersonWithUserContext(page, 'Testschule Schulportal', 'LEIT', 'TAuto-PW-B-MeierLEIT', 'TAuto-PW-B-Hans', idSP, 'TAuto-PW-R-RolleLEIT'); + await addSystemrechtToRolle(page, userInfo.rolleId, 'SCHULEN_VERWALTEN'); + + await Header.button_logout.click(); + await Landing.button_Anmelden.click(); + await Login.login(userInfo.username, userInfo.password); + userInfo.password = await Login.UpdatePW(); + await expect(Startseite.text_h2_Ueberschrift).toBeVisible(); + }); + + await test.step(`Dialog Schule anlegen öffnen also Schuladmin`, async () => { + await page.goto(FRONTEND_URL + 'admin/schulen/new'); + }); + + await test.step(`Schule anlegen`, async () => { + await SchuleCreationView.radio_button_Public_Schule.click(); + await SchuleCreationView.input_Dienststellennummer.fill(DIENSTSTELLENNUMMER); + await SchuleCreationView.input_Schulname.fill(SCHULNAME); + await SchuleCreationView.button_SchuleAnlegen.click(); + }); + + await test.step(`Bestätigungsseite prüfen`, async () => { + await expect(SchuleCreationView.text_success).toBeVisible(); + await expect(SchuleCreationView.text_h2_SchuleAnlegen).toHaveText('Neue Schule hinzufügen'); + await expect(SchuleCreationView.button_Schliessen).toBeVisible(); + await expect(SchuleCreationView.text_success).toBeVisible(); + await expect(SchuleCreationView.icon_success).toBeVisible(); + await expect(SchuleCreationView.text_DatenGespeichert).toHaveText('Folgende Daten wurden gespeichert:'); + await expect(SchuleCreationView.label_Schulform).toHaveText('Schulform:'); + await expect(SchuleCreationView.data_Schulform).toHaveText('Öffentliche Schule'); + await expect(SchuleCreationView.label_Dienststellennummer).toHaveText('Dienststellennummer:'); + await expect(SchuleCreationView.data_Dienststellennummer).toHaveText(DIENSTSTELLENNUMMER); + await expect(SchuleCreationView.label_Schulname).toHaveText('Schulname:'); + await expect(SchuleCreationView.data_Schulname).toHaveText(SCHULNAME); + await expect(SchuleCreationView.button_WeitereSchuleAnlegen).toBeVisible(); + await expect(SchuleCreationView.button_ZurueckErgebnisliste).toBeVisible(); + }); + + await test.step(`Testdaten 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 deletePersonen(page, userInfo.personId); + await deleteRolle(page, userInfo.rolleId); + }); + }); });