This commit is contained in:
16
e2e/website/helpers.ts
Normal file
16
e2e/website/helpers.ts
Normal 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
21
e2e/website/login.spec.ts
Normal 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();
|
||||
});
|
||||
});
|
||||
64
e2e/website/routes.spec.ts
Normal file
64
e2e/website/routes.spec.ts
Normal 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();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user