Files
calendar/apps/web/playwright/fixtures/features.ts
T
luzpazandGitHub 1848cd55b1 fix: fix playwright typos (#19794)
Found via `codespell -q 3 -S "*.svg,./apps/web/public/static/locales,./packages/app-store/stripepayment/lib/currencyOptions.ts,./packages/lib/freeEmailDomainCheck/freeEmailDomains.ts" -L afterall,atleast,datea,fo,incase,ist,nam,noone,notin,optionel,perview,pris,reccuring`
2025-03-10 07:39:58 +00:00

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 features 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),
};
};