chore(WP7-06): 合并候选环境验收基线
Dada P0-A isolated Windows CI / validate-and-package (push) Canceled after 0s
Dada P0-A isolated Windows CI / validate-and-package (push) Canceled after 0s
# Conflicts: # package.json
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { buildCoverageEvidence } from '../../scripts/lib/wp7-05-coverage.mjs';
|
||||
import { REQUIRED_COVERAGE_UNITS } from '../../scripts/lib/wp7-05-ui-gate.mjs';
|
||||
|
||||
const viewports = [
|
||||
{ width: 1920, height: 1080, deviceScaleFactor: 1, zoom: 100 },
|
||||
{ width: 1920, height: 1080, deviceScaleFactor: 1, zoom: 200 },
|
||||
];
|
||||
|
||||
function completeUnits() {
|
||||
return REQUIRED_COVERAGE_UNITS.map((page_id) => ({
|
||||
page_id,
|
||||
states: [{
|
||||
state: 'normal',
|
||||
screenshot_100pct: `ui/${page_id}/normal/100pct.png`,
|
||||
screenshot_200pct: `ui/${page_id}/normal/200pct.png`,
|
||||
trace: `ui/${page_id}/normal/trace.zip`,
|
||||
}],
|
||||
}));
|
||||
}
|
||||
|
||||
test('builds ordered, sanitized evidence for all 22 coverage units', () => {
|
||||
const evidence = buildCoverageEvidence({
|
||||
runId: 'wp7-05-red-001',
|
||||
candidateSha256: 'a'.repeat(64),
|
||||
coverageUnits: completeUnits(),
|
||||
viewports,
|
||||
});
|
||||
assert.equal(evidence.coverage_units.length, 22);
|
||||
assert.equal(evidence.coverage_units[0].page_id, 'support-gate');
|
||||
assert.equal(evidence.candidate_sha256, 'A'.repeat(64));
|
||||
});
|
||||
|
||||
test('rejects absolute evidence paths and incomplete page state', () => {
|
||||
const units = completeUnits();
|
||||
units[0].states[0].trace = 'C:\\secret\\trace.zip';
|
||||
assert.throws(() => buildCoverageEvidence({
|
||||
runId: 'wp7-05-red-001', candidateSha256: 'a'.repeat(64), coverageUnits: units, viewports,
|
||||
}), /WP7_05_UNSAFE_TRACE/);
|
||||
});
|
||||
@@ -0,0 +1,47 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
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: [] });
|
||||
assert.equal(result.status, 'externally_blocked');
|
||||
assert.equal(result.code, 'coverage_units_incomplete');
|
||||
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',
|
||||
evidence: null,
|
||||
dependencies: { 'TASK-WP7-03': 'externally_blocked' },
|
||||
});
|
||||
assert.equal(result.status, 'externally_blocked');
|
||||
assert.equal(result.code, 'candidate_record_missing');
|
||||
});
|
||||
Reference in New Issue
Block a user