Files
jobtrackingapp/job-tracker-ui/e2e/job-discovery.spec.ts
T
cesnimda 6b02e3f5d1
CI and Deploy / test (pull_request) Successful in 4m54s
CI and Deploy / deploy (pull_request) Has been skipped
test(e2e): use canonical theme preference
2026-08-15 15:57:00 +02:00

92 lines
4.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { expect, test, type Page } from "@playwright/test";
import path from "node:path";
const updateAuditEvidence = process.env.UPDATE_AUDIT_EVIDENCE === "1";
async function login(page: Page) {
await page.goto("/login");
await page.getByLabel("Email").fill("e2e@example.test");
await page.getByLabel("Current password").fill("E2ePassword123!");
await page.getByRole("button", { name: "Sign in", exact: true }).click();
await expect(page).toHaveURL(/\/dashboard$/);
}
test.beforeEach(async ({ page }) => {
await page.addInitScript(() => window.localStorage.setItem("uiLanguage", "en"));
});
test("discovery remains usable across widths and opens the reviewed import", async ({ page }) => {
await page.route("**/api/job-discovery/search**", async (route) => {
await route.fulfill({ json: [
{
id: "long-no",
title: "Senior systemutvikler for robuste og samfunnskritiske plattformer",
company: "Eksempelbedriften for norske bokstaver Æ Ø Å",
location: "TRONDHEIM",
modifiedAt: "2026-08-09T10:00:00Z",
deadline: "2026-08-20T23:59:59Z",
url: "https://arbeidsplassen.nav.no/stillinger/stilling/long-no",
source: "nav",
sourceName: "NAV Arbeidsplassen",
acquisitionType: "searched",
retrievedAt: "2026-08-10T10:00:00Z",
countryCode: "NO",
},
{
id: "analyst",
title: "Analyst",
url: "https://arbeidsplassen.nav.no/stillinger/stilling/analyst",
source: "nav",
sourceName: "NAV Arbeidsplassen",
acquisitionType: "searched",
retrievedAt: "2026-08-10T10:00:00Z",
countryCode: "NO",
},
] });
});
await page.route("**/api/jobimport/preview", async (route) => {
await route.fulfill({ json: { success: true, title: "Imported NAV role", company: "Synthetic AS", description: "Synthetic description", tags: [], sourceUrl: "https://arbeidsplassen.nav.no/stillinger/stilling/long-no", source: "nav", countryCode: "NO" } });
});
await login(page);
await page.setViewportSize({ width: 375, height: 812 });
await page.goto("/discover");
await page.getByLabel("Role or company").fill("utvikler");
await page.keyboard.press("Tab");
await expect(page.getByLabel("Municipality")).toBeFocused();
await page.keyboard.press("Tab");
await expect(page.getByRole("button", { name: "Search NAV" })).toBeFocused();
await page.keyboard.press("Enter");
await expect(page.getByText("2 vacancies found")).toBeVisible();
await expect(page.getByText("NAV Arbeidsplassen").first()).toBeVisible();
await expect(page.getByText("Work arrangement not provided by this source").first()).toBeVisible();
await expect(page.getByText(/Application deadline:/)).toBeVisible();
expect(await page.evaluate(() => document.documentElement.scrollWidth <= window.innerWidth)).toBe(true);
if (updateAuditEvidence) await page.screenshot({ path: path.resolve("..", "docs", "audits", "evidence", "jobs-001-discovery-375-light.png"), fullPage: true });
await page.getByLabel("Sort results").click();
await page.getByRole("option", { name: "Title AZ" }).click();
await expect(page.getByRole("combobox", { name: "Sort results" })).toHaveText("Title AZ");
await expect(page.getByRole("heading", { name: "Analyst", exact: true })).toBeVisible();
for (const width of [768, 1440]) {
await page.setViewportSize({ width, height: 900 });
expect(await page.evaluate(() => document.documentElement.scrollWidth <= window.innerWidth)).toBe(true);
}
await page.evaluate(() => {
window.localStorage.setItem("jobtracker.themeMode", "dark");
});
await page.reload();
await expect(page.locator("html")).toHaveAttribute("data-color-scheme", "dark");
await page.getByRole("button", { name: "Search NAV" }).click();
await expect(page.getByText("2 vacancies found")).toBeVisible();
if (updateAuditEvidence) await page.screenshot({ path: path.resolve("..", "docs", "audits", "evidence", "jobs-001-discovery-1440-dark.png"), fullPage: true });
await page.getByRole("button", { name: "Save to tracker" }).first().click();
await expect(page.getByRole("dialog")).toBeVisible();
await expect(page.getByLabel("Job title")).toHaveValue("Imported NAV role");
});