mirror of
https://github.com/supabase/supabase.git
synced 2026-05-08 18:00:20 -04:00
4a0bb36ca8
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Ivan Vasilov <vasilov.ivan@gmail.com>
129 lines
3.3 KiB
TypeScript
129 lines
3.3 KiB
TypeScript
import { describe, expect, test } from 'vitest'
|
|
|
|
import {
|
|
calculatePercentageChange,
|
|
getApiSuccessRates,
|
|
getAuthSuccessRates,
|
|
getMetricValues,
|
|
type AuthMetricsResponse,
|
|
} from './OverviewUsage.constants'
|
|
import { RawAuthMetricsResponseSchema } from './OverviewUsage.schema'
|
|
|
|
const validSample = {
|
|
result: [
|
|
{
|
|
period: 'current',
|
|
active_users: 5,
|
|
api_error_requests: 0,
|
|
api_total_requests: 38,
|
|
auth_total_errors: 0,
|
|
auth_total_requests: 0,
|
|
password_reset_requests: 0,
|
|
sign_up_count: 4,
|
|
},
|
|
{
|
|
period: 'previous',
|
|
active_users: 0,
|
|
api_error_requests: 0,
|
|
api_total_requests: 0,
|
|
auth_total_errors: 0,
|
|
auth_total_requests: 0,
|
|
password_reset_requests: 0,
|
|
sign_up_count: 0,
|
|
},
|
|
],
|
|
error: null,
|
|
}
|
|
|
|
describe('RawAuthMetricsResponseSchema', () => {
|
|
test('parses valid payload', () => {
|
|
const parsed = RawAuthMetricsResponseSchema.safeParse(validSample)
|
|
expect(parsed.success).toBe(true)
|
|
})
|
|
|
|
test('rejects negative numbers', () => {
|
|
const invalid = {
|
|
...validSample,
|
|
result: [{ ...validSample.result[0], active_users: -1 }, validSample.result[1]],
|
|
}
|
|
const parsed = RawAuthMetricsResponseSchema.safeParse(invalid)
|
|
expect(parsed.success).toBe(false)
|
|
})
|
|
|
|
test('rejects missing fields', () => {
|
|
const invalid = {
|
|
result: [
|
|
{
|
|
period: 'current',
|
|
active_users: 1,
|
|
api_error_requests: 0,
|
|
auth_total_errors: 0,
|
|
auth_total_requests: 0,
|
|
password_reset_requests: 0,
|
|
sign_up_count: 0,
|
|
},
|
|
],
|
|
error: null,
|
|
}
|
|
const parsed = RawAuthMetricsResponseSchema.safeParse(invalid)
|
|
expect(parsed.success).toBe(false)
|
|
})
|
|
})
|
|
|
|
const sampleMetrics: AuthMetricsResponse = {
|
|
result: [
|
|
{
|
|
period: 'current',
|
|
active_users: 10,
|
|
api_error_requests: 2,
|
|
api_total_requests: 50,
|
|
auth_total_errors: 1,
|
|
auth_total_requests: 20,
|
|
password_reset_requests: 3,
|
|
sign_up_count: 7,
|
|
},
|
|
{
|
|
period: 'previous',
|
|
active_users: 5,
|
|
api_error_requests: 5,
|
|
api_total_requests: 25,
|
|
auth_total_errors: 2,
|
|
auth_total_requests: 10,
|
|
password_reset_requests: 1,
|
|
sign_up_count: 4,
|
|
},
|
|
],
|
|
error: null,
|
|
}
|
|
|
|
describe('OverviewUsage helpers', () => {
|
|
test('getMetricValues maps snake_case to camel metric names', () => {
|
|
const { current, previous } = getMetricValues(sampleMetrics, 'signUpCount')
|
|
expect(current).toBe(7)
|
|
expect(previous).toBe(4)
|
|
})
|
|
|
|
test('getMetricValues returns 0 defaults when metrics undefined', () => {
|
|
const { current, previous } = getMetricValues(undefined, 'activeUsers')
|
|
expect(current).toBe(0)
|
|
expect(previous).toBe(0)
|
|
})
|
|
|
|
test('calculatePercentageChange handles zero previous', () => {
|
|
expect(calculatePercentageChange(10, 0)).toBe(100)
|
|
expect(calculatePercentageChange(0, 0)).toBe(0)
|
|
})
|
|
|
|
test('getApiSuccessRates computes success rates correctly', () => {
|
|
const { current, previous } = getApiSuccessRates(sampleMetrics)
|
|
expect(current).toBeCloseTo(96)
|
|
expect(previous).toBeCloseTo(80)
|
|
})
|
|
|
|
test('getAuthSuccessRates computes success rates correctly', () => {
|
|
const { current, previous } = getAuthSuccessRates(sampleMetrics)
|
|
expect(current).toBeCloseTo(95)
|
|
expect(previous).toBeCloseTo(80)
|
|
})
|
|
})
|