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>
79 lines
2.9 KiB
TypeScript
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')
|
|
})
|
|
})
|