From 0b92d6e0badaa8ad490256b770064fdcf5990cdf Mon Sep 17 00:00:00 2001 From: Gusted Date: Sat, 19 Oct 2024 22:40:08 +0200 Subject: [PATCH] feat: Create temporary user helper function - Add a helper function that creates and log into a temporary user. So it doesn't affect other users and tests and the test can more easily be retried with a 'fresh' state instead of a broken state. - Adjust the Webauthn test to make use of this. - Relevant: #5291, #5394 --- tests/e2e/utils_e2e.js | 21 +++++++++++++++++++++ tests/e2e/webauthn.test.e2e.js | 12 ++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/tests/e2e/utils_e2e.js b/tests/e2e/utils_e2e.js index 98d762fbcc..6afbe43b86 100644 --- a/tests/e2e/utils_e2e.js +++ b/tests/e2e/utils_e2e.js @@ -80,3 +80,24 @@ export async function save_visual(page) { }); } } + +// Create a temporary user and login to that user and store session info. +// This should ideally run on a per test basis. +export async function create_temp_user(browser, workerInfo, request) { + const username = globalThis.crypto.randomUUID(); + const newUser = await request.post(`/api/v1/admin/users`, { + headers: { + 'Content-Type': 'application/json', + 'Authorization': `Basic ${btoa(`user1:${LOGIN_PASSWORD}`)}`, + }, + data: { + username, + email: `${username}@host.invalid`, + password: LOGIN_PASSWORD, + must_change_password: false, + }, + }); + expect(newUser.ok()).toBeTruthy(); + + return {context: await login_user(browser, workerInfo, username), username}; +} diff --git a/tests/e2e/webauthn.test.e2e.js b/tests/e2e/webauthn.test.e2e.js index f98cd47126..1f645ffea2 100644 --- a/tests/e2e/webauthn.test.e2e.js +++ b/tests/e2e/webauthn.test.e2e.js @@ -9,15 +9,11 @@ // @watch end import {expect} from '@playwright/test'; -import {test, login_user, load_logged_in_context} from './utils_e2e.js'; +import {test, create_temp_user} from './utils_e2e.js'; -test.beforeAll(async ({browser}, workerInfo) => { - await login_user(browser, workerInfo, 'user40'); -}); - -test('WebAuthn register & login flow', async ({browser}, workerInfo) => { +test('WebAuthn register & login flow', async ({browser, request}, workerInfo) => { test.skip(workerInfo.project.name !== 'chromium', 'Uses Chrome protocol'); - const context = await load_logged_in_context(browser, workerInfo, 'user40'); + const {context, username} = await create_temp_user(browser, workerInfo, request); const page = await context.newPage(); // Register a security key. @@ -51,7 +47,7 @@ test('WebAuthn register & login flow', async ({browser}, workerInfo) => { response = await page.goto('/user/login'); await expect(response?.status()).toBe(200); - await page.getByLabel('Username or email address').fill('user40'); + await page.getByLabel('Username or email address').fill(username); await page.getByLabel('Password').fill('password'); await page.getByRole('button', {name: 'Sign in'}).click(); await page.waitForURL(`${workerInfo.project.use.baseURL}/user/webauthn`);