test: cover adaptive asset materialization failures
This commit is contained in:
@@ -93,6 +93,43 @@ describe('approved asset publication closure', () => {
|
|||||||
await expect(verifyApprovedAssetSet(root)).resolves.toBeUndefined();
|
await expect(verifyApprovedAssetSet(root)).resolves.toBeUndefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('rejects an omitted adaptive soundtrack asset', async () => {
|
||||||
|
const root = await createScratchRepository();
|
||||||
|
const adaptiveAsset = Buffer.from('approved adaptive asset');
|
||||||
|
const adaptiveHash = createHash('sha256').update(adaptiveAsset).digest('hex');
|
||||||
|
await writeFile(join(root, 'content/public/asset-manifest.json'), JSON.stringify({ assets: [{
|
||||||
|
id: 'soundtrack-afterglow-opus', fileName: 'nightdrive-afterglow.opus', sha256: adaptiveHash,
|
||||||
|
}] }));
|
||||||
|
await writeFile(join(root, 'content/public/portfolio-content.json'), JSON.stringify({
|
||||||
|
projects: { selected: [{ assetIds: ['soundtrack-afterglow-opus'] }], additional: [] }, toolkit: [], metadata: {},
|
||||||
|
}));
|
||||||
|
await mkdir(join(root, 'inputs/prepared-assets'), { recursive: true });
|
||||||
|
await expect(verifyApprovedAssetSet(root)).rejects.toThrow(/missing prepared asset/i);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('rejects an altered adaptive soundtrack asset', async () => {
|
||||||
|
const root = await createScratchRepository();
|
||||||
|
await writeApprovedSet(root);
|
||||||
|
const adaptiveAsset = Buffer.from('approved adaptive asset');
|
||||||
|
const adaptiveHash = createHash('sha256').update(adaptiveAsset).digest('hex');
|
||||||
|
await writeFile(join(root, 'content/public/asset-manifest.json'), JSON.stringify({ assets: [{
|
||||||
|
id: 'soundtrack-afterglow-opus', fileName: 'nightdrive-afterglow.opus', sha256: adaptiveHash,
|
||||||
|
}] }));
|
||||||
|
await writeFile(join(root, 'content/public/portfolio-content.json'), JSON.stringify({
|
||||||
|
projects: { selected: [{ assetIds: ['soundtrack-afterglow-opus'] }], additional: [] }, toolkit: [], metadata: {},
|
||||||
|
}));
|
||||||
|
await rm(join(root, 'inputs/prepared-assets/approved-image.webp'));
|
||||||
|
await writeFile(join(root, 'inputs/prepared-assets/nightdrive-afterglow.opus'), Buffer.from('altered adaptive asset'));
|
||||||
|
await expect(verifyApprovedAssetSet(root)).rejects.toThrow(/digest|hash/i);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('rejects an unreferenced extra adaptive soundtrack asset', async () => {
|
||||||
|
const root = await createScratchRepository();
|
||||||
|
await writeApprovedSet(root);
|
||||||
|
await writeFile(join(root, 'inputs/prepared-assets/nightdrive-afterglow-extra.opus'), Buffer.from('extra adaptive asset'));
|
||||||
|
await expect(verifyApprovedAssetSet(root)).rejects.toThrow(/extra prepared asset/i);
|
||||||
|
});
|
||||||
|
|
||||||
it('rejects a symbolic-link prepared-asset directory', async () => {
|
it('rejects a symbolic-link prepared-asset directory', async () => {
|
||||||
const root = await createScratchRepository();
|
const root = await createScratchRepository();
|
||||||
const target = join(root, 'outside');
|
const target = join(root, 'outside');
|
||||||
|
|||||||
Reference in New Issue
Block a user