Files
openchamber/packages/ui/src/stores/useSessionTabsStore.test.ts
T

53 lines
2.1 KiB
TypeScript

import { beforeEach, describe, expect, test } from 'bun:test';
import { useSessionTabsStore } from './useSessionTabsStore';
describe('useSessionTabsStore', () => {
beforeEach(() => {
useSessionTabsStore.setState({ tabIds: [] });
});
test('ensureTab appends once and preserves order', () => {
const store = useSessionTabsStore.getState();
store.ensureTab('a');
store.ensureTab('b');
store.ensureTab('a');
expect(useSessionTabsStore.getState().tabIds).toEqual(['a', 'b']);
});
test('closeTab removes only the given id; closeOtherTabs keeps only it', () => {
useSessionTabsStore.setState({ tabIds: ['a', 'b', 'c'] });
useSessionTabsStore.getState().closeTab('b');
expect(useSessionTabsStore.getState().tabIds).toEqual(['a', 'c']);
useSessionTabsStore.getState().closeOtherTabs('c');
expect(useSessionTabsStore.getState().tabIds).toEqual(['c']);
});
test('reorderTabs moves by id and ignores unknown ids', () => {
useSessionTabsStore.setState({ tabIds: ['a', 'b', 'c'] });
useSessionTabsStore.getState().reorderTabs('c', 'a');
expect(useSessionTabsStore.getState().tabIds).toEqual(['c', 'a', 'b']);
const before = useSessionTabsStore.getState().tabIds;
useSessionTabsStore.getState().reorderTabs('x', 'a');
expect(useSessionTabsStore.getState().tabIds).toBe(before);
});
test('caps the working set at 10, evicting the oldest tab', () => {
useSessionTabsStore.setState({ tabIds: Array.from({ length: 10 }, (_, i) => `s${i}`) });
useSessionTabsStore.getState().ensureTab('s-new');
const ids = useSessionTabsStore.getState().tabIds;
expect(ids).toHaveLength(10);
expect(ids[0]).toBe('s1');
expect(ids.at(-1)).toBe('s-new');
});
test('removeTabs drops only confirmed-gone ids and no-ops otherwise', () => {
useSessionTabsStore.setState({ tabIds: ['a', 'b'] });
const before = useSessionTabsStore.getState().tabIds;
useSessionTabsStore.getState().removeTabs(['x']);
expect(useSessionTabsStore.getState().tabIds).toBe(before);
useSessionTabsStore.getState().removeTabs(['a']);
expect(useSessionTabsStore.getState().tabIds).toEqual(['b']);
});
});