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

148 lines
4.7 KiB
TypeScript

import { describe, expect, vi } from "vitest";
vi.mock("~/db.server", () => ({
prisma: {},
$replica: {},
$transaction: async (
prismaClient: {
$transaction: (fn: (tx: unknown) => Promise<unknown>) => Promise<unknown>;
},
nameOrFn: string | ((tx: unknown) => Promise<unknown>),
fnOrOptions?: ((tx: unknown) => Promise<unknown>) | unknown
) => {
const fn =
typeof nameOrFn === "string" ? (fnOrOptions as (tx: unknown) => Promise<unknown>) : nameOrFn;
return prismaClient.$transaction(fn);
},
}));
import { postgresTest } from "@internal/testcontainers";
import { loadEnvironmentVariablesEnvironments } from "~/presenters/v3/environmentVariablesEnvironments.server";
import {
createRuntimeEnvironment,
createTestOrgProjectWithMember,
createTestUser,
} from "./fixtures/environmentVariablesFixtures";
vi.setConfig({ testTimeout: 60_000 });
describe("loadEnvironmentVariablesEnvironments", () => {
postgresTest("returns environments for a project member", async ({ prisma }) => {
const { user, organization, project } = await createTestOrgProjectWithMember(prisma);
const production = await createRuntimeEnvironment(prisma, {
projectId: project.id,
organizationId: organization.id,
type: "PRODUCTION",
});
const result = await loadEnvironmentVariablesEnvironments(prisma, {
userId: user.id,
projectId: project.id,
});
expect(result.environments.map((environment) => environment.id)).toContain(production.id);
expect(result.environments.every((environment) => typeof environment.id === "string")).toBe(
true
);
});
postgresTest("rejects users who are not project members", async ({ prisma }) => {
const { project } = await createTestOrgProjectWithMember(prisma);
const outsider = await createTestUser(prisma);
await expect(
loadEnvironmentVariablesEnvironments(prisma, {
userId: outsider.id,
projectId: project.id,
})
).rejects.toThrow("Project not found");
});
postgresTest("filters shared, personal, and inaccessible environments", async ({ prisma }) => {
const { user, organization, project, orgMember } = await createTestOrgProjectWithMember(prisma);
const otherUser = await createTestUser(prisma);
const otherOrgMember = await prisma.orgMember.create({
data: {
organizationId: organization.id,
userId: otherUser.id,
role: "MEMBER",
},
});
const sharedProduction = await createRuntimeEnvironment(prisma, {
projectId: project.id,
organizationId: organization.id,
type: "PRODUCTION",
});
const currentUserDev = await createRuntimeEnvironment(prisma, {
projectId: project.id,
organizationId: organization.id,
type: "DEVELOPMENT",
orgMemberId: orgMember.id,
});
const otherUserDev = await createRuntimeEnvironment(prisma, {
projectId: project.id,
organizationId: organization.id,
type: "DEVELOPMENT",
orgMemberId: otherOrgMember.id,
});
const orphanedDev = await createRuntimeEnvironment(prisma, {
projectId: project.id,
organizationId: organization.id,
type: "DEVELOPMENT",
orgMemberId: null,
});
const result = await loadEnvironmentVariablesEnvironments(prisma, {
userId: user.id,
projectId: project.id,
});
const environmentIds = result.environments.map((environment) => environment.id);
expect(environmentIds).toContain(sharedProduction.id);
expect(environmentIds).toContain(currentUserDev.id);
expect(environmentIds).not.toContain(otherUserDev.id);
expect(environmentIds).not.toContain(orphanedDev.id);
});
postgresTest("returns hasStaging true when a staging environment exists", async ({ prisma }) => {
const { user, organization, project } = await createTestOrgProjectWithMember(prisma);
await createRuntimeEnvironment(prisma, {
projectId: project.id,
organizationId: organization.id,
type: "STAGING",
});
const result = await loadEnvironmentVariablesEnvironments(prisma, {
userId: user.id,
projectId: project.id,
});
expect(result.hasStaging).toBe(true);
});
postgresTest(
"returns hasStaging false when no staging environment exists",
async ({ prisma }) => {
const { user, organization, project } = await createTestOrgProjectWithMember(prisma);
await createRuntimeEnvironment(prisma, {
projectId: project.id,
organizationId: organization.id,
type: "PRODUCTION",
});
const result = await loadEnvironmentVariablesEnvironments(prisma, {
userId: user.id,
projectId: project.id,
});
expect(result.hasStaging).toBe(false);
}
);
});