Files
ComfyUI_frontend/tests-ui/tests/platform/workflow/persistence/draftCache.test.ts
2026-01-26 12:46:25 +08:00

78 lines
2.3 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
MAX_DRAFTS,
type WorkflowDraftSnapshot,
createDraftCacheState,
mostRecentDraftPath,
moveDraft,
removeDraft,
touchEntry,
upsertDraft
} from '@/platform/workflow/persistence/base/draftCache'
const createSnapshot = (name: string): WorkflowDraftSnapshot => ({
data: JSON.stringify({ name }),
updatedAt: Date.now(),
name,
isTemporary: true
})
describe('draftCache helpers', () => {
it('touchEntry moves path to end', () => {
expect(touchEntry(['a', 'b'], 'a')).toEqual(['b', 'a'])
expect(touchEntry(['a', 'b'], 'c')).toEqual(['a', 'b', 'c'])
})
it('upsertDraft stores snapshot and applies LRU', () => {
let state = createDraftCacheState()
for (let i = 0; i < MAX_DRAFTS; i++) {
const path = `workflows/Draft${i}.json`
state = upsertDraft(state, path, createSnapshot(String(i)))
}
expect(Object.keys(state.drafts).length).toBe(MAX_DRAFTS)
state = upsertDraft(state, 'workflows/New.json', createSnapshot('new'))
expect(Object.keys(state.drafts).length).toBe(MAX_DRAFTS)
expect(state.drafts).not.toHaveProperty('workflows/Draft0.json')
expect(state.order[state.order.length - 1]).toBe('workflows/New.json')
})
it('removeDraft clears entry and order', () => {
const state = upsertDraft(
createDraftCacheState(),
'workflows/test.json',
createSnapshot('test')
)
const nextState = removeDraft(state, 'workflows/test.json')
expect(nextState.drafts).toEqual({})
expect(nextState.order).toEqual([])
})
it('moveDraft renames entry and updates order', () => {
const state = upsertDraft(
createDraftCacheState(),
'workflows/old.json',
createSnapshot('old')
)
const nextState = moveDraft(
state,
'workflows/old.json',
'workflows/new.json',
'new'
)
expect(nextState.drafts).not.toHaveProperty('workflows/old.json')
expect(nextState.drafts['workflows/new.json']?.name).toBe('new')
expect(nextState.order).toEqual(['workflows/new.json'])
})
it('mostRecentDraftPath returns last entry', () => {
const state = createDraftCacheState({}, ['a', 'b', 'c'])
expect(mostRecentDraftPath(state.order)).toBe('c')
expect(mostRecentDraftPath([])).toBeNull()
})
})