Skip to content

Commit

Permalink
SPSH-1251 Testfall fertig (#82)
Browse files Browse the repository at this point in the history
* Testfall fertig

* minor changes

* Update tests/login.spec.ts

Co-authored-by: Julian Aggarwal <[email protected]>

* Update tests/login.spec.ts

Co-authored-by: Julian Aggarwal <[email protected]>

* Fix aus dem review

* Fix aus dem review

---------

Co-authored-by: Julian Aggarwal <[email protected]>
  • Loading branch information
jakobmadp and jaggarnaut authored Nov 6, 2024
1 parent 77abc87 commit b42459c
Show file tree
Hide file tree
Showing 10 changed files with 140 additions and 31 deletions.
11 changes: 11 additions & 0 deletions base/api/testHelperPerson.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,3 +106,14 @@ export async function createTeacherAndLogin(page) {
await login.login(userInfo.username, userInfo.password);
await login.UpdatePW();
}


export async function lockPerson(page: Page, personId: string, organisationId: string): Promise<void> {
const response = await page.request.put(FRONTEND_URL + `api/personen/${personId}/lock-user`, {
data: {
"lock": true,
"locked_by": organisationId
}
});
expect(response.status()).toBe(202);
}
4 changes: 2 additions & 2 deletions base/testHelperDeleteTestdata.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ export async function deletePersonById(personId, page){ // personId ist ein arr
}
}

export async function deleteRoleById(roleId, page){ // roleId ist ein array mit allen zu löschenden Rollen
export async function deleteRolleById(roleId, page){ // roleId ist ein array mit allen zu löschenden Rollen
for (const item in roleId){
await deleteRolle(page, roleId[item]);
}
}

export async function deleteRoleByName(roleName, page){ // roleName ist ein array mit allen zu löschenden Rollen
export async function deleteRolleByName(roleName, page){ // roleName ist ein array mit allen zu löschenden Rollen
for (const item in roleName){
const roleId = await getRolleId(page, roleName[item]);
await deleteRolle(page, roleId);
Expand Down
2 changes: 2 additions & 0 deletions pages/LoginView.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export class LoginPage {
readonly text_h1: Locator;
readonly text_h1_updatePW: Locator;
readonly text_span_inputerror: Locator;
readonly text_span_alertBox: Locator;

constructor(page) {
this.page = page;
Expand All @@ -27,6 +28,7 @@ export class LoginPage {
this.text_span_inputerror = page.getByText(
"Ungültiger Benutzername oder Passwort",
);
this.text_span_alertBox = page.locator('.pf-c-alert__title');
}

async login(
Expand Down
2 changes: 1 addition & 1 deletion tests/Klasse.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const ADMIN = process.env.USER;
const FRONTEND_URL = process.env.FRONTEND_URL || "";

test.describe(`Testfälle für die Administration von Klassen: Umgebung: ${process.env.UMGEBUNG}: URL: ${process.env.FRONTEND_URL}:`, () => {
let className: string[] = []; // Im afterEchh Block werden alle Testdaten gelöscht
let className: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht

test.beforeEach(async ({ page }) => {
await test.step(`Login`, async () => {
Expand Down
12 changes: 6 additions & 6 deletions tests/Person.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,16 @@ import { getSPId } from "../base/api/testHelperServiceprovider.page";
import { UserInfo } from "../base/api/testHelper.page";
import { addSystemrechtToRolle } from "../base/api/testHelperRolle.page";
import { LONG, SHORT, STAGE } from "../base/tags";
import { deletePersonByUsername, deleteRoleById, deleteRoleByName } from "../base/testHelperDeleteTestdata.ts";
import { deletePersonByUsername, deleteRolleById, deleteRolleByName } from "../base/testHelperDeleteTestdata.ts";
import { landesadminRolle, schuelerRolle, schuladminOeffentlichRolle } from "../base/roles.ts";

const PW = process.env.PW;
const ADMIN = process.env.USER;
const FRONTEND_URL = process.env.FRONTEND_URL || "";

let username: string[] = []; // Im afterEchh Block werden alle Testdaten gelöscht
let roleId: string[] = []; // Im afterEchh Block werden alle Testdaten gelöscht
let roleName: string[] = []; // Im afterEchh Block werden alle Testdaten gelöscht
let username: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht
let roleId: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht
let roleName: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht

test.describe(`Testfälle für die Administration von Personen": Umgebung: ${process.env.UMGEBUNG}: URL: ${process.env.FRONTEND_URL}:`, () => {
test.beforeEach(async ({ page }) => {
Expand Down Expand Up @@ -60,7 +60,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro
await login.login(ADMIN, PW);
await expect(startseite.text_h2_Ueberschrift).toBeVisible();

await deleteRoleById(roleId, page);
await deleteRolleById(roleId, page);
roleId = [];
}

Expand All @@ -70,7 +70,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro
await login.login(ADMIN, PW);
await expect(startseite.text_h2_Ueberschrift).toBeVisible();

await deleteRoleByName(roleName, page);
await deleteRolleByName(roleName, page);
roleName = [];
}
});
Expand Down
8 changes: 4 additions & 4 deletions tests/Profile.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ import { getOrganisationId } from "../base/api/testHelperOrganisation.page";
import { UserInfo } from "../base/api/testHelper.page";
import { addSystemrechtToRolle } from "../base/api/testHelperRolle.page";
import { LONG, SHORT, STAGE } from "../base/tags";
import { deleteRoleById, deletePersonByUsername} from "../base/testHelperDeleteTestdata";
import { deleteRolleById, deletePersonByUsername} from "../base/testHelperDeleteTestdata";

const PW = process.env.PW;
const ADMIN = process.env.USER;
const FRONTEND_URL = process.env.FRONTEND_URL || "";

let username: string[] = []; // Im afterEchh Block werden alle Testdaten gelöscht
let roleId: string[] = []; // Im afterEchh Block werden alle Testdaten gelöscht
let username: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht
let roleId: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht

test.describe(`Testfälle für das eigene Profil anzeigen: Umgebung: ${process.env.UMGEBUNG}: URL: ${process.env.FRONTEND_URL}:`, () => {
test.beforeEach(async ({ page }) => {
Expand Down Expand Up @@ -53,7 +53,7 @@ test.describe(`Testfälle für das eigene Profil anzeigen: Umgebung: ${process.e
}

if (roleId) {
deleteRoleById(roleId, page);
deleteRolleById(roleId, page);
roleId = [];
}
});
Expand Down
6 changes: 3 additions & 3 deletions tests/Rolle.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ import { getRolleId, deleteRolle } from "../base/api/testHelperRolle.page";
import { RolleCreationConfirmPage } from "../pages/admin/RolleCreationConfirm.page";
import FromAnywhere from "../pages/FromAnywhere";
import { LONG, SHORT, STAGE } from "../base/tags";
import { deleteRoleByName } from "../base/testHelperDeleteTestdata";
import { deleteRolleByName } from "../base/testHelperDeleteTestdata";

let startseite: StartPage;
let loggedIn = false;
let rolleName: string[] = []; // Im afterEchh Block werden alle Testdaten gelöscht
let rolleName: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht

test.beforeEach(async ({ page }) => {
startseite = await test.step(`Login`, async () => {
Expand All @@ -28,7 +28,7 @@ test.beforeEach(async ({ page }) => {
test.afterEach(async ({ page }) => {
await test.step(`Testdaten löschen via API`, async () => {
if (rolleName) { // nur wenn der Testfall auch mind. eine Rolle angelegt hat
await deleteRoleByName(rolleName, page);
await deleteRolleByName(rolleName, page);
rolleName = [];
}
});
Expand Down
8 changes: 4 additions & 4 deletions tests/Schule.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ import { UserInfo } from "../base/api/testHelper.page";
import { addSystemrechtToRolle } from "../base/api/testHelperRolle.page";
import { FooterDataTablePage } from "../pages/FooterDataTable.page";
import { LONG, SHORT, STAGE } from "../base/tags";
import { deletePersonById, deleteRoleById } from "../base/testHelperDeleteTestdata";
import { deletePersonById, deleteRolleById } from "../base/testHelperDeleteTestdata";

const PW = process.env.PW;
const ADMIN = process.env.USER;
const FRONTEND_URL = process.env.FRONTEND_URL || "";

let personId: string[] = []; // Im afterEchh Block werden alle Testdaten gelöscht
let roleId: string[] = []; // Im afterEchh Block werden alle Testdaten gelöscht
let personId: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht
let roleId: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht

test.describe(`Testfälle für die Administration von Schulen: Umgebung: ${process.env.UMGEBUNG}: URL: ${process.env.FRONTEND_URL}:`, () => {
test.beforeEach(async ({ page }) => {
Expand Down Expand Up @@ -60,7 +60,7 @@ test.describe(`Testfälle für die Administration von Schulen: Umgebung: ${proce
await login.login(ADMIN, PW);
await expect(startseite.text_h2_Ueberschrift).toBeVisible();

await deleteRoleById(roleId, page);
await deleteRolleById(roleId, page);
roleId = [];
}
});
Expand Down
8 changes: 4 additions & 4 deletions tests/SchulportalAdministration.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ import { createRolleAndPersonWithUserContext } from "../base/api/testHelperPerso
import { addSystemrechtToRolle } from "../base/api/testHelperRolle.page";
import { UserInfo } from "../base/api/testHelper.page";
import { LONG, SHORT, STAGE } from "../base/tags";
import { deletePersonById, deleteRoleById } from "../base/testHelperDeleteTestdata";
import { deletePersonById, deleteRolleById } from "../base/testHelperDeleteTestdata";

const PW = process.env.PW;
const ADMIN = process.env.USER;
const FRONTEND_URL = process.env.FRONTEND_URL || "";

let personId: string[] = []; // Im afterEchh Block werden alle Testdaten gelöscht
let rolleId: string[] = []; // Im afterEchh Block werden alle Testdaten gelöscht
let personId: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht
let rolleId: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht

test.describe(`Testfälle für Schulportal Administration": Umgebung: ${process.env.UMGEBUNG}: URL: ${process.env.FRONTEND_URL}:`, () => {
test.afterEach(async ({ page }) => {
Expand All @@ -38,7 +38,7 @@ test.describe(`Testfälle für Schulportal Administration": Umgebung: ${process.
await landing.button_Anmelden.click();
await login.login(ADMIN, PW);

await deleteRoleById(rolleId, page);
await deleteRolleById(rolleId, page);
rolleId = [];
}
});
Expand Down
110 changes: 103 additions & 7 deletions tests/login.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,39 +4,135 @@ import { LandingPage } from '../pages/LandingView.page';
import { StartPage } from '../pages/StartView.page';
import { HeaderPage } from "../pages/Header.page";
import { LONG, SHORT, SMOKE, STAGE } from '../base/tags';
import { createRolleAndPersonWithUserContext, lockPerson } from "../base/api/testHelperPerson.page.ts";
import { getSPId } from "../base/api/testHelperServiceprovider.page.ts";
import { faker } from "@faker-js/faker/locale/de";
import { UserInfo } from "../base/api/testHelper.page.ts";
import { deletePersonByUsername, deleteRolleById } from "../base/testHelperDeleteTestdata.ts";
import { getOrganisationId } from "../base/api/testHelperOrganisation.page.ts";

const PW = process.env.PW;
const USER = process.env.USER;
const ADMIN = process.env.USER;
const FRONTEND_URL = process.env.FRONTEND_URL || '';

let loggedIn = false;
let username: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht
let rolleId: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht

test.describe(`Testfälle für die Authentifizierung: Umgebung: ${process.env.UMGEBUNG}: URL: ${process.env.FRONTEND_URL}:`, () => {
test.afterEach(async ({ page }) => {
const header = new HeaderPage(page);
const landing = new LandingPage(page);
const login = new LoginPage(page);
const startseite = new StartPage(page);

await test.step(`Testdaten(Benutzer) löschen via API`, async () => {
if (!loggedIn) {
await test.step(`Abmelden`, async () => {
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);
await expect(startseite.text_h2_Ueberschrift).toBeVisible();
loggedIn = true
});
}

if (username) { // nur wenn der Testfall auch mind. einen Benutzer angelegt hat
await header.logout();
await landing.button_Anmelden.click();
await login.login(ADMIN, PW);
await expect(startseite.text_h2_Ueberschrift).toBeVisible();

await deletePersonByUsername(username, page);
username = [];
}

if (rolleId) { // nur wenn der Testfall auch mind. eine Rolle angelegt hat
await header.logout();
await landing.button_Anmelden.click();
await login.login(ADMIN, PW);
await expect(startseite.text_h2_Ueberschrift).toBeVisible();
await deleteRolleById(rolleId, page);
rolleId = [];
}
});

if (loggedIn) {
await test.step(`Abmelden`, async () => {
const header = new HeaderPage(page);
await header.logout();
loggedIn = false;
});
}
});

test('Erfolgreicher Standard Login Landesadmin', {tag: [LONG, SMOKE, STAGE]}, async ({ page }) => {
const login = new LoginPage(page);
const landing = new LandingPage(page);
const start = new StartPage(page);
const header = new HeaderPage(page);

await test.step(`Anmelden mit Benutzer ${USER}`, async () => {
await test.step(`Anmelden mit Benutzer ${ADMIN}`, async () => {
await page.goto(FRONTEND_URL);
await expect(landing.text_Willkommen).toBeVisible();
await landing.button_Anmelden.click();
await login.login(USER, PW);

await login.login(ADMIN, PW);
await expect(start.text_h2_Ueberschrift).toBeVisible();
await header.button_logout.click();
loggedIn = true;
})
})

test('Erfolgloser Login mit falschem Passwort und gültigem Benutzernamen in der Rolle Landesadmin', {tag: [LONG, SHORT, STAGE]}, async ({ page }) => {
const login = new LoginPage(page);
const landing = new LandingPage(page);

await test.step(`Anmelden mit Benutzer ${USER}`, async () => {
await test.step(`Anmelden mit Benutzer ${ADMIN}`, async () => {
await page.goto(FRONTEND_URL);
await expect(landing.text_Willkommen).toBeVisible();
await landing.button_Anmelden.click();
await login.login(USER, 'Mickeymouse');
await login.login(ADMIN, 'Mickeymouse');
await expect(login.text_span_inputerror).toBeVisible();
await expect(login.text_h1).toBeVisible();
loggedIn = false;
})
})

test('Erfolgloser Login mit einem gesperrten Benutzer Rolle Lehrer', {tag: [LONG, STAGE]}, async ({ page }) => {
const login = new LoginPage(page);
const landing = new LandingPage(page);
const header = new HeaderPage(page);

const lehrerVorname = "TAuto-PW-V-" + faker.person.firstName();
const lehrerNachname = "TAuto-PW-N-" + faker.person.lastName();
const lehrerRolle = "TAuto-PW-LEHR-" + faker.lorem.word({ length: { min: 8, max: 12 }});
const lehrerRollenart = 'LEHR';
const lehrerOrganisation = 'Testschule Schulportal';
let userInfoLehrer: UserInfo;
let lehrerIdSP = '';
let organisationIDLandSh = '';

await test.step(`Testdaten: Gesperrten Lehrer über die api anlegen ${ADMIN}`, async () => {
await page.goto(FRONTEND_URL);
await landing.button_Anmelden.click();
await login.login(ADMIN, PW);
lehrerIdSP = await getSPId(page, 'E-Mail');
organisationIDLandSh = await getOrganisationId(page, 'Land Schleswig-Holstein');
userInfoLehrer = await createRolleAndPersonWithUserContext(page, lehrerOrganisation, lehrerRollenart, lehrerVorname, lehrerNachname, lehrerIdSP, lehrerRolle);
username.push(userInfoLehrer.username);
rolleId.push(userInfoLehrer.rolleId);
await lockPerson(page, userInfoLehrer.personId, organisationIDLandSh);
await header.logout();
})

await test.step(`Gesperrter Lehrer versucht sich am Portal anzumelden`, async () => {
await landing.button_Anmelden.click();
await login.login(userInfoLehrer.username, userInfoLehrer.password);
await expect(login.text_span_alertBox).toHaveText('Ihr Benutzerkonto ist gesperrt. Bitte wenden Sie sich an Ihre schulischen Administratorinnen und Administratoren.');
loggedIn = false;
})
})
})

0 comments on commit b42459c

Please sign in to comment.