@@ -5,18 +5,10 @@ import { beforeEach, describe, expect, it, vi } from 'vitest'
55import AssetBrowserModal from '@/platform/assets/components/AssetBrowserModal.vue'
66import type { AssetItem } from '@/platform/assets/schemas/assetSchema'
77
8- const mockAssetService = vi . hoisted ( ( ) => ( {
9- getAssetsForNodeType : vi . fn ( ) ,
10- getAssetsByTag : vi . fn ( ) ,
11- getAssetDetails : vi . fn ( ( id : string ) =>
12- Promise . resolve ( {
13- id,
14- name : 'Test Model' ,
15- user_metadata : {
16- filename : 'Test Model'
17- }
18- } )
19- )
8+ const mockAssetsStore = vi . hoisted ( ( ) => ( {
9+ modelAssetsByNodeType : new Map < string , unknown [ ] > ( ) ,
10+ modelLoadingByNodeType : new Map < string , boolean > ( ) ,
11+ updateModelsForNodeType : vi . fn ( )
2012} ) )
2113
2214vi . mock ( '@/i18n' , ( ) => ( {
@@ -25,8 +17,8 @@ vi.mock('@/i18n', () => ({
2517 d : ( date : Date ) => date . toLocaleDateString ( )
2618} ) )
2719
28- vi . mock ( '@/platform/assets/services/assetService ' , ( ) => ( {
29- assetService : mockAssetService
20+ vi . mock ( '@/stores/assetsStore ' , ( ) => ( {
21+ useAssetsStore : ( ) => mockAssetsStore
3022} ) )
3123
3224vi . mock ( '@/stores/modelToNodeStore' , ( ) => ( {
@@ -191,8 +183,9 @@ describe('AssetBrowserModal', () => {
191183 }
192184
193185 beforeEach ( ( ) => {
194- mockAssetService . getAssetsForNodeType . mockReset ( )
195- mockAssetService . getAssetsByTag . mockReset ( )
186+ mockAssetsStore . modelAssetsByNodeType . clear ( )
187+ mockAssetsStore . modelLoadingByNodeType . clear ( )
188+ mockAssetsStore . updateModelsForNodeType . mockReset ( )
196189 } )
197190
198191 describe ( 'Integration with useAssetBrowser' , ( ) => {
@@ -201,7 +194,10 @@ describe('AssetBrowserModal', () => {
201194 createTestAsset ( 'asset1' , 'Model A' , 'checkpoints' ) ,
202195 createTestAsset ( 'asset2' , 'Model B' , 'loras' )
203196 ]
204- mockAssetService . getAssetsForNodeType . mockResolvedValueOnce ( assets )
197+ mockAssetsStore . modelAssetsByNodeType . set (
198+ 'CheckpointLoaderSimple' ,
199+ assets
200+ )
205201
206202 const wrapper = createWrapper ( { nodeType : 'CheckpointLoaderSimple' } )
207203 await flushPromises ( )
@@ -218,7 +214,10 @@ describe('AssetBrowserModal', () => {
218214 createTestAsset ( 'c1' , 'model.safetensors' , 'checkpoints' ) ,
219215 createTestAsset ( 'l1' , 'lora.pt' , 'loras' )
220216 ]
221- mockAssetService . getAssetsForNodeType . mockResolvedValueOnce ( assets )
217+ mockAssetsStore . modelAssetsByNodeType . set (
218+ 'CheckpointLoaderSimple' ,
219+ assets
220+ )
222221
223222 const wrapper = createWrapper ( {
224223 nodeType : 'CheckpointLoaderSimple' ,
@@ -234,31 +233,39 @@ describe('AssetBrowserModal', () => {
234233 } )
235234
236235 describe ( 'Data fetching' , ( ) => {
237- it ( 'fetches assets for node type' , async ( ) => {
238- mockAssetService . getAssetsForNodeType . mockResolvedValueOnce ( [ ] )
239-
236+ it ( 'triggers store refresh for node type on mount' , async ( ) => {
240237 createWrapper ( { nodeType : 'CheckpointLoaderSimple' } )
241238 await flushPromises ( )
242239
243- expect ( mockAssetService . getAssetsForNodeType ) . toHaveBeenCalledWith (
240+ expect ( mockAssetsStore . updateModelsForNodeType ) . toHaveBeenCalledWith (
244241 'CheckpointLoaderSimple'
245242 )
246243 } )
247244
248- it ( 'fetches assets for tag when node type not provided' , async ( ) => {
249- mockAssetService . getAssetsByTag . mockResolvedValueOnce ( [ ] )
245+ it ( 'displays cached assets immediately from store' , async ( ) => {
246+ const assets = [ createTestAsset ( 'asset1' , 'Cached Model' , 'checkpoints' ) ]
247+ mockAssetsStore . modelAssetsByNodeType . set (
248+ 'CheckpointLoaderSimple' ,
249+ assets
250+ )
250251
251- createWrapper ( { assetType : 'loras' } )
252- await flushPromises ( )
252+ const wrapper = createWrapper ( { nodeType : 'CheckpointLoaderSimple' } )
253+
254+ const assetGrid = wrapper . findComponent ( { name : 'AssetGrid' } )
255+ const gridAssets = assetGrid . props ( 'assets' ) as AssetItem [ ]
253256
254- expect ( mockAssetService . getAssetsByTag ) . toHaveBeenCalledWith ( 'loras' )
257+ expect ( gridAssets ) . toHaveLength ( 1 )
258+ expect ( gridAssets [ 0 ] . name ) . toBe ( 'Cached Model' )
255259 } )
256260 } )
257261
258262 describe ( 'Asset Selection' , ( ) => {
259263 it ( 'emits asset-select event when asset is selected' , async ( ) => {
260264 const assets = [ createTestAsset ( 'asset1' , 'Model A' , 'checkpoints' ) ]
261- mockAssetService . getAssetsForNodeType . mockResolvedValueOnce ( assets )
265+ mockAssetsStore . modelAssetsByNodeType . set (
266+ 'CheckpointLoaderSimple' ,
267+ assets
268+ )
262269
263270 const wrapper = createWrapper ( { nodeType : 'CheckpointLoaderSimple' } )
264271 await flushPromises ( )
@@ -271,7 +278,10 @@ describe('AssetBrowserModal', () => {
271278
272279 it ( 'executes onSelect callback when provided' , async ( ) => {
273280 const assets = [ createTestAsset ( 'asset1' , 'Model A' , 'checkpoints' ) ]
274- mockAssetService . getAssetsForNodeType . mockResolvedValueOnce ( assets )
281+ mockAssetsStore . modelAssetsByNodeType . set (
282+ 'CheckpointLoaderSimple' ,
283+ assets
284+ )
275285
276286 const onSelect = vi . fn ( )
277287 const wrapper = createWrapper ( {
@@ -289,8 +299,6 @@ describe('AssetBrowserModal', () => {
289299
290300 describe ( 'Left Panel Conditional Logic' , ( ) => {
291301 it ( 'hides left panel by default when showLeftPanel is undefined' , async ( ) => {
292- mockAssetService . getAssetsForNodeType . mockResolvedValueOnce ( [ ] )
293-
294302 const wrapper = createWrapper ( { nodeType : 'CheckpointLoaderSimple' } )
295303 await flushPromises ( )
296304
@@ -299,8 +307,6 @@ describe('AssetBrowserModal', () => {
299307 } )
300308
301309 it ( 'shows left panel when showLeftPanel prop is explicitly true' , async ( ) => {
302- mockAssetService . getAssetsForNodeType . mockResolvedValueOnce ( [ ] )
303-
304310 const wrapper = createWrapper ( {
305311 nodeType : 'CheckpointLoaderSimple' ,
306312 showLeftPanel : true
@@ -318,7 +324,10 @@ describe('AssetBrowserModal', () => {
318324 createTestAsset ( 'asset1' , 'Model A' , 'checkpoints' ) ,
319325 createTestAsset ( 'asset2' , 'Model B' , 'loras' )
320326 ]
321- mockAssetService . getAssetsForNodeType . mockResolvedValueOnce ( assets )
327+ mockAssetsStore . modelAssetsByNodeType . set (
328+ 'CheckpointLoaderSimple' ,
329+ assets
330+ )
322331
323332 const wrapper = createWrapper ( {
324333 nodeType : 'CheckpointLoaderSimple' ,
@@ -339,8 +348,6 @@ describe('AssetBrowserModal', () => {
339348
340349 describe ( 'Title Management' , ( ) => {
341350 it ( 'passes custom title to BaseModalLayout when title prop provided' , async ( ) => {
342- mockAssetService . getAssetsForNodeType . mockResolvedValueOnce ( [ ] )
343-
344351 const wrapper = createWrapper ( {
345352 nodeType : 'CheckpointLoaderSimple' ,
346353 title : 'Custom Title'
@@ -353,7 +360,10 @@ describe('AssetBrowserModal', () => {
353360
354361 it ( 'passes computed contentTitle to BaseModalLayout when no title prop' , async ( ) => {
355362 const assets = [ createTestAsset ( 'asset1' , 'Model A' , 'checkpoints' ) ]
356- mockAssetService . getAssetsForNodeType . mockResolvedValueOnce ( assets )
363+ mockAssetsStore . modelAssetsByNodeType . set (
364+ 'CheckpointLoaderSimple' ,
365+ assets
366+ )
357367
358368 const wrapper = createWrapper ( { nodeType : 'CheckpointLoaderSimple' } )
359369 await flushPromises ( )
0 commit comments