fix(settings): sidebar_visible/width 영속화 — IPC + store hydration 추가
final code review 의 Important issue 대응. SettingsService 의 setSidebarVisible/ setSidebarWidth getter/setter 는 이미 있었지만 IPC handler + store hydration missing 으로 매 launch 시 사이드바 닫힌 상태로 시작하던 회귀. - settings:set-sidebar-visible / set-sidebar-width IPC 핸들러 추가 - InboxApi.getSettings 응답에 sidebar_visible/sidebar_width 포함 - preload 의 setSidebarVisible/setSidebarWidth invoke 노출 - store.loadInitial 가 settings.sidebar_visible/sidebar_width 로 hydrate - store.toggleSidebar 가 IPC 호출하여 영속화 - test mock 에 setSidebarVisible/setSidebarWidth 추가 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -56,6 +56,8 @@ vi.mock('../../src/renderer/inbox/api.js', () => ({
|
||||
// v0.2.9 Cut B Task 12 — onboarding wizard 분기. default 는 onboarding_completed=true 라 wizard 미표시.
|
||||
getSettings: vi.fn(async () => ({ onboarding_completed: true })),
|
||||
setAiEnabled: vi.fn(async () => ({ ok: true as const })),
|
||||
setSidebarVisible: vi.fn(async () => ({ ok: true as const })),
|
||||
setSidebarWidth: vi.fn(async () => ({ ok: true as const })),
|
||||
setOnboardingCompleted: vi.fn(async () => ({ ok: true as const })),
|
||||
// v0.2.9 Cut B Task 16 — AiProviderSection 가 SettingsPage 렌더 시 호출.
|
||||
getDisabledCount: vi.fn(async () => 0),
|
||||
@@ -174,11 +176,12 @@ describe('App header — 3 tabs (v0.4)', () => {
|
||||
});
|
||||
|
||||
it('Sidebar 컴포넌트가 렌더 트리에 포함됨 (sidebarVisible=true)', async () => {
|
||||
useInbox.setState({ sidebarVisible: true, notebooks: [] });
|
||||
// loadInitial 의 getSettings 가 sidebar_visible=true 반환 (Strict Mode 중복 호출 대비 mockResolvedValue).
|
||||
vi.mocked(inboxApi.getSettings).mockResolvedValue({ onboarding_completed: true, sidebar_visible: true });
|
||||
render(<App />);
|
||||
await screen.findByRole('tab', { name: /Inbox/ });
|
||||
// Sidebar renders an <aside> element when visible
|
||||
expect(document.querySelector('aside')).not.toBeNull();
|
||||
// loadInitial 비동기 hydrate 가 완료될 때까지 기다림
|
||||
await waitFor(() => expect(document.querySelector('aside')).not.toBeNull());
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -19,7 +19,9 @@ vi.mock('../../src/renderer/inbox/api.js', () => ({
|
||||
listRecallCandidate: vi.fn(async () => null),
|
||||
countsByStatus: mockCountsByStatus,
|
||||
getSettings: vi.fn(async () => ({ ai_enabled: true })),
|
||||
listByStatus: mockListByStatus
|
||||
listByStatus: mockListByStatus,
|
||||
setSidebarVisible: vi.fn(async () => ({ ok: true as const })),
|
||||
setSidebarWidth: vi.fn(async () => ({ ok: true as const }))
|
||||
},
|
||||
notebookApi: {
|
||||
list: vi.fn(async () => [
|
||||
|
||||
Reference in New Issue
Block a user