import { describe, expect, it } from "vitest"; import { validateFieldEvidenceInput } from "../../scripts/lib/field-vitals-evidence.mjs"; const input = { schemaVersion: 1, environment: "production", releaseId: "release-2026-06-29", source: { system: "privacy-approved-rum-export", exportId: "export-2026-06-29", }, privacy: { approved: true, approvalRef: "PRIVACY-42", }, window: { start: "2026-06-01T00:00:00Z", end: "2026-06-29T00:00:00Z", }, thresholdDecision: { status: "approved", minimumEligibleSamples: 25, owner: "performance-owner", reviewedAt: "2026-06-30T00:00:00Z", evidenceRef: "PERF-BASELINE-7", }, samples: [ { timestamp: "2026-06-20T00:00:00Z", consent: true, releaseId: "release-2026-06-29", routeId: "APP_HOME", lcpMs: 1200, cls: 0.01, inpMs: 80, }, ], }; describe("field Web Vitals evidence input", () => { it("accepts reviewed, coherent 28-day production metadata", () => { expect( validateFieldEvidenceInput( input, "25", new Date("2026-07-01T00:00:00Z"), ), ).toMatchObject({ failures: [], minimumEligibleSamples: 25, passed: true, }); }); it("rejects a threshold that does not match the owner decision", () => { expect( validateFieldEvidenceInput( input, "10", new Date("2026-07-01T00:00:00Z"), ), ).toMatchObject({ failures: [ "MIN_ELIGIBLE_SAMPLES: does not match the approved threshold decision", ], passed: false, }); }); it("rejects local, unapproved, malformed, or impossible measurements", () => { const invalid = { ...input, environment: "local", releaseId: "local-release", privacy: { approved: false, approvalRef: "" }, window: { ...input.window, end: "2026-06-28T00:00:00Z" }, samples: [{ ...input.samples[0], lcpMs: -1 }], }; const validation = validateFieldEvidenceInput( invalid, "-1", new Date("2026-07-01T00:00:00Z"), ); expect(validation.passed).toBe(false); expect(validation.failures.join("\n")).toContain("environment"); expect(validation.failures.join("\n")).toContain("releaseId"); expect(validation.failures.join("\n")).toContain("privacy"); expect(validation.failures.join("\n")).toContain("lcpMs"); expect(validation.failures.join("\n")).toContain( "MIN_ELIGIBLE_SAMPLES: must be a positive integer", ); }); });