opsdash-app/opsdash/test/widgetPersistence.test.ts
2025-12-26 09:13:18 +07:00

64 lines
2.3 KiB
TypeScript

import { describe, it, expect } from 'vitest'
import { createDefaultTargetsConfig } from '../src/services/targets'
import { createDefaultWidgetTabs } from '../src/services/widgetsRegistry'
function serializeTabs(tabs: any) {
return JSON.parse(JSON.stringify(tabs))
}
describe('widget persistence with local targets', () => {
it('keeps local targets config across export/import', () => {
const base = createDefaultTargetsConfig()
const tabs = createDefaultWidgetTabs('standard')
const widgets = tabs.tabs[0].widgets
let targetsWidget = widgets.find((w) => w.type === 'targets_v2')
if (!targetsWidget) {
targetsWidget = {
id: 'widget-targets_v2-test',
type: 'targets_v2',
options: {},
layout: { width: 'half', height: 'm', order: 10 },
version: 1,
}
widgets.push(targetsWidget)
}
targetsWidget.options = {
useLocalConfig: true,
localConfig: { ...base, totalHours: 12 },
}
const exported = serializeTabs(tabs)
const imported = serializeTabs(exported)
const importedTargets = imported.tabs[0].widgets.find((w: any) => w.type === 'targets_v2')
expect(importedTargets.options.useLocalConfig).toBe(true)
expect(importedTargets.options.localConfig.totalHours).toBe(12)
})
it('preserves removed categories inside local targets config on reload', () => {
const base = createDefaultTargetsConfig()
// remove a category locally
const trimmed = { ...base, categories: base.categories.slice(0, 1) }
const tabs = createDefaultWidgetTabs('standard')
const widgets = tabs.tabs[0].widgets.map((w) =>
w.type === 'targets_v2'
? { ...w, options: { useLocalConfig: true, localConfig: trimmed } }
: w,
)
if (!widgets.some((w) => w.type === 'targets_v2')) {
widgets.push({
id: 'widget-targets_v2-test',
type: 'targets_v2',
options: { useLocalConfig: true, localConfig: trimmed },
layout: { width: 'half', height: 'm', order: 10 },
version: 1,
})
}
tabs.tabs[0].widgets = widgets
const imported = JSON.parse(JSON.stringify(tabs))
const t = imported.tabs[0].widgets.find((w: any) => w.type === 'targets_v2')
expect(t.options.localConfig.categories).toHaveLength(1)
})
})