import { describe, expect, it } from 'vitest'; import { classifyArtifact, evaluateBudgetTotals, PERFORMANCE_BUDGETS } from '../../scripts/lib/bundle-budgets.mjs'; describe('release budgets', () => { it('pins every exact section 14 threshold', () => { expect(PERFORMANCE_BUDGETS).toMatchObject({ initialHtmlCriticalCss: 100 * 1024, initialApplicationJs: 120 * 1024, heroPoster: 220 * 1024, initialFonts: 120 * 1024, firstLiveScene: 650 * 1024, projectVideo: 2.5 * 1024 * 1024, projectVideoDurationSeconds: 10, projectVideoWidth: 1280, projectVideoHeight: 720, projectStill: 400 * 1024, chart: 100 * 1024, deferredProjectVisuals: 2.5 * 1024 * 1024, highTierExtras: 750 * 1024, deferredNonVideo: 3.5 * 1024 * 1024, imageSceneConcurrency: 2, videoConcurrency: 1, mobileTextureDimension: 2048, lowTierGpuEstimate: 96 * 1024 * 1024, highTierGpuEstimate: 192 * 1024 * 1024, }); }); it('classifies every artifact once and keeps the scene chunk deferred', () => { expect(classifyArtifact('index.html', '')).toBe('initial-html'); expect(classifyArtifact('assets/index-a.css', '')).toBe('critical-css'); expect(classifyArtifact('assets/index-a.js', 'import("./environment-b.js")')).toBe('initial-application-js'); expect(classifyArtifact('assets/environment-b.js', 'three scene')).toBe('first-live-scene'); expect(() => classifyArtifact('assets/mystery.bin', '')).toThrow(/unclassified/u); }); it('fails exact byte boundaries and accepts equality', () => { expect(evaluateBudgetTotals({ initialHtmlCriticalCss: 100 * 1024 }).violations).toEqual([]); expect(evaluateBudgetTotals({ initialHtmlCriticalCss: 100 * 1024 + 1 }).violations).toContainEqual(expect.objectContaining({ budget: 'initialHtmlCriticalCss' })); }); });