feat(cms): improve catalog, editorial recovery and operations
This commit is contained in:
1 parent
2fead134e6
commit
c389c3893d
122 files changed
+8137
-703
No files matched your search
@@ -0,0 +1,68 @@
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
const state = vi.hoisted(() => ({
|
||||
rows: [] as unknown[],
|
||||
fail: false,
|
||||
query: "",
|
||||
params: [] as unknown[],
|
||||
}));
|
||||
vi.mock("@/lib/db", async () => {
|
||||
const schema = await import("@/db/schema");
|
||||
const { drizzle } = await import("drizzle-orm/mysql-proxy");
|
||||
return {
|
||||
...schema,
|
||||
db: drizzle(async (query, params) => {
|
||||
state.query = query;
|
||||
state.params = params;
|
||||
if (state.fail) throw new Error("offline");
|
||||
return { rows: state.rows };
|
||||
}),
|
||||
};
|
||||
});
|
||||
|
||||
import { loadDashboardEvent } from "./dashboard-event";
|
||||
|
||||
describe("dashboard event loading", () => {
|
||||
beforeEach(() => {
|
||||
state.rows = [];
|
||||
state.fail = false;
|
||||
});
|
||||
it("limits to one published ongoing or future event in date order", async () => {
|
||||
await loadDashboardEvent(new Date("2026-09-09T12:00:00Z"));
|
||||
expect(state.query).toContain("`website_events`.`status` = ?");
|
||||
expect(state.query).toContain(
|
||||
"(`website_events`.`starts_at` > ? or `website_events`.`ends_at` > ?)",
|
||||
);
|
||||
expect(state.query).toContain(
|
||||
"order by `website_events`.`starts_at` asc, `website_events`.`id` asc limit ?",
|
||||
);
|
||||
expect(state.params).toEqual([
|
||||
"published",
|
||||
"2026-09-09 12:00:00.000",
|
||||
"2026-09-09 12:00:00.000",
|
||||
1,
|
||||
]);
|
||||
});
|
||||
it("distinguishes an empty calendar from a failed query", async () => {
|
||||
expect(await loadDashboardEvent()).toEqual({
|
||||
event: null,
|
||||
unavailable: false,
|
||||
});
|
||||
state.fail = true;
|
||||
expect(await loadDashboardEvent()).toEqual({
|
||||
event: null,
|
||||
unavailable: true,
|
||||
});
|
||||
});
|
||||
it("returns the next event with the phase derived from its real dates", async () => {
|
||||
state.rows = [
|
||||
[3, "Quiz", "published", "2026-09-09 13:00:00.000", null, "Games"],
|
||||
];
|
||||
expect(
|
||||
await loadDashboardEvent(new Date("2026-09-09T12:00:00Z")),
|
||||
).toMatchObject({
|
||||
unavailable: false,
|
||||
event: { id: 3, title: "Quiz", phase: "upcoming" },
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user