mirror of
https://github.com/nexu-io/open-design.git
synced 2026-09-20 06:15:06 +08:00
d5d9a761ca
* docs(daemon): add agent guidance * refactor(daemon): organize source modules * chore(guard): update daemon design system import * refactor(daemon): shorten domain module filenames * fix(daemon): correct pitch-deck manifest path after test move The pitch-deck manifest test moved one directory deeper into tests/design-systems/ but kept the old '../../..' repoRoot, resolving to apps/ instead of the repo root and failing to find plugins/_official/examples/html-ppt-pitch-deck/open-design.json. * fix(daemon): retarget media model verifier Generated-By: looper 0.9.10 (runner=fixer, agent=codex) * docs(daemon): refresh AGENTS legacy paths after module reorg * test(e2e): allow manual edit P0 CI scaling Generated-By: looper 0.9.10 (runner=fixer, agent=codex) * test(daemon): fix frontmatter import path Generated-By: looper 0.9.10 (runner=fixer, agent=opencode) * fix(web): avoid replaying legacy terminal runs Generated-By: looper 0.9.10 (runner=fixer, agent=opencode) * fix(web): preserve legacy terminal replay recovery Generated-By: looper 0.9.10 (runner=fixer, agent=opencode) * fix(daemon): correct live-artifacts test data root * fix(daemon): cover moved route registrars in context contract Generated-By: looper 0.9.10 (runner=fixer, agent=opencode) * fix(daemon): restore moved runtime artifact imports Generated-By: looper 0.9.10 (runner=fixer, agent=opencode)
66 lines
2.4 KiB
TypeScript
66 lines
2.4 KiB
TypeScript
import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
|
|
import { tmpdir } from 'node:os';
|
|
import path from 'node:path';
|
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
|
|
import { generateMedia } from '../../src/media/index.js';
|
|
|
|
describe('hyperframes-html media renderer preflight', () => {
|
|
let root: string;
|
|
let projectRoot: string;
|
|
let projectsRoot: string;
|
|
const originalAllowStubs = process.env.OD_MEDIA_ALLOW_STUBS;
|
|
|
|
beforeEach(async () => {
|
|
root = await mkdtemp(path.join(tmpdir(), 'od-hyperframes-media-'));
|
|
projectRoot = path.join(root, 'project-root');
|
|
projectsRoot = path.join(projectRoot, '.od', 'projects');
|
|
await mkdir(path.join(projectsRoot, 'project-1'), { recursive: true });
|
|
process.env.OD_MEDIA_ALLOW_STUBS = '1';
|
|
});
|
|
|
|
afterEach(async () => {
|
|
if (originalAllowStubs == null) {
|
|
delete process.env.OD_MEDIA_ALLOW_STUBS;
|
|
} else {
|
|
process.env.OD_MEDIA_ALLOW_STUBS = originalAllowStubs;
|
|
}
|
|
await rm(root, { recursive: true, force: true });
|
|
});
|
|
|
|
it('rejects incomplete composition dirs instead of falling back to a stub', async () => {
|
|
const compRel = '.hyperframes-cache/incomplete';
|
|
const compDir = path.join(projectsRoot, 'project-1', compRel);
|
|
await mkdir(compDir, { recursive: true });
|
|
await writeFile(path.join(compDir, 'index.html'), '<!doctype html><div id="root"></div>', 'utf8');
|
|
|
|
await expect(generateMedia({
|
|
projectRoot,
|
|
projectsRoot,
|
|
projectId: 'project-1',
|
|
surface: 'video',
|
|
model: 'hyperframes-html',
|
|
output: 'test.mp4',
|
|
compositionDir: compRel,
|
|
})).rejects.toThrow(/compositionDir is missing hyperframes\.json/);
|
|
});
|
|
|
|
it('requires meta.json before spawning the local renderer', async () => {
|
|
const compRel = '.hyperframes-cache/no-meta';
|
|
const compDir = path.join(projectsRoot, 'project-1', compRel);
|
|
await mkdir(compDir, { recursive: true });
|
|
await writeFile(path.join(compDir, 'hyperframes.json'), '{}', 'utf8');
|
|
await writeFile(path.join(compDir, 'index.html'), '<!doctype html><div id="root"></div>', 'utf8');
|
|
|
|
await expect(generateMedia({
|
|
projectRoot,
|
|
projectsRoot,
|
|
projectId: 'project-1',
|
|
surface: 'video',
|
|
model: 'hyperframes-html',
|
|
output: 'test.mp4',
|
|
compositionDir: compRel,
|
|
})).rejects.toThrow(/compositionDir is missing meta\.json/);
|
|
});
|
|
});
|