test(server): isolate route modules in endpoint tests

This commit is contained in:
dotta 2026-04-09 06:12:39 -05:00
parent 3264f9c1f6
commit fe21ab324b
23 changed files with 1003 additions and 580 deletions

View file

@ -1,8 +1,6 @@
import express from "express";
import request from "supertest";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { issueRoutes } from "../routes/issues.js";
import { errorHandler } from "../middleware/index.js";
const issueId = "11111111-1111-4111-8111-111111111111";
const companyId = "22222222-2222-4222-8222-222222222222";
@ -52,7 +50,11 @@ vi.mock("../services/index.js", () => ({
workProductService: () => ({}),
}));
function createApp() {
async function createApp() {
const [{ issueRoutes }, { errorHandler }] = await Promise.all([
import("../routes/issues.js"),
import("../middleware/index.js"),
]);
const app = express();
app.use(express.json());
app.use((req, _res, next) => {
@ -72,7 +74,8 @@ function createApp() {
describe("issue document revision routes", () => {
beforeEach(() => {
vi.clearAllMocks();
vi.resetModules();
vi.resetAllMocks();
mockIssueService.getById.mockResolvedValue({
id: issueId,
companyId,
@ -118,10 +121,11 @@ describe("issue document revision routes", () => {
updatedAt: new Date("2026-03-26T12:10:00.000Z"),
},
});
mockLogActivity.mockResolvedValue(undefined);
});
it("returns revision snapshots including title and format", async () => {
const res = await request(createApp()).get(`/api/issues/${issueId}/documents/plan/revisions`);
const res = await request(await createApp()).get(`/api/issues/${issueId}/documents/plan/revisions`);
expect(res.status).toBe(200);
expect(mockDocumentsService.listIssueDocumentRevisions).toHaveBeenCalledWith(issueId, "plan");
@ -136,7 +140,7 @@ describe("issue document revision routes", () => {
});
it("restores a revision through the append-only route and logs the action", async () => {
const res = await request(createApp())
const res = await request(await createApp())
.post(`/api/issues/${issueId}/documents/plan/revisions/revision-1/restore`)
.send({});
@ -168,7 +172,7 @@ describe("issue document revision routes", () => {
});
it("rejects invalid document keys before attempting restore", async () => {
const res = await request(createApp())
const res = await request(await createApp())
.post(`/api/issues/${issueId}/documents/INVALID KEY/revisions/revision-1/restore`)
.send({});