repo_description: Scheduling infrastructure for absolutely everyone.
repo_topics: next-auth nextjs open-source postgresql prisma t3-stack tailwindcss trpc turborepo typescript zod
code: import { defineWorkspace } from "vitest/config";
  
  // Vitest 4.0 no longer allows custom CLI flags, so we use environment variables instead
  // eslint-disable-next-line turbo/no-undeclared-env-vars
  const packagedEmbedTestsOnly = process.env.VITEST_MODE === "packaged-embed";
  // eslint-disable-next-line turbo/no-undeclared-env-vars
  const timeZoneDependentTestsOnly = process.env.VITEST_MODE === "timezone";
  // eslint-disable-next-line turbo/no-undeclared-env-vars
  const integrationTestsOnly = process.env.VITEST_MODE === "integration";
  // eslint-disable-next-line turbo/no-undeclared-env-vars
  const envTZ = process.env.TZ;
  if (timeZoneDependentTestsOnly && !envTZ) {
    throw new Error("TZ environment variable is not set");
  }
  
  // Use pool: "forks" to prevent "Closing rpc while fetch was pending" errors.
  const pool = "forks" as const;
  
  const workspaces = packagedEmbedTestsOnly
    ? [
        {
          test: {
            name: "PackagedEmbedTests",
            include: ["packages/embeds/**/packaged/**/*.{test,spec}.{ts,js}"],
            environment: "jsdom",
            pool,
          },
        },
      ]
    : integrationTestsOnly
      ? [
          {
            test: {
              name: `IntegrationTests`,
              include: ["packages/**/*.integration-test.ts", "apps/**/*.integration-test.ts"],
              exclude: ["**/node_modules/**/*", "packages/embeds/**/*"],
              setupFiles: ["packages/testing/src/setupVitest.ts"],
              pool,
            },
          },
        ]
      : // It doesn't seem to be possible to fake timezone per test, so we rerun the entire suite with different TZ. See https://github.com/vitest-dev/vitest/issues/1575#issuecomment-1439286286
        timeZoneDependentTestsOnly
        ? [
            {
              test: {
                name: `TimezoneDependentTests:${envTZ}`,
                include: ["packages/**/*.timezone.test.ts", "apps/**/*.timezone.test.ts"],
                // TODO: Ignore the api until tests are fixed
                exclude: ["**/node_modules/**/*", "packages/embeds/**/*"],
                setupFiles: ["packages/testing/src/setupVitest.ts"],
                pool,
              },
            },
          ]
        : [
            {
              test: {
                include: ["packages/**/*.{test,spec}.{ts,js}", "apps/**/*.{test,spec}.{ts,js}"],
                exclude: [
                  "**/node_modules/**/*",
                  "**/.next/**/*",
                  "packages/embeds/**/*",
                  "packages/lib/hooks/**/*",
                  "packages/platform/**/*",
                  "apps/api/v2/**/*",
                ],
                name: "@calcom/lib",
                setupFiles: ["packages/testing/src/setupVitest.ts"],
                pool,
              },
              resolve: {
                alias: {
                  "@lib": new URL("./apps/web/lib", import.meta.url).pathname,
                  "@server": new URL("./apps/web/server", import.meta.url).pathname,
                  "@components": new URL("./apps/web/components", import.meta.url).pathname,
                  "@pages": new URL("./apps/web/pages", import.meta.url).pathname,
                  "~": new URL("./apps/web/modules", import.meta.url).pathname,
                },
              },
            },
            {
              test: {
                globals: true,
                name: "@calcom/features",
                include: ["packages/features/**/*.{test,spec}.tsx"],
                exclude: ["packages/features/form-builder/**/*", "packages/features/bookings/**/*"],
                environment: "jsdom",
                setupFiles: ["setupVitest.ts", "packages/ui/components/test-setup.tsx"],
                pool,
              },
            },
  
            {
              test: {
                name: "@calcom/closecom",
                include: ["packages/app-store/closecom/**/*.{test,spec}.{ts,js}"],
                environment: "jsdom",
                setupFiles: ["packages/app-store/closecom/test/globals.ts"],
                pool,
              },
            },
            {
              test: {
                globals: true,
                name: "@calcom/app-store-core",
                include: ["packages/app-store/*.{test,spec}.[jt]s?(x)"],
                exclude: ["packages/app-store/delegationCredential.test.ts"],
                environment: "jsdom",
                setupFiles: ["packages/ui/components/test-setup.tsx"],
                pool,
              },
            },
            {
              test: {
                globals: true,
                name: "@calcom/app-store-delegation-credential",
                include: ["packages/app-store/delegationCredential.test.ts"],
                environment: "node",
                setupFiles: ["packages/testing/src/setupVitest.ts"],
                pool,
              },
            },
            {
              test: {
                globals: true,
                name: "@calcom/ui",
                include: ["packages/ui/components/**/*.{test,spec}.[jt]s?(x)"],
                environment: "jsdom",
                setupFiles: ["packages/ui/components/test-setup.tsx"],
                pool,
              },
            },
            {
              test: {
                globals: true,
                name: "@calcom/features/form-builder",
                include: ["packages/features/form-builder/**/*.{test,spec}.[jt]sx"],
                environment: "jsdom",
                setupFiles: ["packages/ui/components/test-setup.tsx"],
                pool,
              },
            },
            {
              test: {
                globals: true,
                name: "@calcom/features/bookings",
                include: ["packages/features/bookings/**/*.{test,spec}.[jt]sx"],
                environment: "jsdom",
                setupFiles: ["packages/ui/components/test-setup.tsx"],
                pool,
              },
            },
            {
              test: {
                globals: true,
                name: "@calcom/web/components",
                include: ["apps/web/components/**/*.{test,spec}.[jt]sx"],
                environment: "jsdom",
                setupFiles: ["packages/ui/components/test-setup.tsx"],
                pool,
              },
            },
            {
              test: {
                globals: true,
                name: "EventTypeAppCardInterface components",
                include: ["packages/app-store/_components/**/*.{test,spec}.[jt]s?(x)"],
                environment: "jsdom",
                setupFiles: ["packages/app-store/test-setup.ts"],
                pool,
              },
            },
            {
              test: {
                name: "@calcom/packages/lib/hooks",
                include: ["packages/lib/hooks/**/*.{test,spec}.{ts,js}"],
                environment: "jsdom",
                setupFiles: [],
                pool,
              },
            },
            {
              test: {
                globals: true,
                environment: "jsdom",
                name: "@calcom/web/modules/views",
                include: ["apps/web/modules/**/*.{test,spec}.tsx"],
                setupFiles: ["apps/web/modules/test-setup.ts"],
                pool,
              },
            },
  
            {
              test: {
                globals: true,
                environment: "jsdom",
                name: "@calcom/embeds",
                include: ["packages/embeds/**/*.{test,spec}.{ts,js}"],
                exclude: ["packages/embeds/**/packaged/**/*.{test,spec}.{ts,js}"],
                pool,
              },
            },
          ];
  
  export default defineWorkspace(workspaces);
  