fix(ui): refresh Server disk warning after cached revalidation
This commit is contained in:
@@ -787,8 +787,6 @@ async function connectToWifi(password: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Disk space
|
// Disk space
|
||||||
const diskWarning = ref<{ level: 'warning' | 'critical'; used_percent: number; free_bytes: number } | null>(null)
|
|
||||||
const diskEncrypted = ref(false)
|
|
||||||
const diskCleaning = ref(false)
|
const diskCleaning = ref(false)
|
||||||
|
|
||||||
// 02-06: the seventh Server load group. TTL 10s (fast tier, same as
|
// 02-06: the seventh Server load group. TTL 10s (fast tier, same as
|
||||||
@@ -805,15 +803,17 @@ const diskStatusRes = useCachedResource<{ used_bytes: number; total_bytes: numbe
|
|||||||
persist: true,
|
persist: true,
|
||||||
fetcher: () => rpcClient.diskStatus(),
|
fetcher: () => rpcClient.diskStatus(),
|
||||||
})
|
})
|
||||||
function loadDiskStatus() {
|
// Reactivation refreshes the cached resource directly. Derive its display
|
||||||
return diskStatusRes.refresh().then(() => {
|
// state reactively so a successful refresh cannot leave an old warning behind.
|
||||||
|
const diskWarning = computed(() => {
|
||||||
const res = diskStatusRes.data.value
|
const res = diskStatusRes.data.value
|
||||||
if (!res) return
|
return res?.level === 'warning' || res?.level === 'critical'
|
||||||
diskEncrypted.value = !!(res as Record<string, unknown>).encrypted
|
? { level: res.level, used_percent: res.used_percent, free_bytes: res.free_bytes }
|
||||||
if (res.level === 'warning' || res.level === 'critical') {
|
: null
|
||||||
diskWarning.value = { level: res.level, used_percent: res.used_percent, free_bytes: res.free_bytes }
|
})
|
||||||
} else { diskWarning.value = null }
|
const diskEncrypted = computed(() => !!diskStatusRes.data.value?.encrypted)
|
||||||
})
|
function loadDiskStatus() {
|
||||||
|
return diskStatusRes.refresh()
|
||||||
}
|
}
|
||||||
|
|
||||||
async function runDiskCleanup() {
|
async function runDiskCleanup() {
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ const dnsStatusMock = vi.fn(async () => ({
|
|||||||
provider: 'system', servers: [], doh_enabled: false, doh_url: null, resolv_conf_servers: [],
|
provider: 'system', servers: [], doh_enabled: false, doh_url: null, resolv_conf_servers: [],
|
||||||
}))
|
}))
|
||||||
const diskStatusMock = vi.fn(async () => ({
|
const diskStatusMock = vi.fn(async () => ({
|
||||||
used_bytes: 0, total_bytes: 0, free_bytes: 0, used_percent: 0, level: 'ok' as const,
|
used_bytes: 0, total_bytes: 0, free_bytes: 0, used_percent: 0, level: 'ok' as 'ok' | 'warning' | 'critical', encrypted: false,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
vi.mock('@/api/rpc-client', () => ({
|
vi.mock('@/api/rpc-client', () => ({
|
||||||
@@ -296,3 +296,25 @@ describe('Server tab cache (Task 1): seven load groups', () => {
|
|||||||
wrapper.unmount()
|
wrapper.unmount()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('Disk status display follows cached revalidation', () => {
|
||||||
|
it('clears an old warning after freeing space and revisiting Server', async () => {
|
||||||
|
diskStatusMock.mockResolvedValueOnce({ used_bytes: 90, total_bytes: 100, free_bytes: 10, used_percent: 90, level: 'critical', encrypted: true })
|
||||||
|
const wrapper = mountServerHost(); await flushPromises()
|
||||||
|
expect(wrapper.text()).toContain('90.0% used')
|
||||||
|
await toggleTab(wrapper, false); vi.advanceTimersByTime(12000)
|
||||||
|
diskStatusMock.mockResolvedValueOnce({ used_bytes: 50, total_bytes: 100, free_bytes: 50, used_percent: 50, level: 'ok', encrypted: false })
|
||||||
|
await toggleTab(wrapper, true); await flushPromises()
|
||||||
|
expect(wrapper.text()).not.toContain('90.0% used'); expect(wrapper.text()).not.toContain('remaining')
|
||||||
|
wrapper.unmount()
|
||||||
|
})
|
||||||
|
it('shows a newly returned disk warning on re-entry', async () => {
|
||||||
|
const wrapper = mountServerHost(); await flushPromises()
|
||||||
|
expect(wrapper.text()).not.toContain('95.0% used')
|
||||||
|
await toggleTab(wrapper, false); vi.advanceTimersByTime(12000)
|
||||||
|
diskStatusMock.mockResolvedValueOnce({ used_bytes: 95, total_bytes: 100, free_bytes: 5, used_percent: 95, level: 'critical', encrypted: true })
|
||||||
|
await toggleTab(wrapper, true); await flushPromises()
|
||||||
|
expect(wrapper.text()).toContain('95.0% used')
|
||||||
|
wrapper.unmount()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user