From e0e101ef284ca6eee3d4d1ac54fd5b13f7d62a02 Mon Sep 17 00:00:00 2001 From: suyx Date: Tue, 4 Aug 2026 16:59:31 +0800 Subject: [PATCH] fix: align WP7-05 candidate record schema --- scripts/lib/wp7-05-ui-gate.mjs | 6 +++--- tests/package/wp7-05-ui-gate.test.mjs | 20 +++++++++++++++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/scripts/lib/wp7-05-ui-gate.mjs b/scripts/lib/wp7-05-ui-gate.mjs index 52c2ad3..9d61fa3 100644 --- a/scripts/lib/wp7-05-ui-gate.mjs +++ b/scripts/lib/wp7-05-ui-gate.mjs @@ -24,11 +24,11 @@ export function loadCandidateRecord(path) { if (!Array.isArray(record.browsers) || record.browsers.length !== 2) { return blocked('candidate_browser_record_incomplete'); } - const names = new Set(record.browsers.map((browser) => browser.name)); - if (names.size !== 2 || !names.has('Chrome') || !names.has('Edge')) { + const brands = new Set(record.browsers.map((browser) => browser.brand)); + if (brands.size !== 2 || !brands.has('Google Chrome') || !brands.has('Microsoft Edge')) { return blocked('candidate_browser_pair_invalid'); } - if (record.windows?.build == null || !record.artifact?.sha256 || !record.fixed_port) { + if (record.windows?.build == null || !record.candidate_package?.sha256 || !record.candidate_package?.fixed_port) { return blocked('candidate_identity_incomplete'); } if (record.browsers.some((browser) => !browser.full_version || !browser.major)) { diff --git a/tests/package/wp7-05-ui-gate.test.mjs b/tests/package/wp7-05-ui-gate.test.mjs index 4c3f753..694f6ff 100644 --- a/tests/package/wp7-05-ui-gate.test.mjs +++ b/tests/package/wp7-05-ui-gate.test.mjs @@ -1,6 +1,24 @@ import test from 'node:test'; import assert from 'node:assert/strict'; -import { validateCoverageEvidence, runWp705Gate, REQUIRED_COVERAGE_UNITS } from '../../scripts/lib/wp7-05-ui-gate.mjs'; +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import { loadCandidateRecord, validateCoverageEvidence, runWp705Gate, REQUIRED_COVERAGE_UNITS } from '../../scripts/lib/wp7-05-ui-gate.mjs'; + +test('WP7-05 accepts the WP7-01 candidate record schema', () => { + const directory = fs.mkdtempSync(path.join(os.tmpdir(), 'wp7-05-')); + const file = path.join(directory, 'release-candidate.json'); + fs.writeFileSync(file, JSON.stringify({ + browsers: [ + { brand: 'Google Chrome', full_version: '150.0.0', major: 150 }, + { brand: 'Microsoft Edge', full_version: '151.0.0', major: 151 }, + ], + windows: { build: '26200.8875' }, + candidate_package: { fixed_port: 43121, sha256: 'A'.repeat(64) }, + })); + assert.equal(loadCandidateRecord(file).status, 'ready'); + fs.rmSync(directory, { recursive: true, force: true }); +}); test('WP7-05 requires all 22 coverage units and both exact candidate viewports', () => { const result = validateCoverageEvidence({ coverage_units: [], viewports: [] });