just testing the environment
Some checks failed
Tests / test (push) Has been cancelled

This commit is contained in:
tom.hempel
2026-05-20 07:10:08 +02:00
parent 2a11dfd0d1
commit 06fc134299
56 changed files with 1890 additions and 361 deletions

16
e2e/website/helpers.ts Normal file
View File

@ -0,0 +1,16 @@
import { Page, expect } from '@playwright/test';
export const TEST_PASSWORD = 'testpass123';
export async function loginAs(page: Page, username: string, password = TEST_PASSWORD) {
await page.goto('/website/#/login');
await page.locator('#username').fill(username);
await page.locator('#password').fill(password);
await page.locator('#loginForm button[type="submit"]').click();
await expect(page.locator('h1')).toContainText('Questionnaires', { timeout: 15000 });
}
export async function logout(page: Page) {
await page.locator('#logoutBtn').click();
await expect(page.locator('#loginForm')).toBeVisible();
}

21
e2e/website/login.spec.ts Normal file
View File

@ -0,0 +1,21 @@
import { test, expect } from '@playwright/test';
test.describe('Website login', () => {
test('shows login form', async ({ page }) => {
await page.goto('/website/#/login');
await expect(page.locator('#loginForm')).toBeVisible();
});
test('bad password shows error', async ({ page }) => {
await page.goto('/website/#/login');
await page.locator('#username').fill('testadmin');
await page.locator('#password').fill('wrong-password');
await page.locator('#loginForm button[type="submit"]').click();
await expect(page.locator('#loginError')).toBeVisible();
});
test('protected route redirects to login', async ({ page }) => {
await page.goto('/website/#/users');
await expect(page.locator('#loginForm')).toBeVisible();
});
});

View File

@ -0,0 +1,64 @@
import { test, expect } from '@playwright/test';
import { loginAs, logout } from './helpers';
test.describe('Website routes (admin)', () => {
test.beforeEach(async ({ page }) => {
await loginAs(page, 'testadmin');
});
test('dashboard lists questionnaires', async ({ page }) => {
await expect(page.locator('h1')).toHaveText('Questionnaires');
await expect(page.locator('.q-card, .empty-state')).toBeVisible();
});
test('export page', async ({ page }) => {
await page.goto('/website/#/export');
await expect(page.locator('h1')).toContainText('Export');
});
test('users page for admin', async ({ page }) => {
await page.goto('/website/#/users');
await expect(page.locator('h1')).toContainText('Users');
});
test('clients page', async ({ page }) => {
await page.goto('/website/#/clients');
await expect(page.locator('h1')).toContainText('Clients');
});
test('assignments page', async ({ page }) => {
await page.goto('/website/#/assignments');
await expect(page.locator('h1')).toContainText('Assign');
});
test('editor for seeded questionnaire', async ({ page }) => {
await page.goto('/website/#/questionnaire/questionnaire_test_demo');
await expect(page.locator('#editorTitle')).not.toHaveText('Loading...');
await expect(page.locator('#editorContent')).toContainText('Questions');
});
test('results page', async ({ page }) => {
await page.goto('/website/#/questionnaire/questionnaire_test_demo/results');
await expect(page.locator('h1')).toContainText('Results');
});
test('logout clears session', async ({ page }) => {
await logout(page);
await page.goto('/website/#/');
await expect(page.locator('#loginForm')).toBeVisible();
});
});
test.describe('Website role nav', () => {
test('coach cannot see admin nav items', async ({ page }) => {
await loginAs(page, 'testcoach1');
const usersNav = page.locator('[data-nav-roles] a[href="#/users"]');
await expect(usersNav).toBeHidden();
});
test('supervisor sees users nav', async ({ page }) => {
await loginAs(page, 'testsuper1');
const usersNav = page.locator('[data-nav-roles] a[href="#/users"]');
await expect(usersNav).toBeVisible();
});
});