~bigbes/lethe

ref: 27c47142dda459f4dd552a8ceba4934eca81ff6b lethe/web/src/lib/density.test.ts -rw-r--r-- 3.2 KiB
27c47142 — Eugene Blikh collector: add polling source runner 24 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'
import { bootstrapDensity, setDensity, getDensityPreference } from './density'

// ── localStorage stub ────────────────────────────────────────────────────────

function makeLocalStorageStub(): Storage {
  const store: Record<string, string> = {}
  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')
  })
})