37 lines
1.6 KiB
TypeScript
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']);
|
|
});
|
|
});
|