mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-05 23:50:08 +00:00
78 lines
2.3 KiB
TypeScript
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()
|
|
})
|
|
})
|