import { afterEach, describe, expect, it } from 'vitest' import { clearRecentVisits, listRecentVisits, MAX_ENTRIES, recordRecentVisit, STORAGE_KEY, type RecentVisitEntry, } from '@/utilities/recentVisits' const sampleEntry = (overrides: Partial = {}): RecentVisitEntry => ({ href: '/campanha/municipios/seabra', label: 'Seabra', kind: 'municipality', visitedAt: 1_700_000_000_000, ...overrides, }) describe('recentVisits storage', () => { afterEach(() => { localStorage.clear() }) it('returns an empty list when storage is missing or invalid', () => { expect(listRecentVisits()).toEqual([]) localStorage.setItem(STORAGE_KEY, 'not-json') expect(listRecentVisits()).toEqual([]) localStorage.setItem(STORAGE_KEY, JSON.stringify({ href: '/campanha/municipios/x' })) expect(listRecentVisits()).toEqual([]) }) it('drops persisted entries with retired visit kinds', () => { localStorage.setItem( STORAGE_KEY, JSON.stringify([ sampleEntry({ kind: 'municipality' }), sampleEntry({ href: '/campanha/municipios', kind: 'municipalityList' }), { ...sampleEntry({ href: '/campanha/nucleos/antigo' }), kind: 'nucleus' }, ]), ) expect(listRecentVisits()).toEqual([ sampleEntry({ kind: 'municipality' }), sampleEntry({ href: '/campanha/municipios', kind: 'municipalityList' }), ]) }) it('deduplicates by href and keeps the newest visit at the top', () => { recordRecentVisit(sampleEntry({ href: '/campanha/municipios/a', visitedAt: 10 })) recordRecentVisit(sampleEntry({ href: '/campanha/municipios/b', visitedAt: 20 })) recordRecentVisit( sampleEntry({ href: '/campanha/municipios/a', label: 'Atualizado', visitedAt: 30 }), ) expect(listRecentVisits()).toEqual([ sampleEntry({ href: '/campanha/municipios/a', label: 'Atualizado', visitedAt: 30 }), sampleEntry({ href: '/campanha/municipios/b', visitedAt: 20 }), ]) }) it('truncates the list to MAX_ENTRIES', () => { for (let index = 0; index < MAX_ENTRIES + 2; index += 1) { recordRecentVisit( sampleEntry({ href: `/campanha/municipios/municipio-${index}`, label: `MunicĂ­pio ${index}`, visitedAt: index, }), ) } const visits = listRecentVisits() expect(visits).toHaveLength(MAX_ENTRIES) expect(visits[0]?.href).toBe(`/campanha/municipios/municipio-${MAX_ENTRIES + 1}`) expect(visits[0]?.label).toBe(`MunicĂ­pio ${MAX_ENTRIES + 1}`) expect(visits.at(-1)?.href).toBe('/campanha/municipios/municipio-2') }) it('clears stored visits', () => { recordRecentVisit(sampleEntry()) clearRecentVisits() expect(listRecentVisits()).toEqual([]) expect(localStorage.getItem(STORAGE_KEY)).toBeNull() }) })