chore(repo): initialize planarchy workspace
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
DASHBOARD_LAYOUT_VERSION,
|
||||
createDefaultDashboardLayout,
|
||||
createDashboardWidget,
|
||||
getNextDashboardWidgetY,
|
||||
normalizeDashboardLayout,
|
||||
} from "../index.js";
|
||||
|
||||
describe("dashboard layout normalization", () => {
|
||||
it("returns the default layout for non-object input", () => {
|
||||
expect(normalizeDashboardLayout(null)).toEqual(createDefaultDashboardLayout());
|
||||
});
|
||||
|
||||
it("repairs invalid persisted widget coordinates and normalizes config", () => {
|
||||
const layout = normalizeDashboardLayout({
|
||||
version: 1,
|
||||
gridCols: 12,
|
||||
widgets: [
|
||||
{
|
||||
id: "alpha",
|
||||
type: "stat-cards",
|
||||
x: 0,
|
||||
y: 0,
|
||||
w: 12,
|
||||
h: 3,
|
||||
minW: 6,
|
||||
minH: 2,
|
||||
config: { ignored: true },
|
||||
},
|
||||
{
|
||||
id: "beta",
|
||||
type: "peak-times-chart",
|
||||
x: 0,
|
||||
y: null,
|
||||
w: 8,
|
||||
h: 5,
|
||||
minW: 4,
|
||||
minH: 4,
|
||||
config: { granularity: "week", groupBy: "chapter", extra: "drop-me" },
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
expect(layout.version).toBe(DASHBOARD_LAYOUT_VERSION);
|
||||
expect(layout.widgets).toHaveLength(2);
|
||||
expect(layout.widgets[0]?.config).toEqual({});
|
||||
expect(layout.widgets[1]?.y).toBe(3);
|
||||
expect(layout.widgets[1]?.config).toEqual({
|
||||
granularity: "week",
|
||||
groupBy: "chapter",
|
||||
});
|
||||
});
|
||||
|
||||
it("drops unknown widgets and deduplicates ids", () => {
|
||||
const layout = normalizeDashboardLayout({
|
||||
gridCols: 12,
|
||||
widgets: [
|
||||
createDashboardWidget("resource-table", { id: "duplicate", y: 0 }),
|
||||
createDashboardWidget("project-table", { id: "duplicate", y: 6 }),
|
||||
{ id: "bad", type: "not-real", x: 0, y: 0, w: 1, h: 1, config: {} },
|
||||
],
|
||||
});
|
||||
|
||||
expect(layout.widgets).toHaveLength(2);
|
||||
expect(layout.widgets[0]?.id).toBe("duplicate");
|
||||
expect(layout.widgets[1]?.id).toBe("duplicate-2");
|
||||
});
|
||||
|
||||
it("computes the next widget row from current widget bottoms", () => {
|
||||
const widgets = [
|
||||
createDashboardWidget("stat-cards", { id: "one", y: 0, h: 3 }),
|
||||
createDashboardWidget("demand-view", { id: "two", y: 4, h: 5 }),
|
||||
];
|
||||
|
||||
expect(getNextDashboardWidgetY(widgets)).toBe(9);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user