Files
triggerdotdev--trigger.dev/apps/webapp/test/apiWaitpointListPresenter.readroute.test.ts
2026-07-13 13:32:57 +08:00

117 lines
3.1 KiB
TypeScript

import { describe, expect, vi } from "vitest";
var dbClientHolder: any = undefined;
function setDbClient(client: any) {
dbClientHolder = client;
}
vi.mock("~/v3/services/baseService.server", async () => {
const { ServiceValidationError } = await import("~/v3/services/common.server");
return { ServiceValidationError };
});
vi.mock("~/db.server", async () => {
const { Prisma } = await import("@trigger.dev/database");
return {
Prisma,
sqlDatabaseSchema: Prisma.sql(["public"]),
get prisma() {
return dbClientHolder;
},
get $replica() {
return dbClientHolder;
},
};
});
import { postgresTest } from "@internal/testcontainers";
import type { PrismaClient } from "@trigger.dev/database";
import { ApiWaitpointListPresenter } from "~/presenters/v3/ApiWaitpointListPresenter.server";
vi.setConfig({ testTimeout: 120_000 });
const ENV_ID = "env0000000000000000t19";
const PROJ_ID = "proj00000000000000t19";
async function seedLegacyParents(prisma: PrismaClient, slug: string) {
const org = await prisma.organization.create({
data: { title: `org-${slug}`, slug: `org-${slug}` },
});
await prisma.project.create({
data: {
id: PROJ_ID,
name: `proj-${slug}`,
slug: `proj-${slug}`,
organizationId: org.id,
externalRef: `proj-${slug}`,
engine: "V2",
},
});
await prisma.runtimeEnvironment.create({
data: {
id: ENV_ID,
slug: `env-${slug}`,
type: "PRODUCTION",
projectId: PROJ_ID,
organizationId: org.id,
apiKey: `tr_prod_${slug}`,
pkApiKey: `pk_prod_${slug}`,
shortcode: `sc-${slug}`,
},
});
}
const baseEnv = {
id: ENV_ID,
type: "PRODUCTION" as const,
project: { id: PROJ_ID, engine: "V2" as const },
apiKey: "tr_prod_t19",
};
describe("ApiWaitpointListPresenter read-route threading", () => {
postgresTest(
"split enabled: waitpoint on NEW handle is returned via readRoute",
async ({ prisma }) => {
setDbClient(prisma);
await seedLegacyParents(prisma, "t19split");
await prisma.waitpoint.create({
data: {
id: "wp_t19_0000000000000000001",
friendlyId: "wpt_t19_001",
type: "MANUAL",
status: "PENDING",
idempotencyKey: "idem-t19-001",
userProvidedIdempotencyKey: false,
projectId: PROJ_ID,
environmentId: ENV_ID,
},
});
const presenter = new ApiWaitpointListPresenter(undefined, undefined, {
runOpsNew: prisma as any,
runOpsLegacyReplica: prisma as any,
splitEnabled: true,
});
const result = await presenter.call(baseEnv, {});
expect(result.data.length).toBeGreaterThan(0);
expect(result.data.some((t) => t.id === "wpt_t19_001")).toBe(true);
}
);
postgresTest(
"passthrough: no readRoute => _replica only, result empty (nothing seeded)",
async ({ prisma }) => {
setDbClient(prisma);
await seedLegacyParents(prisma, "t19pass");
const presenter = new ApiWaitpointListPresenter(prisma, prisma);
const result = await presenter.call(baseEnv, {});
expect(result.data).toEqual([]);
}
);
});