84 lines
2.5 KiB
TypeScript
84 lines
2.5 KiB
TypeScript
import { beforeEach, describe, expect, it } from 'vitest'
|
|
import { createPinia, setActivePinia } from 'pinia'
|
|
import { useUnsavedWorkStore } from '@/stores/unsavedWork'
|
|
|
|
describe('unsaved work store', () => {
|
|
beforeEach(() => {
|
|
setActivePinia(createPinia())
|
|
})
|
|
|
|
it('blocks dirty work only when a role switch removes permission or leaves the page', () => {
|
|
const store = useUnsavedWorkStore()
|
|
store.upsert({
|
|
key: 'customer-form',
|
|
label: '客户资料',
|
|
dirty: true,
|
|
requiredPermission: 'customer:create',
|
|
})
|
|
store.upsert({
|
|
key: 'order-form',
|
|
label: '头程订单',
|
|
dirty: true,
|
|
requiredPermission: 'first-leg:create',
|
|
})
|
|
|
|
expect(store.findBlocking(new Set(['customer:create', 'first-leg:create']), false)).toEqual([])
|
|
expect(store.findBlocking(new Set(), false).map((entry) => entry.key)).toEqual([
|
|
'customer-form',
|
|
'order-form',
|
|
])
|
|
expect(store.findBlocking(new Set(['customer:create', 'first-leg:create']), true)
|
|
.map((entry) => entry.key)).toEqual(['customer-form', 'order-form'])
|
|
})
|
|
|
|
it('does not block clean work', () => {
|
|
const store = useUnsavedWorkStore()
|
|
store.upsert({
|
|
key: 'customer-form',
|
|
label: '客户资料',
|
|
dirty: false,
|
|
requiredPermission: 'customer:create',
|
|
})
|
|
|
|
expect(store.findBlocking(new Set(), true)).toEqual([])
|
|
})
|
|
|
|
it('removes an entry by key', () => {
|
|
const store = useUnsavedWorkStore()
|
|
store.upsert({ key: 'customer-form', label: '客户资料', dirty: true, requiredPermission: null })
|
|
|
|
store.remove('customer-form')
|
|
|
|
expect(store.entries).toEqual([])
|
|
})
|
|
|
|
it('replaces an existing entry with the same key', () => {
|
|
const store = useUnsavedWorkStore()
|
|
store.upsert({ key: 'customer-form', label: '旧名称', dirty: false, requiredPermission: null })
|
|
|
|
store.upsert({
|
|
key: 'customer-form',
|
|
label: '客户资料',
|
|
dirty: true,
|
|
requiredPermission: 'customer:create',
|
|
})
|
|
|
|
expect(store.entries).toEqual([{
|
|
key: 'customer-form',
|
|
label: '客户资料',
|
|
dirty: true,
|
|
requiredPermission: 'customer:create',
|
|
}])
|
|
})
|
|
|
|
it('clears every registered entry', () => {
|
|
const store = useUnsavedWorkStore()
|
|
store.upsert({ key: 'customer-form', label: '客户资料', dirty: true, requiredPermission: null })
|
|
store.upsert({ key: 'order-form', label: '头程订单', dirty: true, requiredPermission: null })
|
|
|
|
store.clear()
|
|
|
|
expect(store.entries).toEqual([])
|
|
})
|
|
})
|