tabsSlice.test.ts
2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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('/')
})
})