Files
MyNote/tests/unit/tab-store.test.ts
T

48 lines
1.9 KiB
TypeScript

/** @vitest-environment jsdom */
import { describe, it, expect, beforeEach } from 'vitest';
import { useTabs } from '../../apps/desktop/src/renderer/features/tabs/tab-store';
beforeEach(() => { localStorage.clear(); useTabs.setState({ tabs: [], activeId: null }); });
describe('M8 多标签与会话恢复 (FR-T)', () => {
it('openTab 新建标签,重复路径激活已有', () => {
useTabs.getState().openTab('a.md');
useTabs.getState().openTab('b.md');
expect(useTabs.getState().tabs.length).toBe(2);
const aId = useTabs.getState().tabs[0].id;
useTabs.getState().openTab('a.md');
expect(useTabs.getState().tabs.length).toBe(2); // 不重复
expect(useTabs.getState().activeId).toBe(aId);
});
it('togglePin 固定标签排前', () => {
useTabs.getState().openTab('a.md');
useTabs.getState().openTab('b.md');
useTabs.getState().togglePin(useTabs.getState().tabs[1].id); // 固定 b
expect(useTabs.getState().tabs[0].path).toBe('b.md');
expect(useTabs.getState().tabs[0].pinned).toBe(true);
});
it('closeTab 切到相邻', () => {
useTabs.getState().openTab('a.md');
useTabs.getState().openTab('b.md');
useTabs.getState().openTab('c.md');
const bId = useTabs.getState().tabs[1].id;
useTabs.getState().setActive(bId);
useTabs.getState().closeTab(bId);
expect(useTabs.getState().tabs.length).toBe(2);
expect(useTabs.getState().activeId).not.toBe(bId);
});
it('会话恢复:persist 后 restore 恢复标签列表与激活页', () => {
useTabs.getState().openTab('x.md');
useTabs.getState().openTab('y.md');
useTabs.getState().persist();
// 模拟重启:清空后 restore
useTabs.setState({ tabs: [], activeId: null });
useTabs.getState().restore();
expect(useTabs.getState().tabs.length).toBe(2);
expect(useTabs.getState().tabs.some(t => t.path === 'x.md')).toBe(true);
});
});