Files
stack/apps/web/src/components/widgets/__tests__/WidgetRegistry.test.tsx
2026-01-29 22:23:28 -06:00

92 lines
3.6 KiB
TypeScript

/**
* Widget Registry Tests
* Following TDD - write tests first!
*/
import { describe, it, expect } from "vitest";
import { widgetRegistry } from "../WidgetRegistry";
import { TasksWidget } from "../TasksWidget";
import { CalendarWidget } from "../CalendarWidget";
import { QuickCaptureWidget } from "../QuickCaptureWidget";
describe("WidgetRegistry", () => {
it("should have a registry of widgets", () => {
expect(widgetRegistry).toBeDefined();
expect(typeof widgetRegistry).toBe("object");
});
it("should include TasksWidget in registry", () => {
expect(widgetRegistry.TasksWidget).toBeDefined();
expect(widgetRegistry.TasksWidget!.component).toBe(TasksWidget);
});
it("should include CalendarWidget in registry", () => {
expect(widgetRegistry.CalendarWidget).toBeDefined();
expect(widgetRegistry.CalendarWidget!.component).toBe(CalendarWidget);
});
it("should include QuickCaptureWidget in registry", () => {
expect(widgetRegistry.QuickCaptureWidget).toBeDefined();
expect(widgetRegistry.QuickCaptureWidget!.component).toBe(QuickCaptureWidget);
});
it("should have correct metadata for TasksWidget", () => {
const tasksWidget = widgetRegistry.TasksWidget!;
expect(tasksWidget.name).toBe("TasksWidget");
expect(tasksWidget.displayName).toBe("Tasks");
expect(tasksWidget.description).toBeDefined();
expect(tasksWidget.defaultWidth).toBeGreaterThan(0);
expect(tasksWidget.defaultHeight).toBeGreaterThan(0);
expect(tasksWidget.minWidth).toBeGreaterThan(0);
expect(tasksWidget.minHeight).toBeGreaterThan(0);
});
it("should have correct metadata for CalendarWidget", () => {
const calendarWidget = widgetRegistry.CalendarWidget!;
expect(calendarWidget.name).toBe("CalendarWidget");
expect(calendarWidget.displayName).toBe("Calendar");
expect(calendarWidget.description).toBeDefined();
expect(calendarWidget.defaultWidth).toBeGreaterThan(0);
expect(calendarWidget.defaultHeight).toBeGreaterThan(0);
});
it("should have correct metadata for QuickCaptureWidget", () => {
const quickCaptureWidget = widgetRegistry.QuickCaptureWidget!;
expect(quickCaptureWidget.name).toBe("QuickCaptureWidget");
expect(quickCaptureWidget.displayName).toBe("Quick Capture");
expect(quickCaptureWidget.description).toBeDefined();
expect(quickCaptureWidget.defaultWidth).toBeGreaterThan(0);
expect(quickCaptureWidget.defaultHeight).toBeGreaterThan(0);
});
it("should export getWidgetByName helper", async () => {
const { getWidgetByName } = await import("../WidgetRegistry");
expect(typeof getWidgetByName).toBe("function");
});
it("getWidgetByName should return correct widget", async () => {
const { getWidgetByName } = await import("../WidgetRegistry");
const widget = getWidgetByName("TasksWidget");
expect(widget).toBeDefined();
expect(widget?.component).toBe(TasksWidget);
});
it("getWidgetByName should return undefined for invalid name", async () => {
const { getWidgetByName } = await import("../WidgetRegistry");
const widget = getWidgetByName("InvalidWidget");
expect(widget).toBeUndefined();
});
it("should export getAllWidgets helper", async () => {
const { getAllWidgets } = await import("../WidgetRegistry");
expect(typeof getAllWidgets).toBe("function");
});
it("getAllWidgets should return array of all widgets", async () => {
const { getAllWidgets } = await import("../WidgetRegistry");
const widgets = getAllWidgets();
expect(Array.isArray(widgets)).toBe(true);
expect(widgets.length).toBeGreaterThanOrEqual(3);
});
});