Build and publish Eldorado documentation / build (pull_request) Successful in 41s
39 lines
2.2 KiB
JavaScript
39 lines
2.2 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import {readFileSync, readdirSync} from 'node:fs';
|
|
import {runInNewContext} from 'node:vm';
|
|
const read = p => readFileSync(p, 'utf8');
|
|
|
|
export function verifyMeasurementPages() {
|
|
const manifest = JSON.parse(read('research/ai-adoption/measurement-migration.json'));
|
|
const {documents, exclusions} = JSON.parse(read('.cache/sidebar-coverage.json'));
|
|
const prefix = '/eldorado-v1/documentation';
|
|
const legacy = 'strategy/reference/measurement-contracts/index.html';
|
|
assert.equal(exclusions.filter(e => e.file === legacy).length, 1);
|
|
assert(!documents.some(d => d.id === 'reference/measurement-contracts'));
|
|
const search = readdirSync('build').filter(f => /^search-index.*\.json$/.test(f)).map(f => read(`build/${f}`)).join('\n');
|
|
assert(!search.includes('/strategy/reference/measurement-contracts/'));
|
|
const children = [...manifest.metrics.map(m => ({...m,slug:m.oldAnchor})),
|
|
{slug:'collection-and-safeguards',title:'Collection and safeguards'},
|
|
{slug:'synthetic-example',title:'Run the synthetic measurement example'},
|
|
];
|
|
for (const child of children) {
|
|
const route = `${prefix}/strategy/measurement/${child.slug}/`;
|
|
const doc = documents.filter(d => `${d.route}/` === route);
|
|
assert.equal(doc.length,1);
|
|
assert.equal(doc[0].id, `measurement/${child.slug}`);
|
|
const page = read(`build/strategy/measurement/${child.slug}/index.html`);
|
|
const canonical = [...page.matchAll(/<link\b[^>]*rel="canonical"[^>]*>/g)];
|
|
assert.equal(canonical.length,1);
|
|
assert(canonical[0][0].includes(`href="https://pages.apps.lego-cloud.eu${route}"`));
|
|
assert(search.includes(route), `Missing search route: ${route}`);
|
|
assert(!page.includes(`${prefix}/strategy/reference/measurement-contracts/`));
|
|
}
|
|
const script = read(`build/${legacy}`).match(/<script>([\s\S]*?)<\/script>/)[1];
|
|
for (const m of manifest.metrics) {
|
|
let destination;
|
|
runInNewContext(script,{window:{location:{hash:`#${m.oldAnchor}`,replace:url => {destination=url;}}}});
|
|
assert.equal(destination,`${prefix}${m.url}`);
|
|
}
|
|
console.log('PASS: 18 canonical Measurement children, exact IDs, search membership and 16 hash redirects; no legacy document/index duplication');
|
|
}
|