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