Files
tolaria/src/hooks/useViewMode.test.ts
lucaronin 4df386d310 refactor: remove hidden_sections from VaultConfig and delete useSectionVisibility
Sidebar section visibility is now controlled entirely by the `visible`
property on Type notes. Removes all hidden_sections references from
Rust struct, TypeScript interface, config migration, mock data, and tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 21:41:00 +01:00

79 lines
2.9 KiB
TypeScript

import { describe, it, expect, vi, beforeEach } from 'vitest'
import { renderHook, act } from '@testing-library/react'
import { useViewMode } from './useViewMode'
import { bindVaultConfigStore, getVaultConfig, resetVaultConfigStore } from '../utils/vaultConfigStore'
vi.mock('../mock-tauri', () => ({
isTauri: () => false,
}))
describe('useViewMode', () => {
beforeEach(() => {
resetVaultConfigStore()
bindVaultConfigStore(
{ zoom: null, view_mode: null, tag_colors: null, status_colors: null, property_display_modes: null },
vi.fn(),
)
})
it('defaults to "all" when no stored value', () => {
const { result } = renderHook(() => useViewMode())
expect(result.current.viewMode).toBe('all')
expect(result.current.sidebarVisible).toBe(true)
expect(result.current.noteListVisible).toBe(true)
})
it('loads persisted view mode from vault config', () => {
resetVaultConfigStore()
bindVaultConfigStore(
{ zoom: null, view_mode: 'editor-only', tag_colors: null, status_colors: null, property_display_modes: null },
vi.fn(),
)
const { result } = renderHook(() => useViewMode())
expect(result.current.viewMode).toBe('editor-only')
expect(result.current.sidebarVisible).toBe(false)
expect(result.current.noteListVisible).toBe(false)
})
it('setViewMode updates state and persists to vault config', () => {
const { result } = renderHook(() => useViewMode())
act(() => result.current.setViewMode('editor-list'))
expect(result.current.viewMode).toBe('editor-list')
expect(result.current.sidebarVisible).toBe(false)
expect(result.current.noteListVisible).toBe(true)
expect(getVaultConfig().view_mode).toBe('editor-list')
})
it('editor-only hides both sidebar and note list', () => {
const { result } = renderHook(() => useViewMode())
act(() => result.current.setViewMode('editor-only'))
expect(result.current.sidebarVisible).toBe(false)
expect(result.current.noteListVisible).toBe(false)
})
it('editor-list hides sidebar but shows note list', () => {
const { result } = renderHook(() => useViewMode())
act(() => result.current.setViewMode('editor-list'))
expect(result.current.sidebarVisible).toBe(false)
expect(result.current.noteListVisible).toBe(true)
})
it('all mode shows both sidebar and note list', () => {
const { result } = renderHook(() => useViewMode())
act(() => result.current.setViewMode('editor-only'))
act(() => result.current.setViewMode('all'))
expect(result.current.sidebarVisible).toBe(true)
expect(result.current.noteListVisible).toBe(true)
})
it('ignores invalid vault config values', () => {
resetVaultConfigStore()
bindVaultConfigStore(
{ zoom: null, view_mode: 'garbage' as never, tag_colors: null, status_colors: null, property_display_modes: null },
vi.fn(),
)
const { result } = renderHook(() => useViewMode())
expect(result.current.viewMode).toBe('all')
})
})