import { beforeEach, describe, expect, it, vi } from 'vitest' describe('settingsStore locale defaults', () => { beforeEach(() => { vi.resetModules() window.localStorage.clear() }) it('defaults to Chinese when no locale is stored', async () => { const { useSettingsStore } = await import('./settingsStore') expect(useSettingsStore.getState().locale).toBe('zh') }) it('keeps a stored locale override', async () => { window.localStorage.setItem('cc-haha-locale', 'en') const { useSettingsStore } = await import('./settingsStore') expect(useSettingsStore.getState().locale).toBe('en') }) }) describe('settingsStore desktop notification persistence', () => { beforeEach(() => { vi.resetModules() vi.clearAllMocks() window.localStorage.clear() }) it('persists the latest desktop notification toggle when saves overlap', async () => { const pendingSaves: Array<() => void> = [] const updateUser = vi.fn( () => new Promise<{ ok: true }>((resolve) => { pendingSaves.push(() => resolve({ ok: true })) }), ) vi.doMock('../api/settings', () => ({ settingsApi: { getUser: vi.fn(), updateUser, getPermissionMode: vi.fn(), setPermissionMode: vi.fn(), getCliLauncherStatus: vi.fn(), }, })) vi.doMock('../api/models', () => ({ modelsApi: { list: vi.fn(), getCurrent: vi.fn(), setCurrent: vi.fn(), getEffort: vi.fn(), setEffort: vi.fn(), }, })) const { useSettingsStore } = await import('./settingsStore') const firstSave = useSettingsStore.getState().setDesktopNotificationsEnabled(false) await vi.waitFor(() => { expect(updateUser).toHaveBeenCalledWith({ desktopNotificationsEnabled: false }) }) const secondSave = useSettingsStore.getState().setDesktopNotificationsEnabled(true) expect(useSettingsStore.getState().desktopNotificationsEnabled).toBe(true) pendingSaves.shift()?.() await vi.waitFor(() => { expect(updateUser).toHaveBeenCalledWith({ desktopNotificationsEnabled: true }) }) pendingSaves.shift()?.() await Promise.all([firstSave, secondSave]) expect(updateUser).toHaveBeenLastCalledWith({ desktopNotificationsEnabled: true }) expect(useSettingsStore.getState().desktopNotificationsEnabled).toBe(true) }) })