YAS/apps/web/src/__tests__/notes-store.test.ts
YetAnotherSuite Dev fedda0894d test: add 48 unit tests across types, ui, and web packages
packages/types: 27 tests
- Zod schema validation for user, node, workspace, tag, link
- Default values, required fields, enum constraints, edge cases

packages/ui: 8 tests
- Button rendering, variants, sizes, asChild, ref forwarding, disabled
- Dialog trigger rendering

apps/web: 13 tests
- Notes store CRUD operations (add, update, remove, select, search)
- Tasks store operations (add, toggle complete, priority, remove, view switching, projects)

apps/api: 4 placeholders for DB-backed integration tests

Infrastructure:
- vitest configs for packages/types and packages/ui
- jsdom test environment for UI components
- localStorage mock for Zustand persist middleware in jsdom
- crypto.randomUUID polyfill for test environment
- Fixed create schemas to make non-essential fields optional
2026-07-20 22:41:13 +02:00

60 lines
1.7 KiB
TypeScript

import { describe, it, expect, beforeEach } from 'vitest';
import { useNotesStore } from '../stores/notes';
function createNote(overrides: Record<string, unknown> = {}) {
return {
id: crypto.randomUUID(),
title: 'Test Note',
type: 'note' as const,
content: { type: 'doc', content: [] },
plainText: '',
status: 'active' as const,
workspaceId: 'ws-1',
tags: [],
folderId: null,
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
...overrides,
};
}
describe('useNotesStore', () => {
beforeEach(() => {
useNotesStore.setState({ notes: [], folders: [], selectedNoteId: null, searchQuery: '', loading: false });
});
it('starts with empty notes', () => {
expect(useNotesStore.getState().notes).toHaveLength(0);
});
it('adds a note', () => {
const note = createNote();
useNotesStore.getState().addNote(note);
expect(useNotesStore.getState().notes).toHaveLength(1);
});
it('updates a note', () => {
const note = createNote();
useNotesStore.getState().addNote(note);
useNotesStore.getState().updateNote(note.id, { title: 'Updated' });
expect(useNotesStore.getState().notes[0]?.title).toBe('Updated');
});
it('removes a note', () => {
const note = createNote();
useNotesStore.getState().addNote(note);
useNotesStore.getState().removeNote(note.id);
expect(useNotesStore.getState().notes).toHaveLength(0);
});
it('sets selected note', () => {
useNotesStore.getState().setSelectedNoteId('note-1');
expect(useNotesStore.getState().selectedNoteId).toBe('note-1');
});
it('sets search query', () => {
useNotesStore.getState().setSearchQuery('hello');
expect(useNotesStore.getState().searchQuery).toBe('hello');
});
});