import { describe, it, expect } from 'vitest' import tabsReducer, { openTab, closeTab, activateTab, updateTabPath, type Tab } from '../store/slices/tabsSlice' const mainTab: Tab = { id: 'main', title: '主页', path: '/', closable: false } const listTab: Tab = { id: 'userlist', title: '用户列表', path: '/usr/users', closable: true } const detailTab: Tab = { id: 'userdetail', title: '用户信息单据', path: '/usr/users/new', closable: true } describe('tabsSlice', () => { it('initialState_hasMainTab', () => { const state = tabsReducer(undefined, { type: '' }) expect(state.tabs).toHaveLength(1) expect(state.tabs[0].id).toBe('main') expect(state.activeId).toBe('main') }) it('openTab_addsNewTabAndActivates', () => { const state = tabsReducer(undefined, openTab(listTab)) expect(state.tabs).toHaveLength(2) expect(state.tabs[1].id).toBe('userlist') expect(state.activeId).toBe('userlist') }) it('openTab_existingId_updatesPathAndActivates', () => { let state = tabsReducer(undefined, openTab(listTab)) const updated: Tab = { ...listTab, path: '/usr/users?queryValue=alice' } state = tabsReducer(state, openTab(updated)) expect(state.tabs).toHaveLength(2) expect(state.tabs[1].path).toBe('/usr/users?queryValue=alice') expect(state.activeId).toBe('userlist') }) it('closeTab_removesTabAndActivatesPrevious', () => { let state = tabsReducer(undefined, openTab(listTab)) state = tabsReducer(state, closeTab('userlist')) expect(state.tabs).toHaveLength(1) expect(state.activeId).toBe('main') }) it('closeTab_middleTab_activatesTabToLeft', () => { let state = tabsReducer(undefined, openTab(listTab)) state = tabsReducer(state, openTab(detailTab)) state = tabsReducer(state, closeTab('userdetail')) expect(state.activeId).toBe('userlist') }) it('closeTab_nonExistentId_doesNothing', () => { const state = tabsReducer(undefined, closeTab('nonexistent')) expect(state.tabs).toHaveLength(1) expect(state.activeId).toBe('main') }) it('activateTab_setsActiveId', () => { let state = tabsReducer(undefined, openTab(listTab)) state = tabsReducer(state, activateTab('main')) expect(state.activeId).toBe('main') }) it('updateTabPath_updatesPath', () => { let state = tabsReducer(undefined, openTab(listTab)) state = tabsReducer(state, updateTabPath({ id: 'userlist', path: '/usr/users?q=alice' })) expect(state.tabs[1].path).toBe('/usr/users?q=alice') }) it('updateTabPath_nonExistentId_doesNothing', () => { const state = tabsReducer(undefined, updateTabPath({ id: 'nope', path: '/x' })) expect(state.tabs[0].path).toBe('/') }) })