All checks were successful
PR Checks / lint-test-and-docker-build (pull_request) Successful in 2m17s
59 lines
2.2 KiB
TypeScript
59 lines
2.2 KiB
TypeScript
import { test, expect, type Page } from '@playwright/test';
|
|
import { TEST_USERS } from './setup/test-users.js';
|
|
|
|
const LOGIN_URL = '/trips/login';
|
|
const ADMIN_USERS_URL = '/trips/admin/users';
|
|
const DASHBOARD_URL = '/trips/dashboard';
|
|
|
|
async function loginAsLocalUser(page: Page, username: string, password: string): Promise<void> {
|
|
await page.goto(LOGIN_URL);
|
|
await page.fill('input[name="identifier"]', username);
|
|
await page.fill('input[name="password"]', password);
|
|
await page.click('button[type="submit"]:has-text("Sign in locally")');
|
|
await page.waitForURL(`**${DASHBOARD_URL}`, { timeout: 15_000 });
|
|
}
|
|
|
|
async function clearSessionState(page: Page): Promise<void> {
|
|
await page.context().clearCookies();
|
|
await page.goto('about:blank');
|
|
await page.evaluate(() => {
|
|
localStorage.clear();
|
|
sessionStorage.clear();
|
|
});
|
|
}
|
|
|
|
test.beforeEach(async ({ context }) => {
|
|
await context.clearCookies();
|
|
});
|
|
|
|
test('admin can create a local user who can sign in', async ({ page }) => {
|
|
const suffix = Date.now();
|
|
const username = `e2e_new_user_${suffix}`;
|
|
const fullName = `E2E New User ${suffix}`;
|
|
const email = `e2e_new_user_${suffix}@test.local`;
|
|
const password = `TempPass-${suffix}-123`;
|
|
|
|
await loginAsLocalUser(page, TEST_USERS.admin.username, TEST_USERS.admin.password);
|
|
await page.goto(ADMIN_USERS_URL);
|
|
await expect(page.getByRole('heading', { name: 'Users' })).toBeVisible();
|
|
await page.getByRole('button', { name: 'Add User' }).click();
|
|
|
|
const addDialog = page.getByRole('dialog', { name: 'Add user' });
|
|
await expect(addDialog).toBeVisible();
|
|
await addDialog.locator('input[type="text"]').nth(0).fill(username);
|
|
await addDialog.locator('input[type="text"]').nth(1).fill(fullName);
|
|
await addDialog.locator('input[type="email"]').fill(email);
|
|
await addDialog.locator('input[type="password"]').nth(0).fill(password);
|
|
await addDialog.locator('input[type="password"]').nth(1).fill(password);
|
|
await addDialog.getByRole('button', { name: 'Create user' }).click();
|
|
|
|
await expect(page.getByRole('cell', { name: username })).toBeVisible();
|
|
|
|
await clearSessionState(page);
|
|
await loginAsLocalUser(page, username, password);
|
|
await expect(page).toHaveURL(/\/trips\/dashboard/);
|
|
|
|
await page.goto(ADMIN_USERS_URL);
|
|
await expect(page).toHaveURL(/\/trips\/dashboard/);
|
|
});
|