Files
backspace/packages/web/src/stores/composerStore.test.ts
T

37 lines
1.6 KiB
TypeScript

import { describe, it, expect, beforeEach } from 'vitest';
import { useComposerStore } from './composerStore';
describe('composerStore', () => {
beforeEach(() => useComposerStore.setState({ states: new Map() }));
it('starts empty for unseen channels', () => {
expect(useComposerStore.getState().get('ch-1')).toEqual({ draftText: '', replyTo: null, stagedTransferIds: [] });
});
it('attaches a transferId to the per-channel staged list', () => {
useComposerStore.getState().attach('ch-1', 't-1');
expect(useComposerStore.getState().get('ch-1').stagedTransferIds).toEqual(['t-1']);
});
it('removes a staged transferId', () => {
useComposerStore.getState().attach('ch-1', 't-1');
useComposerStore.getState().attach('ch-1', 't-2');
useComposerStore.getState().removeStaged('ch-1', 't-1');
expect(useComposerStore.getState().get('ch-1').stagedTransferIds).toEqual(['t-2']);
});
it('clear empties draft + replyTo + staged', () => {
useComposerStore.getState().attach('ch-1', 't-1');
useComposerStore.getState().setDraft('ch-1', 'hi');
useComposerStore.getState().setReplyTo('ch-1', { id: 'm', userId: 'u', content: 'x' });
useComposerStore.getState().clear('ch-1');
expect(useComposerStore.getState().get('ch-1')).toEqual({ draftText: '', replyTo: null, stagedTransferIds: [] });
});
it('attach is idempotent for the same transferId', () => {
useComposerStore.getState().attach('ch-1', 't-1');
useComposerStore.getState().attach('ch-1', 't-1');
expect(useComposerStore.getState().get('ch-1').stagedTransferIds).toEqual(['t-1']);
});
});