51 lines
1.9 KiB
TypeScript
51 lines
1.9 KiB
TypeScript
|
|
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),
|
||
|
|
};
|
||
|
|
};
|