refactor(api): extract timeline shift mutation routing

This commit is contained in:
2026-03-31 18:15:38 +02:00
parent 7b4c659922
commit 72b13dfaba
4 changed files with 110 additions and 33 deletions
@@ -0,0 +1,59 @@
import { describe, expect, it, vi } from "vitest";
vi.mock("../sse/event-bus.js", () => ({
emitProjectShifted: vi.fn(),
}));
vi.mock("../router/timeline-project-load-support.js", () => ({
loadProjectShiftContext: vi.fn(),
}));
vi.mock("../router/timeline-shift-procedure-support.js", () => ({
applyTimelineProjectShift: vi.fn(),
}));
import { emitProjectShifted } from "../sse/event-bus.js";
import { loadProjectShiftContext } from "../router/timeline-project-load-support.js";
import { applyTimelineProjectShiftMutation } from "../router/timeline-shift-router-support.js";
import { applyTimelineProjectShift } from "../router/timeline-shift-procedure-support.js";
const emitProjectShiftedMock = vi.mocked(emitProjectShifted);
const loadProjectShiftContextMock = vi.mocked(loadProjectShiftContext);
const applyTimelineProjectShiftMock = vi.mocked(applyTimelineProjectShift);
describe("timeline shift router support", () => {
it("loads context, applies the shift, emits the event, and returns the response payload", async () => {
const db = {} as never;
const context = { project: { id: "project_1" } } as never;
const result = {
project: { id: "project_1" },
validation: { valid: true },
event: { projectId: "project_1" },
} as never;
loadProjectShiftContextMock.mockResolvedValueOnce(context);
applyTimelineProjectShiftMock.mockResolvedValueOnce(result);
await expect(
applyTimelineProjectShiftMutation({
db,
projectId: "project_1",
newStartDate: new Date("2026-04-03T00:00:00.000Z"),
newEndDate: new Date("2026-04-12T00:00:00.000Z"),
}),
).resolves.toEqual({
project: { id: "project_1" },
validation: { valid: true },
});
expect(loadProjectShiftContextMock).toHaveBeenCalledWith(db, "project_1");
expect(applyTimelineProjectShiftMock).toHaveBeenCalledWith({
db,
projectId: "project_1",
newStartDate: new Date("2026-04-03T00:00:00.000Z"),
newEndDate: new Date("2026-04-12T00:00:00.000Z"),
context,
});
expect(emitProjectShiftedMock).toHaveBeenCalledWith({ projectId: "project_1" });
});
});