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']); }); });