const test = require('node:test') const assert = require('node:assert/strict') const { validateRenderRequest, playbackRange } = require('./renderValidation.cjs') function scene(overrides = {}) { return { canvas: { width: 640, height: 360 }, duration: 2, fps: 30, layers: [ { keyframes: [ { time: 0, props: {} }, { time: 1, props: {} }, ], }, ], assets: [], ...overrides, } } test('accepts a normal render request', () => { const result = validateRenderRequest(scene(), { fps: 30, crf: 18, preset: 'fast' }) assert.equal(result.ok, true) assert.equal(result.options.totalFrames, 30) }) test('rejects invalid dimensions', () => { const result = validateRenderRequest(scene({ canvas: { width: 0, height: 360 } })) assert.equal(result.ok, false) assert.match(result.error, /canvas/) }) test('rejects invalid fps and frame count', () => { assert.equal(validateRenderRequest(scene(), { fps: 0 }).ok, false) assert.equal(validateRenderRequest(scene({ duration: 61 }), { fps: 60 }).ok, false) }) test('rejects invalid duration', () => { const result = validateRenderRequest(scene({ duration: 0 })) assert.equal(result.ok, false) assert.match(result.error, /duration/) }) test('rejects too many layers and keyframes', () => { const layers = Array.from({ length: 501 }, () => ({ keyframes: [] })) assert.equal(validateRenderRequest(scene({ layers })).ok, false) const keyframes = Array.from({ length: 5001 }, (_, i) => ({ time: i / 60, props: {} })) assert.equal(validateRenderRequest(scene({ layers: [{ keyframes }] })).ok, false) }) test('rejects invalid crf and preset', () => { assert.equal(validateRenderRequest(scene(), { crf: 52 }).ok, false) assert.equal(validateRenderRequest(scene(), { preset: 'turbo' }).ok, false) }) test('computes playback range from in/out or last keyframe', () => { assert.deepEqual(playbackRange(scene({ inTime: 0.25, outTime: 1.5 })), { start: 0.25, end: 1.5 }) assert.deepEqual(playbackRange(scene()), { start: 0, end: 1 }) })