import type { Page } from "@playwright/test"; import type { Feature } from "@prisma/client"; import type { AppFlags } from "@calcom/features/flags/config"; import { prisma } from "@calcom/prisma"; type FeatureSlugs = keyof AppFlags; export const createFeatureFixture = (page: Page) => { const store = { features: [], page } as { features: Feature[]; page: typeof page }; let initalFeatures: Feature[] = []; // IIF to add all feautres to store on creation return { init: async () => { const features = await prisma.feature.findMany(); store.features = features; initalFeatures = features; return features; }, getAll: () => store.features, get: (slug: FeatureSlugs) => store.features.find((b) => b.slug === slug), deleteAll: async () => { await prisma.feature.deleteMany({ where: { slug: { in: store.features.map((feature) => feature.slug) } }, }); store.features = []; }, delete: async (slug: FeatureSlugs) => { await prisma.feature.delete({ where: { slug } }); store.features = store.features.filter((b) => b.slug !== slug); }, toggleFeature: async (slug: FeatureSlugs) => { const feature = store.features.find((b) => b.slug === slug); if (feature) { const enabled = !feature.enabled; await prisma.feature.update({ where: { slug }, data: { enabled } }); store.features = store.features.map((b) => (b.slug === slug ? { ...b, enabled } : b)); } }, set: async (slug: FeatureSlugs, enabled: boolean) => { const feature = store.features.find((b) => b.slug === slug); if (feature) { store.features = store.features.map((b) => (b.slug === slug ? { ...b, enabled } : b)); await prisma.feature.update({ where: { slug }, data: { enabled } }); } }, reset: () => (store.features = initalFeatures), }; };