71 lines
2.7 KiB
JavaScript
71 lines
2.7 KiB
JavaScript
const { test, expect } = require("@playwright/test");
|
|
|
|
const registrationTimeoutMs = Number(process.env.CARD_REGISTRATION_TIMEOUT_MS || "90000");
|
|
const loginTimeoutMs = Number(process.env.CARD_LOGIN_TIMEOUT_MS || "90000");
|
|
|
|
function uniqueUsername() {
|
|
return `pw_${Date.now().toString(36)}`;
|
|
}
|
|
|
|
async function waitForActionResult(page, action, expectedText, timeoutMs) {
|
|
const flowResult = page.locator("#flowResult");
|
|
await action();
|
|
await expect(flowResult).toContainText(expectedText, { timeout: timeoutMs });
|
|
}
|
|
|
|
test.describe("k_client portal regression", () => {
|
|
test("registers, logs in, reads counter, logs out, and unregisters", async ({ page }) => {
|
|
const username = uniqueUsername();
|
|
const usersList = page.locator("#usersList");
|
|
const flowResult = page.locator("#flowResult");
|
|
const sessionLine = page.locator("#stateSession");
|
|
|
|
test.setTimeout(registrationTimeoutMs + loginTimeoutMs + 90_000);
|
|
|
|
await page.goto("/");
|
|
await expect(page.getByRole("heading", { name: "ChromeCard Client Flow" })).toBeVisible();
|
|
await page.getByLabel("Username").fill(username);
|
|
|
|
await test.step("Register user", async () => {
|
|
// Card step: press yes on the registration prompt.
|
|
await waitForActionResult(
|
|
page,
|
|
() => page.getByRole("button", { name: "Register User" }).click(),
|
|
"User registration succeeded.",
|
|
registrationTimeoutMs
|
|
);
|
|
await expect(usersList).toContainText(username);
|
|
});
|
|
|
|
await test.step("Login", async () => {
|
|
// Card step: press yes on the authentication prompt.
|
|
await waitForActionResult(
|
|
page,
|
|
() => page.getByRole("button", { name: "Login" }).click(),
|
|
"Login succeeded. You can now call k_server.",
|
|
loginTimeoutMs
|
|
);
|
|
await expect(sessionLine).toContainText("Session active: yes");
|
|
});
|
|
|
|
await test.step("Call k_server counter", async () => {
|
|
await page.getByRole("button", { name: "Call k_server" }).click();
|
|
await expect(flowResult).toContainText("k_server was reached. Counter value:");
|
|
});
|
|
|
|
await test.step("Logout", async () => {
|
|
await page.getByRole("button", { name: "Logout" }).click();
|
|
await expect(flowResult).toContainText("Session cleared.");
|
|
await expect(sessionLine).toContainText("Session active: no");
|
|
});
|
|
|
|
await test.step("Unregister user", async () => {
|
|
const row = usersList.locator(".user-row", { hasText: username });
|
|
await expect(row).toBeVisible();
|
|
await row.getByRole("button", { name: "Unregister" }).click();
|
|
await expect(flowResult).toContainText(`User ${username} was unregistered.`);
|
|
await expect(usersList).not.toContainText(username);
|
|
});
|
|
});
|
|
});
|