feat(ui): redesign job workspace sections

This commit is contained in:
cesnimda
2026-10-07 01:58:31 +02:00
parent acd1d94684
commit ac6d78289d
123 changed files with 2842 additions and 205 deletions
@@ -1,15 +1,34 @@
import { WORKSPACE_SECTIONS, workspaceSection } from "./applicationWorkspace";
import { WORKSPACE_SECTIONS, workspaceSection, workspaceSubsection } from "./applicationWorkspace";
test("workspace navigation exposes five purposes and preserves legacy links", () => {
test("workspace navigation exposes seven purposes and preserves legacy links", () => {
expect(WORKSPACE_SECTIONS.map((section) => section.key)).toEqual([
"overview", "analysis", "cv", "cover-letter", "interview",
"overview", "match", "application", "documents", "timeline", "tasks", "interview",
]);
expect(workspaceSection("match")).toBe("analysis");
expect(workspaceSection("timeline")).toBe("overview");
expect(workspaceSection("portfolio")).toBe("overview");
expect(workspaceSection("notes")).toBe("cover-letter");
for (const alias of ["job-details", "checklist", "documents", "communication"]) expect(workspaceSection(alias)).toBe("overview");
expect(workspaceSection("analysis")).toBe("match");
expect(workspaceSection("portfolio")).toBe("documents");
expect(workspaceSection("notes")).toBe("tasks");
expect(workspaceSection("checklist")).toBe("tasks");
expect(workspaceSection("communication")).toBe("timeline");
expect(workspaceSection("cv")).toBe("application");
expect(workspaceSection("cover-letter")).toBe("application");
expect(workspaceSection("job-details")).toBe("overview");
expect(workspaceSection("unknown-section")).toBe("overview");
expect(workspaceSection("constructor")).toBe("overview");
expect(workspaceSection("__proto__")).toBe("overview");
});
test("legacy material and correspondence links reveal their original owner without rewriting URLs", () => {
expect(workspaceSubsection("cv", "submission")).toBe("cv");
expect(workspaceSubsection("cover-letter", null)).toBe("letter");
expect(workspaceSubsection("communication", "activity")).toBe("correspondence");
expect(workspaceSubsection("timeline", null)).toBe("activity");
});
test("canonical subsection URLs are durable and unknown inputs have safe defaults", () => {
for (const sub of ["cv", "letter", "answers", "submission"]) expect(workspaceSubsection("application", sub)).toBe(sub);
expect(workspaceSubsection("timeline", "correspondence")).toBe("correspondence");
for (const sub of [null, "unknown", "constructor", "__proto__"]) {
expect(workspaceSubsection("application", sub)).toBe("cv");
expect(workspaceSubsection("timeline", sub)).toBe("activity");
}
});