2
0
Files
2024-08-09 00:39:27 +02:00

69 lines
1.8 KiB
TypeScript

import type { Page } from "@playwright/test";
import type { Team } from "@prisma/client";
import { prisma } from "@calcom/prisma";
import { teamMetadataSchema } from "@calcom/prisma/zod-utils";
const getRandomSlug = () => `org-${Math.random().toString(36).substring(7)}`;
// creates a user fixture instance and stores the collection
export const createOrgsFixture = (page: Page) => {
const store = { orgs: [], page } as { orgs: Team[]; page: typeof page };
return {
create: async (opts: { name: string; slug?: string; requestedSlug?: string; isPrivate?: boolean }) => {
const org = await createOrgInDb({
name: opts.name,
slug: opts.slug || getRandomSlug(),
requestedSlug: opts.requestedSlug,
isPrivate: opts.isPrivate,
});
const orgWithMetadata = {
...org,
metadata: teamMetadataSchema.parse(org.metadata),
};
store.orgs.push(orgWithMetadata);
return orgWithMetadata;
},
get: () => store.orgs,
deleteAll: async () => {
await prisma.team.deleteMany({ where: { id: { in: store.orgs.map((org) => org.id) } } });
store.orgs = [];
},
delete: async (id: number) => {
await prisma.team.delete({ where: { id } });
store.orgs = store.orgs.filter((b) => b.id !== id);
},
};
};
export async function createOrgInDb({
name,
slug,
requestedSlug,
isPrivate,
}: {
name: string;
slug: string | null;
requestedSlug?: string;
isPrivate?: boolean;
}) {
return await prisma.team.create({
data: {
name: name,
slug: slug,
isOrganization: true,
isPrivate: isPrivate,
metadata: {
...(requestedSlug
? {
requestedSlug,
}
: null),
},
},
include: {
organizationSettings: true,
},
});
}