1
0
mirror of https://github.com/pocket-id/pocket-id.git synced 2026-02-14 19:57:31 +00:00

refactor: add formatter to Playwright tests

This commit is contained in:
Elias Schneider
2025-06-27 23:33:26 +02:00
parent d070b9a778
commit 73e7e0b1c5
22 changed files with 1581 additions and 1764 deletions

View File

@@ -1,253 +1,217 @@
import test, { expect } from "@playwright/test";
import { userGroups, users } from "../data";
import { cleanupBackend } from "../utils/cleanup.util";
import test, { expect } from '@playwright/test';
import { userGroups, users } from '../data';
import { cleanupBackend } from '../utils/cleanup.util';
test.beforeEach(cleanupBackend);
test("Create user", async ({ page }) => {
const user = users.steve;
test('Create user', async ({ page }) => {
const user = users.steve;
await page.goto("/settings/admin/users");
await page.goto('/settings/admin/users');
await page.getByRole("button", { name: "Add User" }).click();
await page.getByLabel("First name").fill(user.firstname);
await page.getByLabel("Last name").fill(user.lastname);
await page.getByLabel("Email").fill(user.email);
await page.getByLabel("Username").fill(user.username);
await page.getByRole("button", { name: "Save" }).click();
await page.getByRole('button', { name: 'Add User' }).click();
await page.getByLabel('First name').fill(user.firstname);
await page.getByLabel('Last name').fill(user.lastname);
await page.getByLabel('Email').fill(user.email);
await page.getByLabel('Username').fill(user.username);
await page.getByRole('button', { name: 'Save' }).click();
await expect(
page.getByRole("row", { name: `${user.firstname} ${user.lastname}` })
).toBeVisible();
await expect(page.locator('[data-type="success"]')).toHaveText(
"User created successfully"
);
await expect(page.getByRole('row', { name: `${user.firstname} ${user.lastname}` })).toBeVisible();
await expect(page.locator('[data-type="success"]')).toHaveText('User created successfully');
});
test("Create user fails with already taken email", async ({ page }) => {
const user = users.steve;
test('Create user fails with already taken email', async ({ page }) => {
const user = users.steve;
await page.goto("/settings/admin/users");
await page.goto('/settings/admin/users');
await page.getByRole("button", { name: "Add User" }).click();
await page.getByLabel("First name").fill(user.firstname);
await page.getByLabel("Last name").fill(user.lastname);
await page.getByLabel("Email").fill(users.tim.email);
await page.getByLabel("Username").fill(user.username);
await page.getByRole("button", { name: "Save" }).click();
await page.getByRole('button', { name: 'Add User' }).click();
await page.getByLabel('First name').fill(user.firstname);
await page.getByLabel('Last name').fill(user.lastname);
await page.getByLabel('Email').fill(users.tim.email);
await page.getByLabel('Username').fill(user.username);
await page.getByRole('button', { name: 'Save' }).click();
await expect(page.locator('[data-type="error"]')).toHaveText(
"Email is already in use"
);
await expect(page.locator('[data-type="error"]')).toHaveText('Email is already in use');
});
test("Create user fails with already taken username", async ({ page }) => {
const user = users.steve;
test('Create user fails with already taken username', async ({ page }) => {
const user = users.steve;
await page.goto("/settings/admin/users");
await page.goto('/settings/admin/users');
await page.getByRole("button", { name: "Add User" }).click();
await page.getByLabel("First name").fill(user.firstname);
await page.getByLabel("Last name").fill(user.lastname);
await page.getByLabel("Email").fill(user.email);
await page.getByLabel("Username").fill(users.tim.username);
await page.getByRole("button", { name: "Save" }).click();
await page.getByRole('button', { name: 'Add User' }).click();
await page.getByLabel('First name').fill(user.firstname);
await page.getByLabel('Last name').fill(user.lastname);
await page.getByLabel('Email').fill(user.email);
await page.getByLabel('Username').fill(users.tim.username);
await page.getByRole('button', { name: 'Save' }).click();
await expect(page.locator('[data-type="error"]')).toHaveText(
"Username is already in use"
);
await expect(page.locator('[data-type="error"]')).toHaveText('Username is already in use');
});
test("Create one time access token", async ({ page, context }) => {
await page.goto("/settings/admin/users");
test('Create one time access token', async ({ page, context }) => {
await page.goto('/settings/admin/users');
await page
.getByRole("row", {
name: `${users.craig.firstname} ${users.craig.lastname}`,
})
.getByRole("button")
.click();
await page
.getByRole('row', {
name: `${users.craig.firstname} ${users.craig.lastname}`
})
.getByRole('button')
.click();
await page.getByRole("menuitem", { name: "Login Code" }).click();
await page.getByRole('menuitem', { name: 'Login Code' }).click();
await page.getByLabel("Expiration").click();
await page.getByRole("option", { name: "12 hours" }).click();
await page.getByRole("button", { name: "Show Code" }).click();
await page.getByLabel('Expiration').click();
await page.getByRole('option', { name: '12 hours' }).click();
await page.getByRole('button', { name: 'Show Code' }).click();
const link = await page.getByTestId("login-code-link").textContent();
await context.clearCookies();
const link = await page.getByTestId('login-code-link').textContent();
await context.clearCookies();
await page.goto(link!);
await page.waitForURL("/settings/account");
await page.goto(link!);
await page.waitForURL('/settings/account');
});
test("Delete user", async ({ page }) => {
await page.goto("/settings/admin/users");
test('Delete user', async ({ page }) => {
await page.goto('/settings/admin/users');
await page
.getByRole("row", {
name: `${users.craig.firstname} ${users.craig.lastname}`,
})
.getByRole("button")
.click();
await page.getByRole("menuitem", { name: "Delete" }).click();
await page.getByRole("button", { name: "Delete" }).click();
await page
.getByRole('row', {
name: `${users.craig.firstname} ${users.craig.lastname}`
})
.getByRole('button')
.click();
await page.getByRole('menuitem', { name: 'Delete' }).click();
await page.getByRole('button', { name: 'Delete' }).click();
await expect(page.locator('[data-type="success"]')).toHaveText(
"User deleted successfully"
);
await expect(
page.getByRole("row", {
name: `${users.craig.firstname} ${users.craig.lastname}`,
})
).not.toBeVisible();
await expect(page.locator('[data-type="success"]')).toHaveText('User deleted successfully');
await expect(
page.getByRole('row', {
name: `${users.craig.firstname} ${users.craig.lastname}`
})
).not.toBeVisible();
});
test("Update user", async ({ page }) => {
const user = users.craig;
test('Update user', async ({ page }) => {
const user = users.craig;
await page.goto("/settings/admin/users");
await page.goto('/settings/admin/users');
await page
.getByRole("row", { name: `${user.firstname} ${user.lastname}` })
.getByRole("button")
.click();
await page.getByRole("menuitem", { name: "Edit" }).click();
await page
.getByRole('row', { name: `${user.firstname} ${user.lastname}` })
.getByRole('button')
.click();
await page.getByRole('menuitem', { name: 'Edit' }).click();
await page.getByLabel("First name").fill("Crack");
await page.getByLabel("Last name").fill("Apple");
await page.getByLabel("Email").fill("crack.apple@test.com");
await page.getByLabel("Username").fill("crack");
await page.getByRole("button", { name: "Save" }).first().click();
await page.getByLabel('First name').fill('Crack');
await page.getByLabel('Last name').fill('Apple');
await page.getByLabel('Email').fill('crack.apple@test.com');
await page.getByLabel('Username').fill('crack');
await page.getByRole('button', { name: 'Save' }).first().click();
await expect(page.locator('[data-type="success"]')).toHaveText(
"User updated successfully"
);
await expect(page.locator('[data-type="success"]')).toHaveText('User updated successfully');
});
test("Update user fails with already taken email", async ({ page }) => {
const user = users.craig;
test('Update user fails with already taken email', async ({ page }) => {
const user = users.craig;
await page.goto("/settings/admin/users");
await page.goto('/settings/admin/users');
await page
.getByRole("row", { name: `${user.firstname} ${user.lastname}` })
.getByRole("button")
.click();
await page.getByRole("menuitem", { name: "Edit" }).click();
await page
.getByRole('row', { name: `${user.firstname} ${user.lastname}` })
.getByRole('button')
.click();
await page.getByRole('menuitem', { name: 'Edit' }).click();
await page.getByLabel("Email").fill(users.tim.email);
await page.getByRole("button", { name: "Save" }).first().click();
await page.getByLabel('Email').fill(users.tim.email);
await page.getByRole('button', { name: 'Save' }).first().click();
await expect(page.locator('[data-type="error"]')).toHaveText(
"Email is already in use"
);
await expect(page.locator('[data-type="error"]')).toHaveText('Email is already in use');
});
test("Update user fails with already taken username", async ({ page }) => {
const user = users.craig;
test('Update user fails with already taken username', async ({ page }) => {
const user = users.craig;
await page.goto("/settings/admin/users");
await page.goto('/settings/admin/users');
await page
.getByRole("row", { name: `${user.firstname} ${user.lastname}` })
.getByRole("button")
.click();
await page.getByRole("menuitem", { name: "Edit" }).click();
await page
.getByRole('row', { name: `${user.firstname} ${user.lastname}` })
.getByRole('button')
.click();
await page.getByRole('menuitem', { name: 'Edit' }).click();
await page.getByLabel("Username").fill(users.tim.username);
await page.getByRole("button", { name: "Save" }).first().click();
await page.getByLabel('Username').fill(users.tim.username);
await page.getByRole('button', { name: 'Save' }).first().click();
await expect(page.locator('[data-type="error"]')).toHaveText(
"Username is already in use"
);
await expect(page.locator('[data-type="error"]')).toHaveText('Username is already in use');
});
test("Update user custom claims", async ({ page }) => {
await page.goto(`/settings/admin/users/${users.craig.id}`);
test('Update user custom claims', async ({ page }) => {
await page.goto(`/settings/admin/users/${users.craig.id}`);
await page.getByRole("button", { name: "Expand card" }).nth(1).click();
await page.getByRole('button', { name: 'Expand card' }).nth(1).click();
// Add two custom claims
await page.getByRole("button", { name: "Add custom claim" }).click();
// Add two custom claims
await page.getByRole('button', { name: 'Add custom claim' }).click();
await page.getByPlaceholder("Key").fill("customClaim1");
await page.getByPlaceholder("Value").fill("customClaim1_value");
await page.getByPlaceholder('Key').fill('customClaim1');
await page.getByPlaceholder('Value').fill('customClaim1_value');
await page.getByRole("button", { name: "Add another" }).click();
await page.getByPlaceholder("Key").nth(1).fill("customClaim2");
await page.getByPlaceholder("Value").nth(1).fill("customClaim2_value");
await page.getByRole('button', { name: 'Add another' }).click();
await page.getByPlaceholder('Key').nth(1).fill('customClaim2');
await page.getByPlaceholder('Value').nth(1).fill('customClaim2_value');
await page.getByRole("button", { name: "Save" }).nth(1).click();
await page.getByRole('button', { name: 'Save' }).nth(1).click();
await expect(page.locator('[data-type="success"]')).toHaveText(
"Custom claims updated successfully"
);
await expect(page.locator('[data-type="success"]')).toHaveText(
'Custom claims updated successfully'
);
await page.reload();
await page.reload();
// Check if custom claims are saved
await expect(page.getByPlaceholder("Key").first()).toHaveValue(
"customClaim1"
);
await expect(page.getByPlaceholder("Value").first()).toHaveValue(
"customClaim1_value"
);
await expect(page.getByPlaceholder("Key").nth(1)).toHaveValue("customClaim2");
await expect(page.getByPlaceholder("Value").nth(1)).toHaveValue(
"customClaim2_value"
);
// Check if custom claims are saved
await expect(page.getByPlaceholder('Key').first()).toHaveValue('customClaim1');
await expect(page.getByPlaceholder('Value').first()).toHaveValue('customClaim1_value');
await expect(page.getByPlaceholder('Key').nth(1)).toHaveValue('customClaim2');
await expect(page.getByPlaceholder('Value').nth(1)).toHaveValue('customClaim2_value');
// Remove one custom claim
await page.getByLabel("Remove custom claim").first().click();
await page.getByRole("button", { name: "Save" }).nth(1).click();
// Remove one custom claim
await page.getByLabel('Remove custom claim').first().click();
await page.getByRole('button', { name: 'Save' }).nth(1).click();
await expect(page.locator('[data-type="success"]')).toHaveText(
"Custom claims updated successfully"
);
await expect(page.locator('[data-type="success"]')).toHaveText(
'Custom claims updated successfully'
);
await page.reload();
await page.reload();
// Check if custom claim is removed
await expect(page.getByPlaceholder("Key").first()).toHaveValue(
"customClaim2"
);
await expect(page.getByPlaceholder("Value").first()).toHaveValue(
"customClaim2_value"
);
// Check if custom claim is removed
await expect(page.getByPlaceholder('Key').first()).toHaveValue('customClaim2');
await expect(page.getByPlaceholder('Value').first()).toHaveValue('customClaim2_value');
});
test("Update user group assignments", async ({ page }) => {
const user = users.craig;
await page.goto(`/settings/admin/users/${user.id}`);
test('Update user group assignments', async ({ page }) => {
const user = users.craig;
await page.goto(`/settings/admin/users/${user.id}`);
page.getByRole("button", { name: "Expand card" }).first().click();
page.getByRole('button', { name: 'Expand card' }).first().click();
await page
.getByRole("row", { name: userGroups.developers.name })
.getByRole("checkbox")
.click();
await page
.getByRole("row", { name: userGroups.designers.name })
.getByRole("checkbox")
.click();
await page.getByRole('row', { name: userGroups.developers.name }).getByRole('checkbox').click();
await page.getByRole('row', { name: userGroups.designers.name }).getByRole('checkbox').click();
await page.getByRole("button", { name: "Save" }).nth(1).click();
await page.getByRole('button', { name: 'Save' }).nth(1).click();
await expect(page.locator('[data-type="success"]')).toHaveText(
"User groups updated successfully"
);
await expect(page.locator('[data-type="success"]')).toHaveText(
'User groups updated successfully'
);
await page.reload();
await page.reload();
await expect(
page
.getByRole("row", { name: userGroups.designers.name })
.getByRole("checkbox")
).toHaveAttribute("data-state", "checked");
await expect(
page
.getByRole("row", { name: userGroups.developers.name })
.getByRole("checkbox")
).toHaveAttribute("data-state", "unchecked");
await expect(
page.getByRole('row', { name: userGroups.designers.name }).getByRole('checkbox')
).toHaveAttribute('data-state', 'checked');
await expect(
page.getByRole('row', { name: userGroups.developers.name }).getByRole('checkbox')
).toHaveAttribute('data-state', 'unchecked');
});