Files
inkling/tests/unit/store.showSettings.test.ts

66 lines
2.8 KiB
TypeScript

import { describe, it, expect, beforeEach, vi } from 'vitest';
import type { Note } from '@shared/types';
const mockApi = {
listNotes: vi.fn(async () => [] as Note[]),
listTrash: vi.fn(async () => [] as Note[]),
getTrashCount: vi.fn(async () => 0),
getContinuity: vi.fn(async () => ({ weekStart: '', weekCount: 0, weekTarget: 7, consecutiveCompleteWeeks: 0, showRecoveryToast: false, lastNoteAt: null })),
getPendingCount: vi.fn(async () => 0),
getOllamaStatus: vi.fn(async () => ({ ok: true })),
getTodayCount: vi.fn(async () => 0),
getFailedCount: vi.fn(async () => 0),
listExpired: vi.fn(async () => [] as Note[]),
listRecallCandidate: vi.fn(async () => null),
restoreNote: vi.fn(async () => {}),
permanentDeleteNote: vi.fn(async () => ({ confirmed: true })),
emptyTrash: vi.fn(async () => ({ confirmed: true, count: 0 })),
trashExpiredBatch: vi.fn(async () => ({ confirmed: true, trashedCount: 0 })),
onNoteUpdated: vi.fn(() => () => {}),
updateAiFields: vi.fn(async () => {}),
setDueDate: vi.fn(async () => {}),
setIntent: vi.fn(async () => {}),
dismissIntent: vi.fn(async () => {}),
ollamaRecheck: vi.fn(async () => ({ ok: true })),
retryAllFailed: vi.fn(async () => {}),
markRecallOpened: vi.fn(async () => {}),
dismissRecall: vi.fn(async () => {}),
emitRecallSnoozed: vi.fn(async () => {})
};
vi.mock('../../src/renderer/inbox/api.js', () => ({ inboxApi: mockApi }));
describe('inbox store — showSettings', () => {
beforeEach(async () => {
const { useInbox } = await import('../../src/renderer/inbox/store.js');
useInbox.setState({
notes: [], trashNotes: [], trashCount: 0, showTrash: false,
loading: false, tagFilter: null, pendingCount: 0, todayCount: 0,
ollamaStatus: { ok: true },
continuity: { weekStart: '', weekCount: 0, weekTarget: 7, consecutiveCompleteWeeks: 0, showRecoveryToast: false, lastNoteAt: null },
expiredCandidates: [], expiredSnoozeUntilMs: null,
failedCount: 0, recallCandidate: null, recallSnoozeUntilMs: null,
showSettings: false
});
Object.values(mockApi).forEach((fn) => 'mockClear' in fn && (fn as any).mockClear());
});
it('initial state has showSettings=false', async () => {
const { useInbox } = await import('../../src/renderer/inbox/store.js');
expect(useInbox.getState().showSettings).toBe(false);
});
it('setShowSettings(true) sets state', async () => {
const { useInbox } = await import('../../src/renderer/inbox/store.js');
useInbox.getState().setShowSettings(true);
expect(useInbox.getState().showSettings).toBe(true);
});
it('setShowSettings(false) toggles back', async () => {
const { useInbox } = await import('../../src/renderer/inbox/store.js');
useInbox.getState().setShowSettings(true);
useInbox.getState().setShowSettings(false);
expect(useInbox.getState().showSettings).toBe(false);
});
});