mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-01-26 10:59:53 +00:00
## Summary Adds an editable Model Info Panel to show and modify asset details in the asset browser. ## Changes - Add `ModelInfoPanel` component with editable display name, description, model type, base models, and tags - Add `updateAssetMetadata` action in `assetsStore` with optimistic cache updates - Add shadcn-vue `Select` components with design system styling - Add utility functions in `assetMetadataUtils` for extracting model metadata - Convert `BaseModalLayout` right panel state to `defineModel` pattern - Add slide-in animation and collapse button for right panel - Add `class` prop to `PropertiesAccordionItem` for custom styling - Fix keyboard handling: Escape in TagsInput/TextArea doesn't close parent modal ## Testing - Unit tests for `ModelInfoPanel` component - Unit tests for `assetMetadataUtils` functions --------- Co-authored-by: Amp <amp@ampcode.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: GitHub Action <action@github.com>
44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest'
|
|
import { ref } from 'vue'
|
|
|
|
import { useAssetWidgetData } from '@/renderer/extensions/vueNodes/widgets/composables/useAssetWidgetData'
|
|
|
|
vi.mock('@/platform/distribution/types', () => ({
|
|
isCloud: false
|
|
}))
|
|
|
|
const mockUpdateModelsForNodeType = vi.fn()
|
|
const mockGetCategoryForNodeType = vi.fn()
|
|
|
|
vi.mock('@/stores/assetsStore', () => ({
|
|
useAssetsStore: () => ({
|
|
getAssets: () => [],
|
|
isModelLoading: () => false,
|
|
getError: () => undefined,
|
|
hasAssetKey: () => false,
|
|
updateModelsForNodeType: mockUpdateModelsForNodeType
|
|
})
|
|
}))
|
|
|
|
vi.mock('@/stores/modelToNodeStore', () => ({
|
|
useModelToNodeStore: () => ({
|
|
getCategoryForNodeType: mockGetCategoryForNodeType
|
|
})
|
|
}))
|
|
|
|
describe('useAssetWidgetData (desktop/isCloud=false)', () => {
|
|
it('returns empty/default values without calling stores', () => {
|
|
const nodeType = ref('CheckpointLoaderSimple')
|
|
const { category, assets, dropdownItems, isLoading, error } =
|
|
useAssetWidgetData(nodeType)
|
|
|
|
expect(category.value).toBeUndefined()
|
|
expect(assets.value).toEqual([])
|
|
expect(dropdownItems.value).toEqual([])
|
|
expect(isLoading.value).toBe(false)
|
|
expect(error.value).toBeNull()
|
|
expect(mockUpdateModelsForNodeType).not.toHaveBeenCalled()
|
|
expect(mockGetCategoryForNodeType).not.toHaveBeenCalled()
|
|
})
|
|
})
|