Files
supabase/apps/studio/components/interfaces/HomeNew/ProjectUsageSection.utils.test.ts
T

71 lines
1.9 KiB
TypeScript

import { describe, it, expect, vi } from 'vitest'
import { toServiceStatsMap } from './ProjectUsageSection.utils'
import type { ProjectMetricsRow } from 'data/analytics/project-metrics-query'
const mkRow = (
n: number,
service: ProjectMetricsRow['service'],
time_window: ProjectMetricsRow['time_window']
): ProjectMetricsRow => ({
timestamp: (1700000000000 + n * 60000) * 1000, // microseconds
service,
time_window,
ok_count: n,
warning_count: 0,
error_count: 0,
})
const emptyRows: ProjectMetricsRow[] = []
describe('toServiceStatsMap', () => {
it('returns empty arrays when no data', () => {
const onRefresh = vi.fn()
const map = toServiceStatsMap({
data: emptyRows,
isLoading: false,
error: undefined,
onRefresh,
})
expect(map.db.current.eventChartData).toEqual([])
expect(map.functions.previous.eventChartData).toEqual([])
expect(map.auth.current.isLoading).toBe(false)
expect(map.storage.current.error).toBeNull()
map.realtime.current.refresh()
expect(onRefresh).toHaveBeenCalledTimes(1)
})
it('maps data rows through for each service', () => {
const rows: ProjectMetricsRow[] = [
mkRow(1, 'db', 'current'),
mkRow(2, 'db', 'current'),
mkRow(0, 'db', 'previous'),
]
const map = toServiceStatsMap({
data: rows,
isLoading: true,
error: undefined,
onRefresh: () => {},
})
expect(map.db.current.eventChartData.length).toBe(2)
expect(map.db.previous.eventChartData.length).toBe(1)
expect(map.db.current.isLoading).toBe(true)
})
it('propagates errors to all services', () => {
const err = new Error('boom')
const map = toServiceStatsMap({
data: emptyRows,
isLoading: false,
error: err,
onRefresh: () => {},
})
expect(map.db.current.error).toBe(err)
expect(map.functions.previous.error).toBe(err)
})
})