From 8abf1397a6c262eaf81c1d0389dd3887087ae811 Mon Sep 17 00:00:00 2001 From: suyx Date: Tue, 4 Aug 2026 17:02:52 +0800 Subject: [PATCH] test: require WP7-05 state evidence --- scripts/lib/wp7-05-ui-gate.mjs | 5 +++++ tests/package/wp7-05-ui-gate.test.mjs | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/scripts/lib/wp7-05-ui-gate.mjs b/scripts/lib/wp7-05-ui-gate.mjs index 9d61fa3..3900f9f 100644 --- a/scripts/lib/wp7-05-ui-gate.mjs +++ b/scripts/lib/wp7-05-ui-gate.mjs @@ -47,6 +47,11 @@ export function validateCoverageEvidence(evidence) { const actual = new Set(evidence.coverage_units.map((unit) => unit.page_id)); const missing = REQUIRED_COVERAGE_UNITS.filter((unit) => !actual.has(unit)); if (missing.length) return blocked('coverage_units_incomplete', { missing }); + const missingStates = evidence.coverage_units + .filter((unit) => REQUIRED_COVERAGE_UNITS.includes(unit.page_id)) + .filter((unit) => !Array.isArray(unit.states) || unit.states.length === 0) + .map((unit) => unit.page_id); + if (missingStates.length) return blocked('coverage_states_incomplete', { missingStates }); const viewportKeys = new Set((evidence.viewports ?? []).map((viewport) => JSON.stringify(viewport))); const missingViewports = REQUIRED_VIEWPORTS.filter((viewport) => !viewportKeys.has(JSON.stringify(viewport))); if (missingViewports.length) return blocked('candidate_viewports_incomplete', { missingViewports }); diff --git a/tests/package/wp7-05-ui-gate.test.mjs b/tests/package/wp7-05-ui-gate.test.mjs index 694f6ff..6bf7731 100644 --- a/tests/package/wp7-05-ui-gate.test.mjs +++ b/tests/package/wp7-05-ui-gate.test.mjs @@ -27,6 +27,15 @@ test('WP7-05 requires all 22 coverage units and both exact candidate viewports', assert.equal(result.missing.length, REQUIRED_COVERAGE_UNITS.length); }); +test('WP7-05 requires state evidence for every listed coverage unit', () => { + const result = validateCoverageEvidence({ + coverage_units: REQUIRED_COVERAGE_UNITS.map((page_id) => ({ page_id, states: [] })), + viewports: [], + }); + assert.equal(result.code, 'coverage_states_incomplete'); + assert.equal(result.missingStates.length, REQUIRED_COVERAGE_UNITS.length); +}); + test('WP7-05 preserves upstream external blockers instead of declaring Green', () => { const result = runWp705Gate({ candidatePath: 'missing-release-candidate.json',