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

57 lines
2.5 KiB
TypeScript

import { setupAuthenticatedEnvironment } from "@internal/run-engine/tests";
import { PostgresRunStore } from "@internal/run-store";
import { containerTest } from "@internal/testcontainers";
import { BatchId } from "@trigger.dev/core/v3/isomorphic";
import { describe, expect, vi } from "vitest";
import { findBatchRunIdForUser } from "~/v3/services/batchRunAccess.server";
vi.setConfig({ testTimeout: 60_000 });
const rand = () => Math.random().toString(36).slice(2, 10);
// The batch-resume route was previously unauthenticated. This is the org-scoped
// ownership gate: a user may only resolve a batch in an org they belong to.
describe("findBatchRunIdForUser", () => {
containerTest(
"resolves a batch for an org member, by friendlyId and by internal id",
async ({ prisma }) => {
const store = new PostgresRunStore({ prisma, readOnlyPrisma: prisma });
const env = await setupAuthenticatedEnvironment(prisma, "PRODUCTION");
const member = await prisma.user.create({
data: { email: `member_${rand()}@example.com`, authenticationMethod: "MAGIC_LINK" },
});
await prisma.orgMember.create({
data: { organizationId: env.organizationId, userId: member.id },
});
const batchId = BatchId.generate();
const batch = await prisma.batchTaskRun.create({
data: { id: batchId.id, friendlyId: batchId.friendlyId, runtimeEnvironmentId: env.id },
});
expect(await findBatchRunIdForUser(prisma, store, batch.friendlyId, member.id)).toBe(
batch.id
);
expect(await findBatchRunIdForUser(prisma, store, batch.id, member.id)).toBe(batch.id);
}
);
containerTest(
"returns null for a user who is not a member of the batch's org",
async ({ prisma }) => {
const store = new PostgresRunStore({ prisma, readOnlyPrisma: prisma });
const env = await setupAuthenticatedEnvironment(prisma, "PRODUCTION");
const batchId = BatchId.generate();
const batch = await prisma.batchTaskRun.create({
data: { id: batchId.id, friendlyId: batchId.friendlyId, runtimeEnvironmentId: env.id },
});
// A user who exists but isn't a member of the org.
const stranger = await prisma.user.create({
data: { email: `stranger_${rand()}@example.com`, authenticationMethod: "MAGIC_LINK" },
});
expect(await findBatchRunIdForUser(prisma, store, batch.friendlyId, stranger.id)).toBeNull();
expect(await findBatchRunIdForUser(prisma, store, batch.id, stranger.id)).toBeNull();
}
);
});