Skip to content

Commit 178be30

Browse files
committed
add simple unit tests for modelStore
1 parent 69cf159 commit 178be30

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import { setActivePinia, createPinia } from 'pinia'
2+
import { useModelStore } from '@/stores/modelStore'
3+
import { api } from '@/scripts/api'
4+
5+
// Mock the api
6+
jest.mock('@/scripts/api', () => ({
7+
api: {
8+
getModels: jest.fn(),
9+
viewMetadata: jest.fn()
10+
}
11+
}))
12+
13+
describe('useModelStore', () => {
14+
let store: ReturnType<typeof useModelStore>
15+
16+
beforeEach(() => {
17+
setActivePinia(createPinia())
18+
store = useModelStore()
19+
})
20+
21+
it('should load models', async () => {
22+
23+
;(api.getModels as jest.Mock).mockResolvedValue(['sdxl.safetensors', 'sdv15.safetensors', 'noinfo.safetensors'])
24+
;(api.viewMetadata as jest.Mock).mockImplementation((_, model) => {
25+
if (model === 'noinfo.safetensors') {
26+
return Promise.resolve({})
27+
}
28+
return Promise.resolve({
29+
'modelspec.title': `Title of ${model}`,
30+
'display_name': 'Should not show',
31+
'modelspec.architecture': 'stable-diffusion-xl-base-v1',
32+
'modelspec.author': `Author of ${model}`,
33+
'modelspec.description': `Description of ${model}`,
34+
'modelspec.resolution': '1024x1024',
35+
'trigger_phrase': `Trigger phrase of ${model}`,
36+
'usage_hint': `Usage hint of ${model}`,
37+
'tags': `tags,for,${model}`
38+
})
39+
})
40+
41+
const folderStore = await store.getModelsInFolderCached('checkpoints')
42+
expect(folderStore).not.toBeNull()
43+
expect(Object.keys(folderStore.models)).toHaveLength(3)
44+
})
45+
46+
it('should load model metadata', async () => {
47+
const folderStore = await store.getModelsInFolderCached('checkpoints')
48+
const model = folderStore.models['sdxl.safetensors']
49+
await model.load()
50+
expect(model.title).toBe('Title of sdxl.safetensors')
51+
expect(model.architecture_id).toBe('stable-diffusion-xl-base-v1')
52+
expect(model.author).toBe('Author of sdxl.safetensors')
53+
expect(model.description).toBe('Description of sdxl.safetensors')
54+
expect(model.resolution).toBe('1024x1024')
55+
expect(model.trigger_phrase).toBe('Trigger phrase of sdxl.safetensors')
56+
expect(model.usage_hint).toBe('Usage hint of sdxl.safetensors')
57+
expect(model.tags).toHaveLength(3)
58+
})
59+
60+
it('should handle no metadata', async () => {
61+
const folderStore = await store.getModelsInFolderCached('checkpoints')
62+
const model = folderStore.models['noinfo.safetensors']
63+
await model.load()
64+
expect(model.title).toBe('noinfo.safetensors')
65+
expect(model.architecture_id).toBe('')
66+
expect(model.author).toBe('')
67+
expect(model.description).toBe('')
68+
expect(model.resolution).toBe('')
69+
})
70+
71+
it('should cache model information', async () => {
72+
const folderStore1 = await store.getModelsInFolderCached('checkpoints')
73+
const folderStore2 = await store.getModelsInFolderCached('checkpoints')
74+
expect(api.getModels).toHaveBeenCalledTimes(1)
75+
})
76+
})

0 commit comments

Comments
 (0)