feat(workspace): refine career workflows

Make job/CV comparisons language-aware and filter recruitment noise. Improve responsive career navigation, shared spacing, dashboard priorities, settings, localized workspace controls, and portable browser tests.
This commit is contained in:
cesnimda
2026-08-29 16:44:44 +02:00
parent 4d4af47651
commit 9edcbfc5de
29 changed files with 827 additions and 236 deletions
+21 -2
View File
@@ -128,10 +128,14 @@ test("a Free account keeps manual work available while AI actions stay honestly
await page.evaluate(() => window.localStorage.setItem("jobtracker.themeMode", "dark"));
await page.setViewportSize({ width: 375, height: 900 });
await page.goto("/career");
await page.getByRole("combobox", { name: "Career workspace section" }).click();
await page.getByRole("option", { name: "Import review" }).click();
await expect(page.getByText(/Build your Career Profile faster with Pro/)).toBeVisible();
await expect(page.getByLabel("Professional headline")).toBeEnabled();
await page.getByRole("button", { name: "Dismiss Build your Career Profile faster with Pro." }).click();
await expect(page.getByText(/Build your Career Profile faster with Pro/)).toHaveCount(0);
await page.getByRole("combobox", { name: "Career workspace section" }).click();
await page.getByRole("option", { name: "Career profile" }).click();
await expect(page.getByLabel("Professional headline")).toBeEnabled();
await page.goto("/settings");
await expect(page.getByText(/Free plan includes core job tracking without AI/i)).toBeVisible();
@@ -140,7 +144,8 @@ test("a Free account keeps manual work available while AI actions stay honestly
const overflow = await page.evaluate(() => document.documentElement.scrollWidth - document.documentElement.clientWidth);
expect(overflow).toBeLessThanOrEqual(1);
await page.getByRole("tab", { name: "Backup" }).click();
await page.getByLabel("Settings section").click();
await page.getByRole("option", { name: "Backup" }).click();
await expect(page.getByText(/requires a sign-in from the last 15 minutes/i)).toBeVisible();
const exportResponsePromise = page.waitForResponse((response) => response.url().endsWith("/api/export/account") && response.request().method() === "POST");
await page.getByRole("button", { name: "Download readable account export" }).click();
@@ -302,6 +307,20 @@ test("Career Workspace loads from the authenticated application shell", async ({
await expect(page.getByRole("heading", { name: "Career Workspace" })).toBeVisible();
await expect(page.getByRole("link", { name: "Open CV Builder" })).toHaveAttribute("href", "/career/builder");
await page.setViewportSize({ width: 375, height: 900 });
const careerSection = page.getByRole("combobox", { name: "Career workspace section" });
await expect(careerSection).toBeVisible();
await careerSection.click();
await page.getByRole("option", { name: "Career profile" }).click();
await expect(page).toHaveURL(/\/career\?section=profile$/);
await expect(page.getByRole("heading", { name: "Career profile" })).toBeVisible();
await careerSection.click();
await page.getByRole("option", { name: "Import review" }).click();
await expect(page).toHaveURL(/\/career\?section=import$/);
await expect(page.getByRole("heading", { name: "Master CV" })).toBeVisible();
await careerSection.click();
await page.getByRole("option", { name: "Overview" }).click();
for (const width of [375, 768, 1440]) {
await page.setViewportSize({ width, height: 900 });
const overflow = await page.evaluate(() => document.documentElement.scrollWidth - document.documentElement.clientWidth);