|
| 1 | +import { test, expect } from "@playwright/test"; |
| 2 | +import { beforeCoderTest } from "../hooks"; |
| 3 | + |
| 4 | +test.beforeEach(async ({ page }) => await beforeCoderTest(page)); |
| 5 | + |
| 6 | +test("manage users", async ({ page, baseURL }) => { |
| 7 | + await page.goto(`${baseURL}/users`, { waitUntil: "domcontentloaded" }); |
| 8 | + await expect(page).toHaveTitle("Users - Coder"); |
| 9 | + |
| 10 | + await page.getByRole("button", { name: "Create user" }).click(); |
| 11 | + await expect(page).toHaveTitle("Create User - Coder"); |
| 12 | + |
| 13 | + const userValues = { |
| 14 | + username: "testuser", |
| 15 | + email: "testuser@coder.com", |
| 16 | + loginType: "password", |
| 17 | + password: "s3cure&password!", |
| 18 | + }; |
| 19 | + await page.getByLabel("Username").fill(userValues.username); |
| 20 | + await page.getByLabel("Email").fill(userValues.email); |
| 21 | + await page.getByLabel("Login Type").click(); |
| 22 | + await page.getByRole("option", { name: "Password", exact: false }).click(); |
| 23 | + // Using input[name=password] due to the select element utilizing 'password' |
| 24 | + // as the label for the currently active option. |
| 25 | + const passwordField = page.locator("input[name=password]"); |
| 26 | + await passwordField.fill(userValues.password); |
| 27 | + await page.getByRole("button", { name: "Create user" }).click(); |
| 28 | + await expect(page.getByText("Successfully created user.")).toBeVisible(); |
| 29 | + |
| 30 | + const userRow = page.locator("tr", { hasText: userValues.email }); |
| 31 | + await userRow.getByRole("button", { name: "More options" }).click(); |
| 32 | + await page.getByText("Delete", { exact: false }).click(); |
| 33 | + await page.getByLabel("Name of the user to delete").fill(userValues.username); |
| 34 | + await page.getByRole("button", { name: "Delete" }).click(); |
| 35 | + await expect(page.getByText("Successfully deleted the user.")).toBeVisible(); |
| 36 | +}); |
0 commit comments