diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 3848fbc..48583fa 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,15 +1,57 @@ -/* eslint-env node */ module.exports = { extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:@typescript-eslint/stylistic', - 'plugin:playwright/recommended' + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:@typescript-eslint/stylistic', + 'plugin:playwright/recommended' ], parser: '@typescript-eslint/parser', plugins: ['@typescript-eslint'], root: true, parserOptions: { - sourceType: 'module' + ecmaVersion: 'latest', + parser: '@typescript-eslint/parser' + }, + rules: { + // 'prettier/prettier': ['warn'], + // 'import/no-extraneous-dependencies': ['error', { devDependencies: false }], + // 'import/no-cycle': ['error'], + // ...typescriptConfigs.recommended.rules, + // ...playwright.configs['flat/recommended'].rules + 'no-void': ['error', { allowAsStatement: true }], + 'no-console': ['warn'], + 'max-classes-per-file': ['error', 1], + 'class-methods-use-this': 'off', + 'no-param-reassign': 'warn', + 'no-underscore-dangle': 'error', + '@typescript-eslint/no-inferrable-types': ['off'], + '@typescript-eslint/typedef': [ + 'warn', + { + arrayDestructuring: true, + arrowParameter: true, + memberVariableDeclaration: true, + objectDestructuring: true, + parameter: true, + propertyDeclaration: true, + variableDeclaration: true, + variableDeclarationIgnoreFunction: true + } + ], + // '@typescript-eslint/unbound-method': 'error', + // '@typescript-eslint/explicit-member-accessibility': 'error', + '@typescript-eslint/explicit-function-return-type': 'error', + '@typescript-eslint/no-explicit-any': 'error', + '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '_.+' }], + // "@typescript-eslint/no-unnecessary-condition": "error", + '@typescript-eslint/no-empty-interface': [ + 'error', + { + allowSingleExtends: true + } + ], + + // currently disabled rules - TODO: fix them + 'playwright/no-conditional-in-test': 'off' } } \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..1312685 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "printWidth": 120, + "singleAttributePerLine": true, + "singleQuote": true + } \ No newline at end of file diff --git a/base/api/testHelperOrganisation.page.ts b/base/api/testHelperOrganisation.page.ts index 5112fcb..090f088 100644 --- a/base/api/testHelperOrganisation.page.ts +++ b/base/api/testHelperOrganisation.page.ts @@ -1,7 +1,7 @@ import { Page, expect } from '@playwright/test'; import { faker } from "@faker-js/faker/locale/de"; -const FRONTEND_URL = process.env.FRONTEND_URL || ""; +const FRONTEND_URL: string | undefined = process.env.FRONTEND_URL || ""; export async function createOrganisation(page: Page, name: string): Promise { const response = await page.request.post(FRONTEND_URL + 'api/organisationen/', { diff --git a/base/api/testHelperPerson.page.ts b/base/api/testHelperPerson.page.ts index 025398d..f770381 100644 --- a/base/api/testHelperPerson.page.ts +++ b/base/api/testHelperPerson.page.ts @@ -7,7 +7,7 @@ import { LoginPage } from '../../pages/LoginView.page'; import { faker } from '@faker-js/faker'; import { lehrkraftOeffentlichRolle } from '../roles'; -const FRONTEND_URL = process.env.FRONTEND_URL || ""; +const FRONTEND_URL: string | undefined = process.env.FRONTEND_URL || ""; export async function createPerson(page: Page, familienname: string, vorname: string, organisationId: string, rolleId: string, koPersNr?: string): Promise { const requestData = { @@ -94,7 +94,7 @@ export async function getPersonId(page: Page, Benutzername: string): Promise { const response = await page.request.post(FRONTEND_URL + 'api/rolle/', { diff --git a/base/api/testHelperServiceprovider.page.ts b/base/api/testHelperServiceprovider.page.ts index f3db176..ce43e1e 100644 --- a/base/api/testHelperServiceprovider.page.ts +++ b/base/api/testHelperServiceprovider.page.ts @@ -1,6 +1,6 @@ import { Page, expect } from '@playwright/test'; -const FRONTEND_URL = process.env.FRONTEND_URL || ""; +const FRONTEND_URL: string | undefined = process.env.FRONTEND_URL || ""; export async function getSPId(page: Page, nameSP: string): Promise { const response = await page.request.get(FRONTEND_URL + `api/provider/all`, {}); diff --git a/package.json b/package.json index 03b07f2..c240b3d 100644 --- a/package.json +++ b/package.json @@ -1,4 +1,18 @@ { + "name": "schulportal-testautomatisierung", + "description": "", + "version": "0.6.0", + "main": "index.js", + "type": "module", + "directories": { + "test": "tests" + }, + "keywords": [], + "author": "Dataport AöR", + "license": "EUPL-1.2", + "scripts": { + "lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore" + }, "devDependencies": { "@playwright/test": "^1.47.2", "@types/node": "^20.16.10", @@ -9,9 +23,6 @@ "eslint-plugin-playwright": "^0.18.0", "typescript": "^5.6.2" }, - "scripts": { - "lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore" - }, "dependencies": { "@faker-js/faker": "^8.4.1", "@fast-csv/format": "^4.3.5", diff --git a/pages/MenuBar.page.ts b/pages/MenuBar.page.ts index 1146d07..de40ff1 100644 --- a/pages/MenuBar.page.ts +++ b/pages/MenuBar.page.ts @@ -3,6 +3,7 @@ import { RolleCreationViewPage } from "./admin/RolleCreationView.page"; import {RolleManagementViewPage} from "./admin/RolleManagementView.page"; import { SchuleManagementViewPage } from "./admin/SchuleManagementView.page"; import { SchuleCreationViewPage } from "./admin/SchuleCreationView.page"; +import { HeaderPage } from "./Header.page"; export class MenuPage { readonly page: Page; @@ -24,9 +25,7 @@ export class MenuPage { constructor(page) { this.page = page; - this.header_label_Navigation = page.locator( - '[data-testid="menu-bar-title"] .v-list-item-title', - ); + this.header_label_Navigation = page.locator('[data-testid="menu-bar-title"] .v-list-item-title'); this.button_BackStartpage = page.getByTestId("back-to-start-link"); this.label_Benutzerverwaltung = page.locator( '[data-testid="person-management-title"] .v-list-item-title', diff --git a/pages/admin/KlasseManagementView.page.ts b/pages/admin/KlasseManagementView.page.ts index c82ce2f..3e5f76c 100644 --- a/pages/admin/KlasseManagementView.page.ts +++ b/pages/admin/KlasseManagementView.page.ts @@ -12,7 +12,7 @@ export class KlasseManagementViewPage{ readonly button_KlasseLoeschen: Locator; readonly button_SchliesseKlasseLoeschenDialog: Locator; - constructor(page){ + constructor(page: Page){ this.page = page; this.text_h1_Administrationsbereich = page.getByTestId('admin-headline'); this.text_h2_Klassenverwaltung = page.getByTestId('layout-card-headline'); diff --git a/pages/admin/RolleCreationConfirm.page.ts b/pages/admin/RolleCreationConfirm.page.ts index ce8478e..626c657 100644 --- a/pages/admin/RolleCreationConfirm.page.ts +++ b/pages/admin/RolleCreationConfirm.page.ts @@ -1,4 +1,4 @@ -import { Locator, Page } from "@playwright/test"; +import { type Locator, Page } from "@playwright/test"; import { RolleManagementViewPage } from "./RolleManagementView.page"; export class RolleCreationConfirmPage { diff --git a/pages/admin/RolleManagementView.page.ts b/pages/admin/RolleManagementView.page.ts index fa59891..0095806 100644 --- a/pages/admin/RolleManagementView.page.ts +++ b/pages/admin/RolleManagementView.page.ts @@ -10,7 +10,7 @@ export class RolleManagementViewPage { readonly table_header_Administrationsebene: Locator; private readonly rolleOverviewTable: Locator; - constructor(page) { + constructor(page: Page) { this.page = page; this.text_h1_Administrationsbereich = page.getByTestId("admin-headline"); this.text_h2_Rollenverwaltung = page.getByTestId("layout-card-headline"); diff --git a/playwright.config.ts b/playwright.config.ts index 67f568b..c6f403f 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,6 +1,10 @@ import { defineConfig, devices } from "@playwright/test"; import dotenv from "dotenv"; import * as path from "node:path"; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); const FRONTEND_URL = process.env.FRONTEND_URL || ""; diff --git a/tests/Klasse.spec.ts b/tests/Klasse.spec.ts index 33c8e3b..77caa16 100644 --- a/tests/Klasse.spec.ts +++ b/tests/Klasse.spec.ts @@ -10,18 +10,18 @@ import { HeaderPage } from "../pages/Header.page"; import { LONG, SHORT, STAGE, BROWSER } from "../base/tags"; import { deleteClassByName } from "../base/testHelperDeleteTestdata.ts"; -const PW = process.env.PW; -const ADMIN = process.env.USER; -const FRONTEND_URL = process.env.FRONTEND_URL || ""; +const PW: string | undefined = process.env.PW; +const ADMIN: string | undefined = process.env.USER; +const FRONTEND_URL: string | undefined = 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 afterEach Block werden alle Testdaten gelöscht test.beforeEach(async ({ page }) => { await test.step(`Login`, async () => { - const landing = new LandingPage(page); - const startseite = new StartPage(page); - const login = new LoginPage(page); + const landing: LandingPage = new LandingPage(page); + const startseite: StartPage = new StartPage(page); + const login: LoginPage = new LoginPage(page); await page.goto(FRONTEND_URL); await landing.button_Anmelden.click(); @@ -45,7 +45,7 @@ test.describe(`Testfälle für die Administration von Klassen: Umgebung: ${proce }); test("Eine Klasse als Landesadmin anlegen und die Klasse anschließend in der Ergebnisliste suchen und dann löschen", {tag: [LONG, SHORT, STAGE]}, async ({ page }) => { - const startseite = new StartPage(page); + const startseite: StartPage = new StartPage(page); const menue = new MenuPage(page); const klasseCreationView = new KlasseCreationViewPage(page); const klasseManagementView = new KlasseManagementViewPage(page); @@ -84,7 +84,7 @@ test.describe(`Testfälle für die Administration von Klassen: Umgebung: ${proce }); test("Ergebnisliste Klassen als Landesadmin auf Vollständigkeit prüfen", {tag: [LONG, SHORT, STAGE]}, async ({ page }) => { - const startseite = new StartPage(page); + const startseite: StartPage = new StartPage(page); const menue = new MenuPage(page); const klasseManagementView = new KlasseManagementViewPage(page); diff --git a/tests/MenuBar.spec.ts b/tests/MenuBar.spec.ts index 71c8f9a..a31d2c6 100644 --- a/tests/MenuBar.spec.ts +++ b/tests/MenuBar.spec.ts @@ -6,16 +6,16 @@ import { MenuPage } from '../pages/MenuBar.page'; import { HeaderPage } from "../pages/Header.page"; import { LONG, SHORT, STAGE, BROWSER } from '../base/tags'; -const PW = process.env.PW; -const ADMIN = process.env.USER; -const FRONTEND_URL = process.env.FRONTEND_URL || ''; +const PW: string | undefined = process.env.PW; +const ADMIN: string | undefined = process.env.USER; +const FRONTEND_URL: string | undefined = process.env.FRONTEND_URL || ""; test.describe(`Testfälle für die Hauptmenue-Leiste: Umgebung: ${process.env.UMGEBUNG}: URL: ${process.env.FRONTEND_URL}:`, () => { test.beforeEach(async ({ page }) => { await test.step(`Login`, async () => { - const landing = new LandingPage(page); - const startseite = new StartPage(page); - const login = new LoginPage(page); + const landing: LandingPage = new LandingPage(page); + const startseite: StartPage = new StartPage(page); + const login: LoginPage = new LoginPage(page); await page.goto(FRONTEND_URL); await landing.button_Anmelden.click(); diff --git a/tests/Person.spec.ts b/tests/Person.spec.ts index 5a369c3..715a796 100644 --- a/tests/Person.spec.ts +++ b/tests/Person.spec.ts @@ -16,9 +16,9 @@ import { LONG, SHORT, STAGE, BROWSER } from "../base/tags"; 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 || ""; +const PW: string | undefined = process.env.PW; +const ADMIN: string | undefined = process.env.USER; +const FRONTEND_URL: string | undefined = process.env.FRONTEND_URL || ""; let username: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht let roleId: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht @@ -39,9 +39,9 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro test.afterEach(async ({ page }) => { const header = new HeaderPage(page); - const landing = new LandingPage(page); - const login = new LoginPage(page); - const startseite = new StartPage(page); + const landing: LandingPage = new LandingPage(page); + const login: LoginPage = new LoginPage(page); + const startseite: StartPage = new StartPage(page); await test.step(`Testdaten(Benutzer) löschen via API`, async () => { if (username) { // nur wenn der Testfall auch mind. einen Benutzer angelegt hat @@ -84,9 +84,9 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro test("Einen Benutzer mit der Rolle Lehrkraft anlegen als Landesadmin und anschließend mit diesem Benutzer anmelden", {tag: [LONG, SHORT, STAGE]}, async ({ page, }) => { - const landing = new LandingPage(page); - const startseite = new StartPage(page); - const login = new LoginPage(page); + const landing: LandingPage = new LandingPage(page); + const startseite: StartPage = new StartPage(page); + const login: LoginPage = new LoginPage(page); const menue = new MenuPage(page); const personCreationView = new PersonCreationViewPage(page); const personManagementView = new PersonManagementViewPage(page); @@ -140,7 +140,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro }); test("Einen Benutzer mit der Rolle Landesadmin anlegen", {tag: [LONG, SHORT, STAGE]}, async ({ page }) => { - const startseite = new StartPage(page); + const startseite: StartPage = new StartPage(page); const menue = new MenuPage(page); const personCreationView = new PersonCreationViewPage(page); @@ -175,7 +175,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro }); test("Einen Benutzer mit der Rolle LiV anlegen als Landesadmin", {tag: [LONG, SHORT, STAGE]}, async ({ page }) => { - const startseite = new StartPage(page); + const startseite: StartPage = new StartPage(page); const menue = new MenuPage(page); const personCreationView = new PersonCreationViewPage(page); @@ -268,7 +268,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro ); test("Einen Benutzer mit der Rolle Schueler anlegen als Landesadmin", {tag: [LONG, SHORT, STAGE]}, async ({ page }) => { - const startseite = new StartPage(page); + const startseite: StartPage = new StartPage(page); const menue = new MenuPage(page); const personCreationView = new PersonCreationViewPage(page); @@ -328,7 +328,7 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro }); test("Prüfung auf korrekte Rollen in dem Dropdown 'Rolle' nach Auswahl der Organisation bei Anlage eines Benutzer in der Rolle Landesadmin", {tag: [LONG, STAGE]}, async ({page}) => { - const startseite = new StartPage(page); + const startseite: StartPage = new StartPage(page); const menue = new MenuPage(page); const personCreationView = new PersonCreationViewPage(page); @@ -509,9 +509,9 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro }); test("Mehrere Benutzer hintereinander anlegen in der Rolle Landesadmin für die Rollenarten LERN und LEHR und die Bestätigungsseiten vollständig prüfen", {tag: [LONG, SHORT, STAGE]}, async ({ page }) => { - const landing = new LandingPage(page); - const startseite = new StartPage(page); - const login = new LoginPage(page); + const landing: LandingPage = new LandingPage(page); + const startseite: StartPage = new StartPage(page); + const login: LoginPage = new LoginPage(page); const header = new HeaderPage(page); const personCreationView = new PersonCreationViewPage(page); let userInfo: UserInfo; diff --git a/tests/PersonBearbeiten.spec.ts b/tests/PersonBearbeiten.spec.ts index eec1a29..c1b139c 100644 --- a/tests/PersonBearbeiten.spec.ts +++ b/tests/PersonBearbeiten.spec.ts @@ -27,9 +27,9 @@ let rolleId: string[] = []; // Im afterEach Block werden alle Testdaten gelösch test.describe(`Testfälle für die Administration von Personen": Umgebung: ${process.env.UMGEBUNG}: URL: ${process.env.FRONTEND_URL}:`, () => { test.beforeEach(async ({page}) => { await test.step(`Login`, async () => { - const landing = new LandingPage(page); - const startseite = new StartPage(page); - const login = new LoginPage(page); + const landing: LandingPage = new LandingPage(page); + const startseite: StartPage = new StartPage(page); + const login: LoginPage = new LoginPage(page); await page.goto('/'); await landing.button_Anmelden.click(); await login.login(ADMIN, PW); @@ -75,9 +75,9 @@ test.describe(`Testfälle für die Administration von Personen": Umgebung: ${pro const personManagementView = new PersonManagementViewPage(page); const PersonDetailsView = new PersonDetailsViewPage(page); const header = new HeaderPage(page); - const landing = new LandingPage(page); - const login = new LoginPage(page); - const startseite = new StartPage(page); + const landing: LandingPage = new LandingPage(page); + const login: LoginPage = new LoginPage(page); + const startseite: StartPage = new StartPage(page); const addminVorname = "TAuto-PW-V-" + faker.person.firstName(); const adminNachname = "TAuto-PW-N-" + faker.person.lastName(); diff --git a/tests/Profile.spec.ts b/tests/Profile.spec.ts index b45def3..e61f822 100644 --- a/tests/Profile.spec.ts +++ b/tests/Profile.spec.ts @@ -13,9 +13,9 @@ import { addSystemrechtToRolle } from "../base/api/testHelperRolle.page"; import { LONG, SHORT, STAGE, BROWSER } from "../base/tags"; import { deleteRolleById, deletePersonByUsername} from "../base/testHelperDeleteTestdata"; -const PW = process.env.PW; -const ADMIN = process.env.USER; -const FRONTEND_URL = process.env.FRONTEND_URL || ""; +const PW: string | undefined = process.env.PW; +const ADMIN: string | undefined = process.env.USER; +const FRONTEND_URL: string | undefined = process.env.FRONTEND_URL || ""; let username: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht let roleId: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht @@ -23,9 +23,9 @@ 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 }) => { await test.step(`Login`, async () => { - const landing = new LandingPage(page); - const startseite = new StartPage(page); - const login = new LoginPage(page); + const landing: LandingPage = new LandingPage(page); + const startseite: StartPage = new StartPage(page); + const login: LoginPage = new LoginPage(page); await page.goto(FRONTEND_URL); await landing.button_Anmelden.click(); @@ -36,15 +36,15 @@ test.describe(`Testfälle für das eigene Profil anzeigen: Umgebung: ${process.e test.afterEach(async ({ page }) => { const header = new HeaderPage(page); - const landing = new LandingPage(page); - const login = new LoginPage(page); + const landing: LandingPage = new LandingPage(page); + const login: LoginPage = new LoginPage(page); await test.step(`Testdaten löschen via API`, async () => { 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); - const startseite = new StartPage(page); + const startseite: StartPage = new StartPage(page); await expect(startseite.text_h2_Ueberschrift).toBeVisible(); await expect(startseite.card_item_schulportal_administration).toBeVisible(); @@ -67,7 +67,7 @@ test.describe(`Testfälle für das eigene Profil anzeigen: Umgebung: ${process.e test("Das eigene Profil öffnen und auf Vollständigkeit prüfen als Landesadmin", {tag: [LONG, STAGE, BROWSER]}, async ({ page }) => { const profileView = new ProfilePage(page); const header = new HeaderPage(page); - const login = new LoginPage(page); + const login: LoginPage = new LoginPage(page); const vorname = "TAuto-PW-V-" + faker.person.firstName(); const nachname = "TAuto-PW-N-" + faker.person.lastName(); @@ -134,7 +134,7 @@ test.describe(`Testfälle für das eigene Profil anzeigen: Umgebung: ${process.e test("Das eigene Profil öffnen und auf Vollständigkeit prüfen als Lehrer mit einer Schulzuordnung", {tag: [LONG, SHORT, STAGE]}, async ({ page }) => { const profileView = new ProfilePage(page); const header = new HeaderPage(page); - const login = new LoginPage(page); + const login: LoginPage = new LoginPage(page); const vorname = "TAuto-PW-V-" + faker.person.firstName(); const nachname = "TAuto-PW-N-" + faker.person.lastName(); @@ -192,7 +192,7 @@ test.describe(`Testfälle für das eigene Profil anzeigen: Umgebung: ${process.e test("Das eigene Profil öffnen und auf Vollständigkeit prüfen als Schüler mit einer Schulzuordnung", {tag: [LONG, STAGE]}, async ({ page }) => { const profileView = new ProfilePage(page); const header = new HeaderPage(page); - const login = new LoginPage(page); + const login: LoginPage = new LoginPage(page); const vorname = "TAuto-PW-V-" + faker.person.firstName(); const nachname = "TAuto-PW-N-" + faker.person.lastName(); @@ -249,7 +249,7 @@ test.describe(`Testfälle für das eigene Profil anzeigen: Umgebung: ${process.e test("Das eigene Profil öffnen und auf Vollständigkeit prüfen als Schuladmin mit einer Schulzuordnung", {tag: [LONG, STAGE]}, async ({ page }) => { const profileView = new ProfilePage(page); const header = new HeaderPage(page); - const login = new LoginPage(page); + const login: LoginPage = new LoginPage(page); const vorname = "TAuto-PW-V-" + faker.person.firstName(); const nachname = "TAuto-PW-N-" + faker.person.lastName(); @@ -307,7 +307,7 @@ test.describe(`Testfälle für das eigene Profil anzeigen: Umgebung: ${process.e test("Das eigene Profil öffnen und auf Vollständigkeit prüfen als Lehrkraft mit 2 Schulzuordnungen", {tag: [LONG, STAGE]}, async ({ page }) => { const profileView = new ProfilePage(page); const header = new HeaderPage(page); - const login = new LoginPage(page); + const login: LoginPage = new LoginPage(page); let personId = ''; const vorname = "TAuto-PW-V-" + faker.person.firstName(); diff --git a/tests/Schule.spec.ts b/tests/Schule.spec.ts index 7a617b5..699b936 100644 --- a/tests/Schule.spec.ts +++ b/tests/Schule.spec.ts @@ -15,9 +15,9 @@ import { FooterDataTablePage } from "../pages/FooterDataTable.page"; import { LONG, SHORT, STAGE, BROWSER } from "../base/tags"; import { deletePersonById, deleteRolleById } from "../base/testHelperDeleteTestdata"; -const PW = process.env.PW; -const ADMIN = process.env.USER; -const FRONTEND_URL = process.env.FRONTEND_URL || ""; +const PW: string | undefined = process.env.PW; +const ADMIN: string | undefined = process.env.USER; +const FRONTEND_URL: string | undefined = process.env.FRONTEND_URL || ""; let personId: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht let roleId: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht @@ -25,9 +25,9 @@ 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 }) => { await test.step(`Login`, async () => { - const landing = new LandingPage(page); - const startseite = new StartPage(page); - const login = new LoginPage(page); + const landing: LandingPage = new LandingPage(page); + const startseite: StartPage = new StartPage(page); + const login: LoginPage = new LoginPage(page); await page.goto(FRONTEND_URL); await landing.button_Anmelden.click(); @@ -38,12 +38,12 @@ test.describe(`Testfälle für die Administration von Schulen: Umgebung: ${proce test.afterEach(async ({ page }) => { const header = new HeaderPage(page); - const landing = new LandingPage(page); - const login = new LoginPage(page); + const landing: LandingPage = new LandingPage(page); + const login: LoginPage = new LoginPage(page); await test.step(`Testdaten löschen via API`, async () => { if (personId) { // nur wenn der Testfall auch mind. einen Benutzer angelegt hat - const startseite = new StartPage(page); + const startseite: StartPage = new StartPage(page); await header.logout(); await landing.button_Anmelden.click(); await login.login(ADMIN, PW); @@ -54,7 +54,7 @@ test.describe(`Testfälle für die Administration von Schulen: Umgebung: ${proce } if (roleId) { // nur wenn der Testfall auch mind. eine Rolle angelegt hat - const startseite = new StartPage(page); + const startseite: StartPage = new StartPage(page); await header.logout(); await landing.button_Anmelden.click(); await login.login(ADMIN, PW); @@ -72,7 +72,7 @@ test.describe(`Testfälle für die Administration von Schulen: Umgebung: ${proce }); test("2 Schulen nacheinander anlegen als Landesadmin", {tag: [LONG]}, async ({ page }) => { - const startseite = new StartPage(page); + const startseite: StartPage = new StartPage(page); const schuleManagementView = new SchuleManagementViewPage(page); const footerDataTable = new FooterDataTablePage(page); @@ -143,7 +143,7 @@ test.describe(`Testfälle für die Administration von Schulen: Umgebung: ${proce const zufallsNr = faker.number.bigInt({ min: 1000, max: 9000 }); const schulname = "TAuto-PW-S1-" + faker.lorem.word({ length: { min: 8, max: 12 }}) + zufallsNr; const dienststellenNr = "0" + faker.number.bigInt({ min: 10000000, max: 100000000 }); - const landing = new LandingPage(page); + const landing: LandingPage = new LandingPage(page); const header = new HeaderPage(page); let userInfo: UserInfo; diff --git a/tests/SchulportalAdministration.spec.ts b/tests/SchulportalAdministration.spec.ts index 373d33d..75b0d79 100644 --- a/tests/SchulportalAdministration.spec.ts +++ b/tests/SchulportalAdministration.spec.ts @@ -10,9 +10,9 @@ import { UserInfo } from "../base/api/testHelper.page"; import { LONG, SHORT, STAGE } from "../base/tags"; import { deletePersonById, deleteRolleById } from "../base/testHelperDeleteTestdata"; -const PW = process.env.PW; -const ADMIN = process.env.USER; -const FRONTEND_URL = process.env.FRONTEND_URL || ""; +const PW: string | undefined = process.env.PW; +const ADMIN: string | undefined = process.env.USER; +const FRONTEND_URL: string | undefined = process.env.FRONTEND_URL || ""; let personId: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht let rolleId: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht @@ -20,8 +20,8 @@ let rolleId: string[] = []; // Im afterEach Block werden alle Testdaten gelösch test.describe(`Testfälle für Schulportal Administration": 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 landing: LandingPage = new LandingPage(page); + const login: LoginPage = new LoginPage(page); await test.step(`Testdaten löschen via API`, async () => { if (personId) { // nur wenn der Testfall auch mind. einen Benutzer angelegt hat @@ -50,8 +50,8 @@ test.describe(`Testfälle für Schulportal Administration": Umgebung: ${process. }); test("Prüfen, dass die Schulportal-Administration Kachel nicht sichtbar ist für Lehrkräfte", {tag: [LONG, STAGE]}, async ({page}) => { - const landing = new LandingPage(page); - const login = new LoginPage(page); + const landing: LandingPage = new LandingPage(page); + const login: LoginPage = new LoginPage(page); const header = new HeaderPage(page); // Testdaten erstellen @@ -69,7 +69,7 @@ test.describe(`Testfälle für Schulportal Administration": Umgebung: ${process. await landing.button_Anmelden.click(); await login.login(userInfo.username, userInfo.password); await login.UpdatePW(); - const startseite = new StartPage(page); + const startseite: StartPage = new StartPage(page); await test.step(`Prüfen, dass die Kachel E-Mail angezeigt wird und die Kachel Schulportal-Administration nicht angezeigt wird`, async () => { await expect(startseite.card_item_schulportal_administration).toBeHidden(); await expect(startseite.card_item_email).toBeVisible(); @@ -77,8 +77,8 @@ test.describe(`Testfälle für Schulportal Administration": Umgebung: ${process. }); test("Prüfen, dass die Schulportal-Administration Kachel nicht sichtbar ist für Schüler", {tag: [LONG, SHORT, STAGE]}, async ({page}) => { - const landing = new LandingPage(page); - const login = new LoginPage(page); + const landing: LandingPage = new LandingPage(page); + const login: LoginPage = new LoginPage(page); const header = new HeaderPage(page); // Testdaten erstellen @@ -96,7 +96,7 @@ test.describe(`Testfälle für Schulportal Administration": Umgebung: ${process. await landing.button_Anmelden.click(); await login.login(userInfo.username, userInfo.password); await login.UpdatePW(); - const startseite = new StartPage(page); + const startseite: StartPage = new StartPage(page); await test.step(`Prüfen, dass die Kachel E-Mail angezeigt wird und die Kachel Schulportal-Administration nicht angezeigt wird`, async () => { await expect(startseite.card_item_schulportal_administration).toBeHidden(); await expect(startseite.card_item_itslearning).toBeVisible(); @@ -104,8 +104,8 @@ test.describe(`Testfälle für Schulportal Administration": Umgebung: ${process. }); test("Prüfen, dass die Schulportal-Administration Kachel sichtbar ist für Schuladmins", {tag: [LONG, STAGE]}, async ({page}) => { - const landing = new LandingPage(page); - const login = new LoginPage(page); + const landing: LandingPage = new LandingPage(page); + const login: LoginPage = new LoginPage(page); const header = new HeaderPage(page); // Testdaten erstellen @@ -125,7 +125,7 @@ test.describe(`Testfälle für Schulportal Administration": Umgebung: ${process. await landing.button_Anmelden.click(); await login.login(userInfo.username, userInfo.password); await login.UpdatePW(); - const startseite = new StartPage(page); + const startseite: StartPage = new StartPage(page); await test.step(`Prüfen, dass die Kachel E-Mail nicht angezeigt wird und die Kachel Schulportal-Administration angezeigt wird`, async () => { await expect(startseite.card_item_schulportal_administration).toBeVisible(); await expect(startseite.card_item_email).toBeHidden(); diff --git a/tests/login.spec.ts b/tests/login.spec.ts index 5f59c6d..ca7220d 100644 --- a/tests/login.spec.ts +++ b/tests/login.spec.ts @@ -11,9 +11,9 @@ 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 ADMIN = process.env.USER; -const FRONTEND_URL = process.env.FRONTEND_URL || ''; +const PW: string | undefined = process.env.PW; +const ADMIN: string | undefined = process.env.USER; +const FRONTEND_URL: string | undefined = process.env.FRONTEND_URL || ""; let loggedIn = false; let username: string[] = []; // Im afterEach Block werden alle Testdaten gelöscht @@ -22,16 +22,16 @@ let rolleId: string[] = []; // Im afterEach Block werden alle Testdaten gelösch 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); + const landing: LandingPage = new LandingPage(page); + const login: LoginPage = new LoginPage(page); + const startseite: StartPage = 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); + const landing: LandingPage = new LandingPage(page); + const startseite: StartPage = new StartPage(page); + const login: LoginPage = new LoginPage(page); await page.goto(FRONTEND_URL); await landing.button_Anmelden.click(); @@ -87,8 +87,8 @@ test.describe(`Testfälle für die Authentifizierung: Umgebung: ${process.env.UM }) 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); + const login: LoginPage = new LoginPage(page); + const landing: LandingPage = new LandingPage(page); await test.step(`Anmelden mit Benutzer ${ADMIN}`, async () => { await page.goto(FRONTEND_URL); @@ -102,8 +102,8 @@ test.describe(`Testfälle für die Authentifizierung: Umgebung: ${process.env.UM }) 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 login: LoginPage = new LoginPage(page); + const landing: LandingPage = new LandingPage(page); const header = new HeaderPage(page); const lehrerVorname = "TAuto-PW-V-" + faker.person.firstName(); diff --git a/tests/logoff.spec.ts b/tests/logoff.spec.ts index 945883a..9fb7b67 100644 --- a/tests/logoff.spec.ts +++ b/tests/logoff.spec.ts @@ -5,15 +5,15 @@ import { LoginPage } from '../pages/LoginView.page'; import { HeaderPage } from '../pages/Header.page'; import { LONG, SHORT, STAGE } from '../base/tags'; -const PW = process.env.PW; +const PW: string | undefined = process.env.PW; const USER = process.env.USER; -const FRONTEND_URL = process.env.FRONTEND_URL || ''; +const FRONTEND_URL: string | undefined = process.env.FRONTEND_URL || ""; test.describe(`Testfälle für die Authentifizierung: Umgebung: ${process.env.UMGEBUNG}: URL: ${process.env.FRONTEND_URL}:`, () => { test('Erfolgreicher Standard Logoff als Landesadmin', {tag: [LONG, SHORT, STAGE]}, async ({ page }) => { - const landing = new LandingPage(page); - const startseite = new StartPage(page); - const login = new LoginPage(page); + const landing: LandingPage = new LandingPage(page); + const startseite: StartPage = new StartPage(page); + const login: LoginPage = new LoginPage(page); const header = new HeaderPage(page); await test.step(`Annmelden mit Benutzer ${USER}`, async () => { diff --git a/tests/workflow.spec.ts b/tests/workflow.spec.ts index 9cbd9ee..d013bb4 100644 --- a/tests/workflow.spec.ts +++ b/tests/workflow.spec.ts @@ -12,17 +12,17 @@ import { CalendarPage } from "../pages/Cards/Calendar.page"; import { DirectoryPage } from "../pages/Cards/Directory.page"; import { createTeacherAndLogin } from "../base/api/testHelperPerson.page"; -const PW = process.env.PW; -const ADMIN = process.env.USER; -const FRONTEND_URL = process.env.FRONTEND_URL || ""; -const ENV = process.env.ENV; +const PW: string | undefined = process.env.PW; +const ADMIN: string | undefined = process.env.USER; +const FRONTEND_URL: string | undefined = process.env.FRONTEND_URL || ""; +const ENV: string | undefined = process.env.ENV; test.describe(`Testfälle für den Test von workflows: Umgebung: ${process.env.ENV}: URL: ${process.env.FRONTEND_URL}:`, () => { test.beforeEach(async ({ page }) => { await test.step(`Login`, async () => { - const landing = new LandingPage(page); - const startseite = new StartPage(page); - const login = new LoginPage(page); + const landing: LandingPage = new LandingPage(page); + const startseite: StartPage = new StartPage(page); + const login: LoginPage = new LoginPage(page); await page.goto(FRONTEND_URL); await landing.button_Anmelden.click(); @@ -32,10 +32,10 @@ test.describe(`Testfälle für den Test von workflows: Umgebung: ${process.env.E }); test("Angebote per Link öffnen als Lehrer", {tag: [LONG, SHORT, STAGE]}, async ({ page }) => { - const startseite = new StartPage(page); + const startseite: StartPage = new StartPage(page); - await test.step(`Lehrer via api anlegen und mit diesem anmelden`, async () => { - createTeacherAndLogin(page); + await test.step(`Lehrer via api anlegen und mit diesem anmelden`, async () => { + await createTeacherAndLogin(page); }); await test.step(`Kacheln Email für Lehrkräfte und Itslearning öffnen, danach beide Kacheln wieder schließen`, async () => {