refactor: move document domain core to lib/document/
Moves ~25 components, utils (search, filename, groupDocuments, documentStatusLabel, validateFile), bulkSelection store, and TranscriptionSection sub-component. Fixes broken relative imports. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
76
frontend/src/lib/document/bulkSelection.svelte.spec.ts
Normal file
76
frontend/src/lib/document/bulkSelection.svelte.spec.ts
Normal file
@@ -0,0 +1,76 @@
|
||||
import { afterEach, describe, expect, it } from 'vitest';
|
||||
import { bulkSelectionStore } from './bulkSelection.svelte';
|
||||
|
||||
describe('bulkSelectionStore', () => {
|
||||
afterEach(() => bulkSelectionStore.clear());
|
||||
|
||||
it('starts empty', () => {
|
||||
expect(bulkSelectionStore.size).toBe(0);
|
||||
});
|
||||
|
||||
it('toggle adds an id when absent', () => {
|
||||
bulkSelectionStore.toggle('a');
|
||||
expect(bulkSelectionStore.has('a')).toBe(true);
|
||||
expect(bulkSelectionStore.size).toBe(1);
|
||||
});
|
||||
|
||||
it('toggle removes an id when present', () => {
|
||||
bulkSelectionStore.add('a');
|
||||
bulkSelectionStore.toggle('a');
|
||||
expect(bulkSelectionStore.has('a')).toBe(false);
|
||||
});
|
||||
|
||||
it('add and remove update size', () => {
|
||||
bulkSelectionStore.add('a');
|
||||
bulkSelectionStore.add('b');
|
||||
expect(bulkSelectionStore.size).toBe(2);
|
||||
bulkSelectionStore.remove('a');
|
||||
expect(bulkSelectionStore.size).toBe(1);
|
||||
expect(bulkSelectionStore.has('b')).toBe(true);
|
||||
});
|
||||
|
||||
it('add is idempotent', () => {
|
||||
bulkSelectionStore.add('a');
|
||||
bulkSelectionStore.add('a');
|
||||
expect(bulkSelectionStore.size).toBe(1);
|
||||
});
|
||||
|
||||
it('setAll replaces the selection', () => {
|
||||
bulkSelectionStore.add('a');
|
||||
bulkSelectionStore.add('b');
|
||||
bulkSelectionStore.setAll(['c', 'd', 'e']);
|
||||
expect(bulkSelectionStore.size).toBe(3);
|
||||
expect(bulkSelectionStore.has('a')).toBe(false);
|
||||
expect(bulkSelectionStore.has('c')).toBe(true);
|
||||
});
|
||||
|
||||
it('clear empties the selection', () => {
|
||||
bulkSelectionStore.add('a');
|
||||
bulkSelectionStore.add('b');
|
||||
bulkSelectionStore.clear();
|
||||
expect(bulkSelectionStore.size).toBe(0);
|
||||
});
|
||||
|
||||
it('setAll([]) leaves the store empty (no-op when filter returned zero matches)', () => {
|
||||
bulkSelectionStore.add('a');
|
||||
bulkSelectionStore.setAll([]);
|
||||
expect(bulkSelectionStore.size).toBe(0);
|
||||
});
|
||||
|
||||
it('setAll drops all previously selected ids, not just some', () => {
|
||||
bulkSelectionStore.add('a');
|
||||
bulkSelectionStore.add('b');
|
||||
bulkSelectionStore.setAll(['c', 'd']);
|
||||
expect(bulkSelectionStore.has('a')).toBe(false);
|
||||
expect(bulkSelectionStore.has('b')).toBe(false);
|
||||
expect(bulkSelectionStore.has('c')).toBe(true);
|
||||
expect(bulkSelectionStore.has('d')).toBe(true);
|
||||
});
|
||||
|
||||
it('ids getter exposes the current SvelteSet', () => {
|
||||
bulkSelectionStore.add('a');
|
||||
bulkSelectionStore.add('b');
|
||||
const ids = Array.from(bulkSelectionStore.ids);
|
||||
expect(ids.sort()).toEqual(['a', 'b']);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user