Files
server/tests/js/unit/layoutStore.test.ts
T
Sebastian 65d60008da fix: layout loading settings
Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
2026-07-09 20:47:30 -04:00

75 lines
2.3 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from 'vitest'
import { createPinia, setActivePinia } from 'pinia'
import { useLayoutStore } from '@KTXC/stores/layoutStore'
import { useTenantStore } from '@KTXC/stores/tenantStore'
import { useUserStore } from '@KTXC/stores/userStore'
const userServiceMock = vi.hoisted(() => ({
updateProfile: vi.fn(() => Promise.resolve()),
updateSettings: vi.fn(() => Promise.resolve()),
flushAll: vi.fn(() => Promise.resolve()),
}))
vi.mock('@KTXC/services/user/userService', () => ({
userService: userServiceMock,
}))
describe('layoutStore', () => {
beforeEach(() => {
const storage = new Map<string, string>()
vi.stubGlobal('localStorage', {
getItem: vi.fn((key: string) => storage.get(key) ?? null),
setItem: vi.fn((key: string, value: string) => storage.set(key, value)),
removeItem: vi.fn((key: string) => storage.delete(key)),
clear: vi.fn(() => storage.clear()),
})
setActivePinia(createPinia())
vi.clearAllMocks()
})
it('hydrates initial layout preferences after settings are loaded', () => {
const userStore = useUserStore()
const tenantStore = useTenantStore()
const layoutStore = useLayoutStore()
expect(layoutStore.sidebarDrawer).toBe(true)
expect(layoutStore.miniSidebar).toBe(false)
expect(layoutStore.theme).toBe('light')
tenantStore.init({
id: 'tenant',
domain: 'example.test',
label: 'Example',
settings: {
theme_default_mode: 'dark',
},
})
userStore.init({
settings: {
sidebar_drawer: false,
mini_sidebar: true,
theme: 'system',
},
})
layoutStore.hydrateFromSettings()
expect(layoutStore.sidebarDrawer).toBe(false)
expect(layoutStore.miniSidebar).toBe(true)
expect(layoutStore.theme).toBe('system')
expect(userServiceMock.updateSettings).not.toHaveBeenCalled()
})
it('continues to persist user-driven layout changes', () => {
const layoutStore = useLayoutStore()
layoutStore.toggleSidebarDrawer()
layoutStore.setMiniSidebar(true)
layoutStore.setTheme('dark')
expect(userServiceMock.updateSettings).toHaveBeenCalledWith({ sidebar_drawer: false })
expect(userServiceMock.updateSettings).toHaveBeenCalledWith({ mini_sidebar: true })
expect(userServiceMock.updateSettings).toHaveBeenCalledWith({ theme: 'dark' })
})
})