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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user