Ctrl K
ComunidadGuías…

scripts/testing/host-e2e.test.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { existsSync, readFileSync } from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";
import { describe, expect, it } from "vitest";

import viteConfig from "../../vite.config.ts";
import { E2E, HOST_E2E, hostE2eOnly, isPortableE2e, portableE2eFiles } from "./host-e2e.ts";

const ROOT = path.resolve(fileURLToPath(new URL("../..", import.meta.url)));
const INCLUDE = viteConfig.test?.include ?? [];
// A test, or a whole describe, that Linux skips: what it checks runs on the Windows and macOS shards or nowhere.
const SKIPPED_ON_LINUX = /process\.platform\s*===\s*"linux"\s*\?\s*(?:it|test|describe)\.skip\b|\.skipIf\(\s*process\.platform\s*===\s*"linux"\s*\)|\.runIf\(\s*process\.platform\s*===\s*"(?:darwin|win32)"\s*\)/;

describe("the e2e files every host runs", () => {
  it("are e2e files that exist", () => {
    for (const file of Object.keys(HOST_E2E)) {
      expect(E2E.test(file), file).toBe(true);
      expect(existsSync(path.join(ROOT, file)), file).toBe(true);
    }
  });

  it("include every e2e file with a test that Linux skips", () => {
    const missing = portableE2eFiles(ROOT, INCLUDE).filter((file) => SKIPPED_ON_LINUX.test(readFileSync(path.join(ROOT, file), "utf8")));
    expect(missing, "add these to HOST_E2E in scripts/testing/host-e2e.ts, with what they check that Linux cannot").toEqual([]);
  });

  it("recognises the ways a test is skipped on Linux", () => {
    for (const source of [
      `const itHost = process.platform === "linux" ? it.skip : it;`,
      `it.skipIf(process.platform === "linux")("mounts", () => {});`,
      `it.runIf(process.platform === "darwin")("speaks", () => {});`,
      `describe.runIf(process.platform === "win32")("PowerShell", () => {});`,
    ]) expect(SKIPPED_ON_LINUX.test(source), source).toBe(true);
    expect(SKIPPED_ON_LINUX.test(`it.skipIf(process.platform === "win32")("POSIX only", () => {});`)).toBe(false);
  });

  it("leave every other test file to every host", () => {
    expect(isPortableE2e("server/room-coordination.e2e.test.ts")).toBe(true);
    expect(isPortableE2e("server/shared-computers.e2e.test.ts")).toBe(false);
    expect(isPortableE2e("server/steer-queue.test.ts")).toBe(false);
    const portable = portableE2eFiles(ROOT, INCLUDE);
    expect(portable.length).toBeGreaterThan(100);
    expect(portable.every((file) => E2E.test(file) && !Object.hasOwn(HOST_E2E, file))).toBe(true);
  });

  it("apply only when CI asks for them", () => {
    expect(hostE2eOnly({ OMB_VITEST_E2E: "host" })).toBe(true);
    expect(hostE2eOnly({ OMB_VITEST_E2E: "all" })).toBe(false);
    expect(hostE2eOnly({})).toBe(false);
  });
});