44 lines
1.8 KiB
JavaScript
44 lines
1.8 KiB
JavaScript
import { existsSync, readFileSync } from "node:fs";
|
|
import { join } from "node:path";
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
const root = process.cwd();
|
|
const quarantineManifestPath = join(root, "tests/e2e/quarantine/quarantine.json");
|
|
|
|
function readQuarantineManifest() {
|
|
return JSON.parse(readFileSync(quarantineManifestPath, "utf8"));
|
|
}
|
|
|
|
describe("Playwright E2E quarantine", () => {
|
|
it("keeps quarantined specs out of the active E2E tree while replacements are introduced", () => {
|
|
const manifest = readQuarantineManifest();
|
|
|
|
expect(Array.isArray(manifest)).toBe(true);
|
|
expect(manifest.length).toBeGreaterThan(0);
|
|
|
|
for (const entry of manifest) {
|
|
expect(entry.originalPath).toMatch(/^tests\/e2e\/.+\.spec\.(?:js|ts)$/u);
|
|
expect(entry.quarantinePath).toMatch(/^tests\/e2e\/quarantine\/.+\.spec\.(?:js|ts)$/u);
|
|
expect(entry.reason).toEqual(expect.any(String));
|
|
expect(entry.removalCriteria).toEqual(expect.any(String));
|
|
expect(entry.replacementCoverage).toEqual(expect.arrayContaining([expect.stringMatching(/^tests\//u)]));
|
|
expect(existsSync(join(root, entry.originalPath))).toBe(false);
|
|
expect(existsSync(join(root, entry.quarantinePath))).toBe(true);
|
|
}
|
|
});
|
|
|
|
it("ignores quarantined specs in the active Playwright E2E config", () => {
|
|
const source = readFileSync(join(root, "playwright.config.ts"), "utf8");
|
|
|
|
expect(source).toContain('"**/quarantine/**"');
|
|
});
|
|
|
|
it("keeps component coverage wired into local and CI gates", () => {
|
|
const packageJson = JSON.parse(readFileSync(join(root, "package.json"), "utf8"));
|
|
const workflowSource = readFileSync(join(root, ".github/workflows/tests.yml"), "utf8");
|
|
|
|
expect(packageJson.scripts["test:all"]).toContain("npm run test:ct:pr");
|
|
expect(workflowSource).toContain('npm run test:ct -- --project="$MATRIX_PROJECT"');
|
|
});
|
|
});
|