mirror of
https://github.com/wu736139669/hapi.git
synced 2026-08-05 06:24:37 +00:00
test(web): cover Codex exploration preference
Cover preference persistence, default cleanup, and cross-tab storage synchronization.\n\nvia [HAPI](https://hapi.run)\n\nCo-Authored-By: HAPI <noreply@hapi.run>
This commit is contained in:
@@ -1,9 +1,13 @@
|
|||||||
|
import { act, renderHook } from '@testing-library/react'
|
||||||
import { beforeEach, describe, expect, it } from 'vitest'
|
import { beforeEach, describe, expect, it } from 'vitest'
|
||||||
import {
|
import {
|
||||||
DEFAULT_CODEX_EXPLORATION_COLLAPSED,
|
DEFAULT_CODEX_EXPLORATION_COLLAPSED,
|
||||||
getInitialCodexExplorationCollapsed,
|
getInitialCodexExplorationCollapsed,
|
||||||
|
useCodexExplorationCollapse,
|
||||||
} from './useCodexExplorationCollapse'
|
} from './useCodexExplorationCollapse'
|
||||||
|
|
||||||
|
const STORAGE_KEY = 'hapi-codex-exploration-collapsed'
|
||||||
|
|
||||||
describe('useCodexExplorationCollapse helpers', () => {
|
describe('useCodexExplorationCollapse helpers', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
window.localStorage.clear()
|
window.localStorage.clear()
|
||||||
@@ -14,10 +18,61 @@ describe('useCodexExplorationCollapse helpers', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('reads valid stored values and ignores invalid values', () => {
|
it('reads valid stored values and ignores invalid values', () => {
|
||||||
window.localStorage.setItem('hapi-codex-exploration-collapsed', 'false')
|
window.localStorage.setItem(STORAGE_KEY, 'false')
|
||||||
expect(getInitialCodexExplorationCollapsed()).toBe(false)
|
expect(getInitialCodexExplorationCollapsed()).toBe(false)
|
||||||
|
|
||||||
window.localStorage.setItem('hapi-codex-exploration-collapsed', 'invalid')
|
window.localStorage.setItem(STORAGE_KEY, 'invalid')
|
||||||
expect(getInitialCodexExplorationCollapsed()).toBe(DEFAULT_CODEX_EXPLORATION_COLLAPSED)
|
expect(getInitialCodexExplorationCollapsed()).toBe(DEFAULT_CODEX_EXPLORATION_COLLAPSED)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('useCodexExplorationCollapse', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
window.localStorage.clear()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('persists the expanded preference', () => {
|
||||||
|
const { result } = renderHook(() => useCodexExplorationCollapse())
|
||||||
|
|
||||||
|
act(() => {
|
||||||
|
result.current.setCodexExplorationCollapsed(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(result.current.codexExplorationCollapsed).toBe(false)
|
||||||
|
expect(window.localStorage.getItem(STORAGE_KEY)).toBe('false')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('removes the stored preference when restored to the default', () => {
|
||||||
|
window.localStorage.setItem(STORAGE_KEY, 'false')
|
||||||
|
const { result } = renderHook(() => useCodexExplorationCollapse())
|
||||||
|
|
||||||
|
act(() => {
|
||||||
|
result.current.setCodexExplorationCollapsed(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(result.current.codexExplorationCollapsed).toBe(true)
|
||||||
|
expect(window.localStorage.getItem(STORAGE_KEY)).toBeNull()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('applies cross-tab changes from storage events', () => {
|
||||||
|
const { result } = renderHook(() => useCodexExplorationCollapse())
|
||||||
|
|
||||||
|
act(() => {
|
||||||
|
window.dispatchEvent(new StorageEvent('storage', {
|
||||||
|
key: STORAGE_KEY,
|
||||||
|
newValue: 'false',
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(result.current.codexExplorationCollapsed).toBe(false)
|
||||||
|
|
||||||
|
act(() => {
|
||||||
|
window.dispatchEvent(new StorageEvent('storage', {
|
||||||
|
key: STORAGE_KEY,
|
||||||
|
newValue: null,
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(result.current.codexExplorationCollapsed).toBe(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user