57 lines
2.5 KiB
TypeScript
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();
|
|
}
|
|
);
|
|
});
|