Stabilize route setup and attachment announcement handling

Load route modules during fixture setup so cold transforms cannot leave a timed-out request running against the next test mock state. Dismiss delayed product announcements through the normal Board UI in the attachment receipt fixture.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
DottaandPaperclip committed 2026-09-30 01:32:15 -05:00
1 parent 6b1e96af0f
commit f401b831f2
3 files changed
+31 -8

No files matched your search

@@ -1,6 +1,6 @@
import express from "express";
import request from "supertest";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
function createSelectChain(rows: unknown[]) {
const query = {
@@ -44,6 +44,13 @@ function createInvite(overrides: Record<string, unknown> = {}) {
};
}
function loadAppModules() {
return Promise.all([
import("../routes/access.js"),
import("../middleware/index.js"),
]);
}
async function createApp(
db: Record<string, unknown>,
network: {
@@ -51,10 +58,7 @@ async function createApp(
requestHead: ReturnType<typeof vi.fn>;
},
) {
const [access, middleware] = await Promise.all([
import("../routes/access.js"),
import("../middleware/index.js"),
]);
const [access, middleware] = await loadAppModules();
const app = express();
app.use((req, _res, next) => {
(req as any).actor = { type: "anon" };
@@ -75,6 +79,11 @@ async function createApp(
}
describe.sequential("GET /invites/:token/test-resolution", () => {
beforeAll(async () => {
// Route transformation is fixture setup, not part of the network assertions.
await loadAppModules();
});
beforeEach(() => {
vi.clearAllMocks();
});
@@ -173,11 +173,15 @@ type TestActor =
runId: string | null;
};
async function createApp(actor?: TestActor) {
const [{ errorHandler }, { issueRoutes }] = await Promise.all([
function loadAppModules() {
return Promise.all([
import("../middleware/index.js"),
import("../routes/issues.js"),
]);
}
async function createApp(actor?: TestActor) {
const [{ errorHandler }, { issueRoutes }] = await loadAppModules();
const app = express();
app.use(express.json());
app.use((req, _res, next) => {
@@ -196,7 +200,7 @@ async function createApp(actor?: TestActor) {
}
describe("issue execution policy routes", () => {
beforeEach(() => {
beforeEach(async () => {
vi.resetModules();
vi.doUnmock("../services/index.js");
vi.doUnmock("../routes/issues.js");
@@ -263,6 +267,9 @@ describe("issue execution policy routes", () => {
};
});
mockAccessService.hasPermission.mockResolvedValue(false);
// Finish cold imports before a test configures its request-specific mocks.
// A timed-out import must not resume a request against the next test's mocks.
await loadAppModules();
});
it("reauthorizes a terminal verdict against the review policy held under the update lock", async () => {