79 lines
2.0 KiB
JavaScript
79 lines
2.0 KiB
JavaScript
import fs from "node:fs";
|
|
|
|
function assert(condition, message) {
|
|
if (!condition) throw new Error(message);
|
|
}
|
|
|
|
const page = fs.readFileSync(
|
|
new URL(
|
|
"../src/features/calendar/CalendarPage.tsx",
|
|
import.meta.url,
|
|
),
|
|
"utf8",
|
|
);
|
|
const views = fs.readFileSync(
|
|
new URL(
|
|
"../src/features/calendar/CalendarViews.tsx",
|
|
import.meta.url,
|
|
),
|
|
"utf8",
|
|
);
|
|
const model = fs.readFileSync(
|
|
new URL(
|
|
"../src/features/calendar/calendarViewModel.ts",
|
|
import.meta.url,
|
|
),
|
|
"utf8",
|
|
);
|
|
const collectionDialogs = fs.readFileSync(
|
|
new URL(
|
|
"../src/features/calendar/CalendarCollectionDialogs.tsx",
|
|
import.meta.url,
|
|
),
|
|
"utf8",
|
|
);
|
|
const eventDialog = fs.readFileSync(
|
|
new URL(
|
|
"../src/features/calendar/CalendarEventDialog.tsx",
|
|
import.meta.url,
|
|
),
|
|
"utf8",
|
|
);
|
|
|
|
assert(
|
|
page.includes('from "./CalendarViews"'),
|
|
"CalendarPage must compose the focused calendar view components",
|
|
);
|
|
assert(
|
|
!page.includes("function CalendarWeekRows("),
|
|
"CalendarPage must not own month/continuous rendering",
|
|
);
|
|
assert(
|
|
!page.includes("function CalendarTimeGrid("),
|
|
"CalendarPage must not own time-grid rendering",
|
|
);
|
|
assert(
|
|
views.includes("export function CalendarWeekRows(") &&
|
|
views.includes("export function CalendarTimeGrid("),
|
|
"CalendarViews must own both view families",
|
|
);
|
|
assert(
|
|
model.includes("export function layoutTimedEventsForDay(") &&
|
|
model.includes("export function continuousVirtualWindow("),
|
|
"calendar layout and virtualization must remain independently testable",
|
|
);
|
|
assert(
|
|
!page.includes("function CalendarCollectionDialog(") &&
|
|
!page.includes("function CalendarEventDialog("),
|
|
"CalendarPage must not own source or event form dialogs",
|
|
);
|
|
assert(
|
|
collectionDialogs.includes(
|
|
"export function CalendarCollectionDialog(",
|
|
) &&
|
|
eventDialog.includes("export function CalendarEventDialog("),
|
|
"calendar dialogs must remain focused components",
|
|
);
|
|
|
|
console.log("Calendar page decomposition checks passed.");
|