feat: add adaptive soundtrack layer assets
This commit is contained in:
@@ -64,6 +64,10 @@ describe('approved asset publication closure', () => {
|
||||
['soundtrack-intro-mp3', 'nightdrive-intro.mp3'],
|
||||
['soundtrack-main-opus', 'nightdrive-main.opus'],
|
||||
['soundtrack-main-mp3', 'nightdrive-main.mp3'],
|
||||
['soundtrack-afterglow-opus', 'nightdrive-afterglow.opus'],
|
||||
['soundtrack-afterglow-mp3', 'nightdrive-afterglow.mp3'],
|
||||
['soundtrack-drive-lift-opus', 'nightdrive-drive-lift.opus'],
|
||||
['soundtrack-drive-lift-mp3', 'nightdrive-drive-lift.mp3'],
|
||||
].map(([id, fileName], index) => {
|
||||
const bytes = Buffer.from(`approved soundtrack asset ${index}`);
|
||||
return { id, fileName, bytes, sha256: createHash('sha256').update(bytes).digest('hex') };
|
||||
@@ -78,6 +82,8 @@ describe('approved asset publication closure', () => {
|
||||
soundtrack: {
|
||||
intro: { opusAssetId: 'soundtrack-intro-opus', mp3AssetId: 'soundtrack-intro-mp3' },
|
||||
main: { opusAssetId: 'soundtrack-main-opus', mp3AssetId: 'soundtrack-main-mp3' },
|
||||
afterglow: { opusAssetId: 'soundtrack-afterglow-opus', mp3AssetId: 'soundtrack-afterglow-mp3' },
|
||||
driveLift: { opusAssetId: 'soundtrack-drive-lift-opus', mp3AssetId: 'soundtrack-drive-lift-mp3' },
|
||||
},
|
||||
}));
|
||||
await mkdir(join(root, 'inputs/prepared-assets'), { recursive: true });
|
||||
|
||||
@@ -47,6 +47,10 @@ describe('approved public portfolio projection', () => {
|
||||
content.soundtrack.intro.mp3AssetId,
|
||||
content.soundtrack.main.opusAssetId,
|
||||
content.soundtrack.main.mp3AssetId,
|
||||
content.soundtrack.afterglow.opusAssetId,
|
||||
content.soundtrack.afterglow.mp3AssetId,
|
||||
content.soundtrack.driveLift.opusAssetId,
|
||||
content.soundtrack.driveLift.mp3AssetId,
|
||||
]),
|
||||
];
|
||||
expect([...publishedReferences].sort()).toEqual(manifest.assets.map((asset) => asset.id).sort());
|
||||
|
||||
@@ -118,6 +118,28 @@ describe('artifact verification', () => {
|
||||
await expect(verifyArtifactDirectory(directory, inputs, contract)).resolves.toBeUndefined();
|
||||
});
|
||||
|
||||
it.each([
|
||||
{
|
||||
name: 'an omitted adaptive soundtrack file',
|
||||
mutate: async (directory: string) => rm(join(directory, 'assets/nightdrive-afterglow.opus')),
|
||||
error: /missing.*artifact|digest|public asset/iu,
|
||||
},
|
||||
{
|
||||
name: 'an altered adaptive soundtrack file',
|
||||
mutate: async (directory: string) => writeFile(join(directory, 'assets/nightdrive-drive-lift.mp3'), 'altered'),
|
||||
error: /digest does not match|hash/u,
|
||||
},
|
||||
{
|
||||
name: 'an unreferenced adaptive soundtrack file',
|
||||
mutate: async (directory: string) => writeFile(join(directory, 'assets/nightdrive-unreferenced.opus'), 'unreferenced'),
|
||||
error: /unexpected artifact|unreferenced/u,
|
||||
},
|
||||
])('rejects $name', async ({ mutate, error }) => {
|
||||
const { directory, inputs, contract } = await writeValidArtifacts();
|
||||
await mutate(directory);
|
||||
await expect(verifyArtifactDirectory(directory, inputs, contract)).rejects.toThrow(error);
|
||||
});
|
||||
|
||||
it.each([
|
||||
{
|
||||
name: 'an unexpected preview sitemap',
|
||||
|
||||
@@ -31,6 +31,7 @@ describe('release budgets', () => {
|
||||
});
|
||||
|
||||
it('pins every exact section 14 threshold', () => {
|
||||
expect(PERFORMANCE_BUDGETS.deferredAudio).toBe(16 * 1024 * 1024);
|
||||
expect(PERFORMANCE_BUDGETS).toMatchObject({
|
||||
initialHtmlCriticalCss: 100 * 1024,
|
||||
initialApplicationJs: 120 * 1024,
|
||||
@@ -46,7 +47,7 @@ describe('release budgets', () => {
|
||||
deferredProjectVisuals: 2.5 * 1024 * 1024,
|
||||
highTierExtras: 750 * 1024,
|
||||
deferredNonVideo: 3.5 * 1024 * 1024,
|
||||
deferredAudio: 13 * 1024 * 1024,
|
||||
deferredAudio: 16 * 1024 * 1024,
|
||||
imageSceneConcurrency: 2,
|
||||
videoConcurrency: 1,
|
||||
mobileTextureDimension: 2048,
|
||||
@@ -63,6 +64,10 @@ describe('release budgets', () => {
|
||||
expect(classifyArtifact('assets/nightdrive-grand-tourer-a.glb', '')).toBe('first-live-scene');
|
||||
expect(classifyArtifact('assets/nightdrive-main.opus', '')).toBe('soundtrack-audio');
|
||||
expect(classifyArtifact('assets/nightdrive-intro.mp3', '')).toBe('soundtrack-audio');
|
||||
expect(classifyArtifact('assets/nightdrive-afterglow.opus', '')).toBe('soundtrack-audio');
|
||||
expect(classifyArtifact('assets/nightdrive-afterglow.mp3', '')).toBe('soundtrack-audio');
|
||||
expect(classifyArtifact('assets/nightdrive-drive-lift.opus', '')).toBe('soundtrack-audio');
|
||||
expect(classifyArtifact('assets/nightdrive-drive-lift.mp3', '')).toBe('soundtrack-audio');
|
||||
expect(classifyArtifact('assets/high-tier-b.js', 'optional bloom')).toBe('high-tier-extras');
|
||||
expect(() => classifyArtifact('assets/mystery.bin', '')).toThrow(/unclassified/u);
|
||||
});
|
||||
|
||||
@@ -27,6 +27,8 @@ type MutableContentFixture = {
|
||||
soundtrack?: {
|
||||
intro: { opusAssetId: string; mp3AssetId: string };
|
||||
main: { opusAssetId: string; mp3AssetId: string };
|
||||
afterglow: { opusAssetId: string; mp3AssetId: string };
|
||||
driveLift: { opusAssetId: string; mp3AssetId: string };
|
||||
};
|
||||
};
|
||||
|
||||
@@ -48,6 +50,8 @@ describe('content schemas', () => {
|
||||
content.soundtrack = {
|
||||
intro: { opusAssetId: 'soundtrack-intro-opus', mp3AssetId: 'soundtrack-intro-mp3' },
|
||||
main: { opusAssetId: 'soundtrack-main-opus', mp3AssetId: 'soundtrack-main-mp3' },
|
||||
afterglow: { opusAssetId: 'soundtrack-afterglow-opus', mp3AssetId: 'soundtrack-afterglow-mp3' },
|
||||
driveLift: { opusAssetId: 'soundtrack-drive-lift-opus', mp3AssetId: 'soundtrack-drive-lift-mp3' },
|
||||
};
|
||||
const audioMetadata = {
|
||||
width: null,
|
||||
@@ -61,6 +65,10 @@ describe('content schemas', () => {
|
||||
{ id: 'soundtrack-intro-mp3', fileName: 'nightdrive-intro.mp3', sha256: 'b'.repeat(64), mediaType: 'audio/mpeg', durationMs: 56_064, ...audioMetadata },
|
||||
{ id: 'soundtrack-main-opus', fileName: 'nightdrive-main.opus', sha256: 'c'.repeat(64), mediaType: 'audio/ogg', durationMs: 178_605, ...audioMetadata },
|
||||
{ id: 'soundtrack-main-mp3', fileName: 'nightdrive-main.mp3', sha256: 'd'.repeat(64), mediaType: 'audio/mpeg', durationMs: 178_605, ...audioMetadata },
|
||||
{ id: 'soundtrack-afterglow-opus', fileName: 'nightdrive-afterglow.opus', sha256: 'e'.repeat(64), mediaType: 'audio/ogg', durationMs: 56_064, ...audioMetadata },
|
||||
{ id: 'soundtrack-afterglow-mp3', fileName: 'nightdrive-afterglow.mp3', sha256: 'f'.repeat(64), mediaType: 'audio/mpeg', durationMs: 56_064, ...audioMetadata },
|
||||
{ id: 'soundtrack-drive-lift-opus', fileName: 'nightdrive-drive-lift.opus', sha256: '1'.repeat(64), mediaType: 'audio/ogg', durationMs: 178_605, ...audioMetadata },
|
||||
{ id: 'soundtrack-drive-lift-mp3', fileName: 'nightdrive-drive-lift.mp3', sha256: '2'.repeat(64), mediaType: 'audio/mpeg', durationMs: 178_605, ...audioMetadata },
|
||||
];
|
||||
const manifest = {
|
||||
assets: [...(validManifest as { assets: unknown[] }).assets, ...soundtrackAssets],
|
||||
|
||||
Reference in New Issue
Block a user