Files
ComfyUI_frontend/tests-ui/platform/settings/settingStore.test.ts

99 lines
2.2 KiB
TypeScript

import { describe, it, expect, beforeEach, vi } from 'vitest'
import { setActivePinia, createPinia } from 'pinia'
const hoisted = vi.hoisted(() => ({
trackSettingChanged: vi.fn(),
storeSetting: vi.fn().mockResolvedValue(undefined)
}))
let isSettingsDialogOpen = false
vi.mock('@/platform/telemetry', () => {
return {
useTelemetry: () => ({
trackSettingChanged: hoisted.trackSettingChanged
})
}
})
vi.mock('@/stores/dialogStore', () => {
return {
useDialogStore: () => ({
isDialogOpen: (key: string) =>
isSettingsDialogOpen && key === 'global-settings'
})
}
})
vi.mock('@/scripts/api', () => {
return {
api: {
storeSetting: hoisted.storeSetting,
getSettings: vi.fn().mockResolvedValue({})
}
}
})
vi.mock('@/scripts/app', () => {
return {
app: {
ui: {
settings: {
dispatchChange: vi.fn()
}
}
}
}
})
import { useSettingStore } from '@/platform/settings/settingStore'
describe('useSettingStore telemetry', () => {
beforeEach(() => {
setActivePinia(createPinia())
hoisted.trackSettingChanged.mockReset()
hoisted.storeSetting.mockReset().mockResolvedValue(undefined)
isSettingsDialogOpen = false
})
it('tracks telemetry when settings dialog is open', async () => {
isSettingsDialogOpen = true
const store = useSettingStore()
store.addSetting({
id: 'main.sub.setting.name',
name: 'Test Setting',
type: 'text',
defaultValue: 'old'
})
await store.set('main.sub.setting.name', 'new')
expect(hoisted.trackSettingChanged).toHaveBeenCalledTimes(1)
expect(hoisted.trackSettingChanged).toHaveBeenCalledWith({
setting_id: 'main.sub.setting.name',
input_type: 'text',
category: 'main',
sub_category: 'sub',
previous_value: 'old',
new_value: 'new'
})
})
it('does not track telemetry when settings dialog is closed', async () => {
isSettingsDialogOpen = false
const store = useSettingStore()
store.addSetting({
id: 'single.setting',
name: 'Another Setting',
type: 'text',
defaultValue: 'x'
})
await store.set('single.setting', 'y')
expect(hoisted.trackSettingChanged).not.toHaveBeenCalled()
})
})