test: cover diagram cleanup collision and receipt boundaries
Build and publish Eldorado documentation / build (pull_request) Successful in 29s
Build and publish Eldorado documentation / build (pull_request) Successful in 29s
This commit is contained in:
1 parent
9ad62a2ed6
commit
ff7e19b558
1 file changed
+29
-1
+29
-1
@@ -1,8 +1,36 @@
|
|||||||
import {test} from 'node:test';
|
import {test} from 'node:test';
|
||||||
import {createHash} from 'node:crypto';
|
import {createHash} from 'node:crypto';
|
||||||
import assert from 'node:assert/strict';
|
import assert from 'node:assert/strict';
|
||||||
import {readFileSync, existsSync} from 'node:fs';
|
import {readFileSync, existsSync, mkdtempSync, mkdirSync, writeFileSync, symlinkSync, unlinkSync, rmSync, readdirSync} from 'node:fs';
|
||||||
|
import {tmpdir} from 'node:os';
|
||||||
|
import {join, resolve} from 'node:path';
|
||||||
|
import {spawnSync} from 'node:child_process';
|
||||||
const read = p => readFileSync(p, 'utf8');
|
const read = p => readFileSync(p, 'utf8');
|
||||||
|
test('real build removes stale diagrams, keeps receipts private and rejects collisions', () => {
|
||||||
|
const root = mkdtempSync(join(tmpdir(), 'eldorado-diagrams-'));
|
||||||
|
try {
|
||||||
|
mkdirSync(join(root,'diagrams'));
|
||||||
|
symlinkSync(resolve('vendor'),join(root,'vendor'),'dir');
|
||||||
|
const spec = JSON.parse(read('diagrams/organization-structure.architecture.json'));
|
||||||
|
const writeSpec = name => {
|
||||||
|
spec.meta.output = `static/diagrams/${name}/index.html`;
|
||||||
|
writeFileSync(join(root,`diagrams/${name}.architecture.json`),JSON.stringify(spec));
|
||||||
|
};
|
||||||
|
const build = () => spawnSync(process.execPath,[resolve('scripts/build-diagrams.mjs')],{cwd:root,encoding:'utf8'});
|
||||||
|
writeSpec('old');
|
||||||
|
let result = build(); assert.equal(result.status,0,result.stderr);
|
||||||
|
assert(existsSync(join(root,'static/diagrams/old/index.html')));
|
||||||
|
assert(!readdirSync(join(root,'static/diagrams'),{recursive:true}).some(p=>p.endsWith('.delivery.json')));
|
||||||
|
unlinkSync(join(root,'diagrams/old.architecture.json'));
|
||||||
|
writeSpec('new');
|
||||||
|
result=build(); assert.equal(result.status,0,result.stderr);
|
||||||
|
assert(!existsSync(join(root,'static/diagrams/old')));
|
||||||
|
assert(!existsSync(join(root,'static/diagrams/old.json')));
|
||||||
|
writeFileSync(join(root,'diagrams/new.workflow.json'),JSON.stringify(spec));
|
||||||
|
result=build(); assert.notEqual(result.status,0);
|
||||||
|
assert(result.stderr.includes('Duplicate diagram output'));
|
||||||
|
} finally {rmSync(root,{recursive:true,force:true});}
|
||||||
|
});
|
||||||
test('vendored source matches the reviewed upstream snapshot', () => {
|
test('vendored source matches the reviewed upstream snapshot', () => {
|
||||||
const checksums = JSON.parse(read('vendor/archify-checksums.json'));
|
const checksums = JSON.parse(read('vendor/archify-checksums.json'));
|
||||||
for (const [path, hash] of Object.entries(checksums)) {
|
for (const [path, hash] of Object.entries(checksums)) {
|
||||||
|
|||||||
Reference in new issue
Block a user