27 lines
1.2 KiB
JavaScript
27 lines
1.2 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import path from 'node:path';
|
|
import {artifact, prepareData, projectDir, read, validateInputs} from './data.mjs';
|
|
|
|
const project = read(path.join(projectDir, 'project.json'));
|
|
const cuts = artifact('07-cuts').payload.cuts;
|
|
const images = artifact('11-images').payload.result.frames;
|
|
const scenes = artifact('08-scenes').payload;
|
|
validateInputs(project, cuts, images, scenes);
|
|
const data = prepareData();
|
|
assert.equal(data.clips.reduce((n, c) => n + c.frames, 0), 5528);
|
|
for (const c of data.clips.filter((c) => c.boxes)) for (const box of c.boxes) {
|
|
assert(box[1] >= 660 && box[2] < 430, `${c.id}: guide pixels confused with droplet body`);
|
|
}
|
|
for (const mutate of [
|
|
(p, c, i) => {p.reviews.find((r) => r.review_id === 'scenes').decision = 'pending';},
|
|
(p, c, i) => {i.pop();},
|
|
(p, c, i) => {i[0].media.verified = false;},
|
|
(p, c, i) => {c[1].start_ms += 20;},
|
|
(p, c, i) => {i.find((f) => f.frame_id === 'c02-start').media.path = 'wrong.png';},
|
|
]) {
|
|
const [p, c, i] = structuredClone([project, cuts, images]);
|
|
mutate(p, c, i);
|
|
assert.throws(() => validateInputs(p, c, i, scenes));
|
|
}
|
|
console.log('Actual inputs and failure checks passed: missing approval/frame, unverified media, timing gap and discontinuity.');
|