52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
|
|
import {
|
|
dashboardKpis,
|
|
dashboardNavigation,
|
|
pipelineStages,
|
|
reviewQueue,
|
|
} from "../lib/dashboard-model";
|
|
|
|
type NavigationItem = { label: string; href: string };
|
|
type PipelineStage = { title: string; count: number };
|
|
type ReviewQueueItem = { title: string };
|
|
|
|
test("dashboardNavigation contains the expected sidebar routes in order", () => {
|
|
assert.deepEqual(
|
|
dashboardNavigation.map((item: NavigationItem) => [item.label, item.href]),
|
|
[
|
|
["Dashboard", "/dashboard"],
|
|
["Campaigns", "/dashboard/campaigns"],
|
|
["Leads", "/dashboard/leads"],
|
|
["Audits", "/dashboard/audits"],
|
|
["Outreach", "/dashboard/outreach"],
|
|
["Analytics", "/dashboard/analytics"],
|
|
["Blacklist", "/dashboard/blacklist"],
|
|
["Settings", "/dashboard/settings"],
|
|
],
|
|
);
|
|
});
|
|
|
|
test("pipelineStages keep the first-screen workflow focused on pipeline overview", () => {
|
|
assert.deepEqual(
|
|
pipelineStages.map((stage: PipelineStage) => stage.title),
|
|
["Kampagnen", "Lead-Recherche", "Audit-Freigabe", "Outreach"],
|
|
);
|
|
assert.equal(
|
|
pipelineStages.every((stage: PipelineStage) => stage.count >= 0),
|
|
true,
|
|
);
|
|
});
|
|
|
|
test("dashboardKpis and reviewQueue expose the above-the-fold dashboard summary", () => {
|
|
assert.equal(dashboardKpis.length, 4);
|
|
assert.equal(reviewQueue.length, 3);
|
|
assert.equal(
|
|
reviewQueue.some((item: ReviewQueueItem) =>
|
|
item.title.includes("Audit-Freigabe"),
|
|
),
|
|
true,
|
|
);
|
|
});
|