mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-25 00:39:49 +00:00
workflow caching cascade persistence
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
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()
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user