import { describe, it, expect } from 'vitest' import { PWA_SUPPORT_LEVELS, PwaMetaSchema, OfflineInputSchema, normalizeOffline, validatePwaMetaV1, toPageMobileMetaLiteral, } from '../pwa-meta.js' describe('normalizeOffline', () => { it('maps the full input table', () => { expect(normalizeOffline(undefined)).toBe('none') expect(normalizeOffline(false)).toBe('none') expect(normalizeOffline(true)).toBe('read') expect(normalizeOffline('read')).toBe('read') expect(normalizeOffline('write')).toBe('write') }) }) describe('PwaMetaSchema', () => { it('accepts every support level with and without offline', () => { for (const support of PWA_SUPPORT_LEVELS) { expect(PwaMetaSchema.safeParse({ support }).success).toBe(true) } expect(PwaMetaSchema.safeParse({ support: 'adapted', offline: 'write' }).success).toBe(true) expect(PwaMetaSchema.safeParse({ support: 'adapted', offline: true }).success).toBe(true) }) it('rejects unknown support levels and offline values', () => { expect(PwaMetaSchema.safeParse({ support: 'mobile' }).success).toBe(false) expect(PwaMetaSchema.safeParse({ support: 'adapted', offline: 'sync' }).success).toBe(false) expect(OfflineInputSchema.safeParse('none').success).toBe(false) }) it('passes unknown future fields through (pipeline tolerance)', () => { const parsed = PwaMetaSchema.parse({ support: 'adapted', mobileComponent: 'X' }) expect((parsed as Record).mobileComponent).toBe('X') }) }) describe('validatePwaMetaV1', () => { it("rejects support 'full' (v2 — .mobile.tsx variants)", () => { expect(validatePwaMetaV1({ support: 'full' })).toMatch(/mobile\.tsx|'adapted'/) expect(validatePwaMetaV1({ support: 'full', offline: 'read' })).not.toBeNull() }) it('rejects offline on a desktop-only page', () => { expect(validatePwaMetaV1({ support: 'desktop-only', offline: 'read' })).toMatch(/desktop-only/) expect(validatePwaMetaV1({ support: 'desktop-only', offline: true })).not.toBeNull() }) it('accepts the generatable combinations', () => { expect(validatePwaMetaV1({ support: 'adapted' })).toBeNull() expect(validatePwaMetaV1({ support: 'adapted', offline: 'read' })).toBeNull() expect(validatePwaMetaV1({ support: 'adapted', offline: 'write' })).toBeNull() expect(validatePwaMetaV1({ support: 'desktop-only' })).toBeNull() expect(validatePwaMetaV1({ support: 'desktop-only', offline: false })).toBeNull() }) }) describe('toPageMobileMetaLiteral', () => { it('maps offline level onto the boolean offlineCapable', () => { expect(toPageMobileMetaLiteral({ support: 'adapted' })).toBe("{ support: 'adapted' }") expect(toPageMobileMetaLiteral({ support: 'adapted', offline: 'read' })).toBe( "{ support: 'adapted', offlineCapable: true }", ) // write is a data-layer fact — the registry only sees offlineCapable: true expect(toPageMobileMetaLiteral({ support: 'adapted', offline: 'write' })).toBe( "{ support: 'adapted', offlineCapable: true }", ) expect(toPageMobileMetaLiteral({ support: 'desktop-only' })).toBe("{ support: 'desktop-only' }") }) })