Files
Aether/frontend/src/views/admin/system-settings/__tests__/useSystemConfig.spec.ts
T

84 lines
2.6 KiB
TypeScript
Raw Normal View History

import { beforeEach, describe, expect, it, vi } from 'vitest'
const { getAllSystemConfigsMock, updateSystemConfigMock } = vi.hoisted(() => ({
getAllSystemConfigsMock: vi.fn(),
updateSystemConfigMock: vi.fn(),
}))
vi.mock('@/api/admin', () => ({
adminApi: {
getAllSystemConfigs: getAllSystemConfigsMock,
updateSystemConfig: updateSystemConfigMock,
getSystemVersion: vi.fn(),
},
}))
vi.mock('@/composables/useToast', () => ({
useToast: () => ({
success: vi.fn(),
error: vi.fn(),
}),
}))
vi.mock('@/composables/useSiteInfo', () => ({
useSiteInfo: () => ({
refreshSiteInfo: vi.fn(),
}),
}))
vi.mock('@/utils/logger', () => ({
log: {
error: vi.fn(),
},
}))
import { useSystemConfig } from '../composables/useSystemConfig'
describe('useSystemConfig', () => {
beforeEach(() => {
getAllSystemConfigsMock.mockReset()
updateSystemConfigMock.mockReset()
})
it('loads config keys in one request and keeps change detection disabled until the baseline is ready', async () => {
let resolveConfigs: ((value: Array<{ key: string, value: unknown, is_set?: boolean }>) => void) | null = null
getAllSystemConfigsMock.mockImplementation(() => new Promise((resolve) => {
resolveConfigs = resolve
}))
const state = useSystemConfig()
const loadPromise = state.loadSystemConfig()
expect(getAllSystemConfigsMock).toHaveBeenCalledTimes(1)
expect(getAllSystemConfigsMock).toHaveBeenCalledWith({ cacheTtlMs: 30_000 })
state.systemConfig.value.request_record_level = 'headers'
expect(state.systemConfigLoading.value).toBe(true)
expect(state.hasLogConfigChanges.value).toBe(false)
resolveConfigs?.([
{ key: 'request_record_level', value: 'basic' },
{ key: 'proxy_node_metrics_cleanup_batch_size', value: 5000 },
])
await loadPromise
expect(state.systemConfigLoading.value).toBe(false)
expect(state.systemConfig.value.request_record_level).toBe('basic')
expect(state.hasLogConfigChanges.value).toBe(false)
state.systemConfig.value.request_record_level = 'full'
expect(state.hasLogConfigChanges.value).toBe(true)
})
it('uses backend-compatible defaults when config rows have not been persisted yet', async () => {
getAllSystemConfigsMock.mockResolvedValue([])
const state = useSystemConfig()
await state.loadSystemConfig()
expect(state.systemConfig.value.request_record_level).toBe('basic')
expect(state.systemConfig.value).not.toHaveProperty('max_request_body_size')
expect(state.systemConfig.value).not.toHaveProperty('max_response_body_size')
})
})