import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest' import { bootstrapDensity, setDensity, getDensityPreference } from './density' // ── localStorage stub ──────────────────────────────────────────────────────── function makeLocalStorageStub(): Storage { const store: Record = {} return { getItem: (key: string) => store[key] ?? null, setItem: (key: string, val: string) => { store[key] = val }, removeItem: (key: string) => { delete store[key] }, clear: () => { Object.keys(store).forEach(k => delete store[k]) }, key: (index: number) => Object.keys(store)[index] ?? null, get length() { return Object.keys(store).length }, } as Storage } // ── Setup / teardown ───────────────────────────────────────────────────────── let lsStub: Storage beforeEach(() => { lsStub = makeLocalStorageStub() vi.stubGlobal('localStorage', lsStub) delete document.documentElement.dataset['density'] }) afterEach(() => { vi.restoreAllMocks() vi.unstubAllGlobals() }) // ── Tests ──────────────────────────────────────────────────────────────────── describe('getDensityPreference', () => { it('no stored value → "cozy"', () => { expect(getDensityPreference()).toBe('cozy') }) it('stored "compact" → "compact"', () => { lsStub.setItem('density', 'compact') expect(getDensityPreference()).toBe('compact') }) it('stored "cozy" → "cozy"', () => { lsStub.setItem('density', 'cozy') expect(getDensityPreference()).toBe('cozy') }) }) describe('bootstrapDensity', () => { it('no stored value → data-density="cozy"', () => { bootstrapDensity() expect(document.documentElement.dataset['density']).toBe('cozy') }) it('stored "compact" → data-density="compact"', () => { lsStub.setItem('density', 'compact') bootstrapDensity() expect(document.documentElement.dataset['density']).toBe('compact') }) it('does not register a matchMedia listener', () => { const spy = vi.spyOn(window, 'matchMedia') bootstrapDensity() expect(spy).not.toHaveBeenCalled() }) }) describe('setDensity', () => { it('setDensity("compact") stores and sets data-density', () => { setDensity('compact') expect(lsStub.getItem('density')).toBe('compact') expect(document.documentElement.dataset['density']).toBe('compact') }) it('setDensity("cozy") stores and sets data-density', () => { setDensity('cozy') expect(lsStub.getItem('density')).toBe('cozy') expect(document.documentElement.dataset['density']).toBe('cozy') }) it('setDensity(null) removes key and applies default "cozy"', () => { lsStub.setItem('density', 'compact') document.documentElement.dataset['density'] = 'compact' setDensity(null) expect(lsStub.getItem('density')).toBeNull() expect(document.documentElement.dataset['density']).toBe('cozy') }) })