Files
admin-web/src/stores/unsavedWork.test.ts
T
2026-07-30 17:59:43 +08:00

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([])
})
})