mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-03 14:54:37 +00:00
97 lines
2.8 KiB
TypeScript
97 lines
2.8 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest'
|
|
|
|
import { useAssetBrowserDialog } from '@/platform/assets/composables/useAssetBrowserDialog'
|
|
import { useDialogStore } from '@/stores/dialogStore'
|
|
|
|
// Mock the dialog store
|
|
vi.mock('@/stores/dialogStore')
|
|
|
|
// Mock the asset service
|
|
vi.mock('@/platform/assets/services/assetService', () => ({
|
|
assetService: {
|
|
getAssetsForNodeType: vi.fn().mockResolvedValue([])
|
|
}
|
|
}))
|
|
|
|
// Test factory functions
|
|
interface AssetBrowserProps {
|
|
nodeType: string
|
|
inputName: string
|
|
onAssetSelected?: (filename: string) => void
|
|
}
|
|
|
|
function createAssetBrowserProps(
|
|
overrides: Partial<AssetBrowserProps> = {}
|
|
): AssetBrowserProps {
|
|
return {
|
|
nodeType: 'CheckpointLoaderSimple',
|
|
inputName: 'ckpt_name',
|
|
...overrides
|
|
}
|
|
}
|
|
|
|
describe('useAssetBrowserDialog', () => {
|
|
describe('Asset Selection Flow', () => {
|
|
it('auto-closes dialog when asset is selected', async () => {
|
|
// Create fresh mocks for this test
|
|
const mockShowDialog = vi.fn()
|
|
const mockCloseDialog = vi.fn()
|
|
|
|
vi.mocked(useDialogStore).mockReturnValue({
|
|
showDialog: mockShowDialog,
|
|
closeDialog: mockCloseDialog
|
|
} as Partial<ReturnType<typeof useDialogStore>> as ReturnType<
|
|
typeof useDialogStore
|
|
>)
|
|
|
|
const assetBrowserDialog = useAssetBrowserDialog()
|
|
const onAssetSelected = vi.fn()
|
|
const props = createAssetBrowserProps({ onAssetSelected })
|
|
|
|
await assetBrowserDialog.show(props)
|
|
|
|
// Get the onSelect handler that was passed to the dialog
|
|
const dialogCall = mockShowDialog.mock.calls[0][0]
|
|
const onSelectHandler = dialogCall.props.onSelect
|
|
|
|
// Simulate asset selection
|
|
onSelectHandler('selected-asset-path')
|
|
|
|
// Should call the original callback and trigger hide animation
|
|
expect(onAssetSelected).toHaveBeenCalledWith('selected-asset-path')
|
|
expect(mockCloseDialog).toHaveBeenCalledWith({
|
|
key: 'global-asset-browser'
|
|
})
|
|
})
|
|
|
|
it('closes dialog when close handler is called', async () => {
|
|
// Create fresh mocks for this test
|
|
const mockShowDialog = vi.fn()
|
|
const mockCloseDialog = vi.fn()
|
|
|
|
vi.mocked(useDialogStore).mockReturnValue({
|
|
showDialog: mockShowDialog,
|
|
closeDialog: mockCloseDialog
|
|
} as Partial<ReturnType<typeof useDialogStore>> as ReturnType<
|
|
typeof useDialogStore
|
|
>)
|
|
|
|
const assetBrowserDialog = useAssetBrowserDialog()
|
|
const props = createAssetBrowserProps()
|
|
|
|
await assetBrowserDialog.show(props)
|
|
|
|
// Get the onClose handler that was passed to the dialog
|
|
const dialogCall = mockShowDialog.mock.calls[0][0]
|
|
const onCloseHandler = dialogCall.props.onClose
|
|
|
|
// Simulate dialog close
|
|
onCloseHandler()
|
|
|
|
expect(mockCloseDialog).toHaveBeenCalledWith({
|
|
key: 'global-asset-browser'
|
|
})
|
|
})
|
|
})
|
|
})
|