| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- import { describe, expect, it } from 'vitest'
- import type { LogsBarChartDatum } from '../ProjectHome/ProjectUsage.metrics'
- import {
- calculateErrorRate,
- calculateSuccessRate,
- getHealthStatus,
- } from './ObservabilityOverview.utils'
- describe('calculateErrorRate', () => {
- it('returns 0 when total is 0', () => {
- const data: LogsBarChartDatum[] = [
- { timestamp: '2024-01-15T12:00:00Z', ok_count: 0, warning_count: 0, error_count: 0 },
- ]
- expect(calculateErrorRate(data)).toBe(0)
- })
- it('calculates correct error rate', () => {
- const data: LogsBarChartDatum[] = [
- { timestamp: '2024-01-15T12:00:00Z', ok_count: 80, warning_count: 10, error_count: 10 },
- ]
- expect(calculateErrorRate(data)).toBe(10)
- })
- it('calculates error rate across multiple data points', () => {
- const data: LogsBarChartDatum[] = [
- { timestamp: '2024-01-15T12:00:00Z', ok_count: 50, warning_count: 25, error_count: 25 },
- { timestamp: '2024-01-15T12:01:00Z', ok_count: 50, warning_count: 25, error_count: 25 },
- ]
- expect(calculateErrorRate(data)).toBe(25)
- })
- it('handles high error rates', () => {
- const data: LogsBarChartDatum[] = [
- { timestamp: '2024-01-15T12:00:00Z', ok_count: 10, warning_count: 10, error_count: 80 },
- ]
- expect(calculateErrorRate(data)).toBe(80)
- })
- it('handles empty array', () => {
- expect(calculateErrorRate([])).toBe(0)
- })
- })
- describe('calculateSuccessRate', () => {
- it('returns 0 when total is 0', () => {
- const data: LogsBarChartDatum[] = [
- { timestamp: '2024-01-15T12:00:00Z', ok_count: 0, warning_count: 0, error_count: 0 },
- ]
- expect(calculateSuccessRate(data)).toBe(0)
- })
- it('calculates correct success rate', () => {
- const data: LogsBarChartDatum[] = [
- { timestamp: '2024-01-15T12:00:00Z', ok_count: 80, warning_count: 10, error_count: 10 },
- ]
- expect(calculateSuccessRate(data)).toBe(80)
- })
- it('returns 100% for all successful requests', () => {
- const data: LogsBarChartDatum[] = [
- { timestamp: '2024-01-15T12:00:00Z', ok_count: 100, warning_count: 0, error_count: 0 },
- ]
- expect(calculateSuccessRate(data)).toBe(100)
- })
- it('calculates success rate across multiple data points', () => {
- const data: LogsBarChartDatum[] = [
- { timestamp: '2024-01-15T12:00:00Z', ok_count: 70, warning_count: 15, error_count: 15 },
- { timestamp: '2024-01-15T12:01:00Z', ok_count: 70, warning_count: 15, error_count: 15 },
- ]
- expect(calculateSuccessRate(data)).toBe(70)
- })
- it('handles empty array', () => {
- expect(calculateSuccessRate([])).toBe(0)
- })
- })
- describe('getHealthStatus', () => {
- describe('unknown status', () => {
- it('returns unknown when total is 0', () => {
- const result = getHealthStatus(0, 0)
- expect(result).toEqual({
- status: 'unknown',
- color: 'muted',
- })
- })
- it('returns unknown when total is below 100', () => {
- const result = getHealthStatus(5, 50)
- expect(result).toEqual({
- status: 'unknown',
- color: 'muted',
- })
- })
- it('returns unknown when total is exactly 99', () => {
- const result = getHealthStatus(10, 99)
- expect(result).toEqual({
- status: 'unknown',
- color: 'muted',
- })
- })
- it('returns unknown even with high error rate when total is low', () => {
- const result = getHealthStatus(50, 20)
- expect(result).toEqual({
- status: 'unknown',
- color: 'muted',
- })
- })
- })
- describe('error status', () => {
- it('returns error when error rate is exactly 1%', () => {
- const result = getHealthStatus(1, 100)
- expect(result).toEqual({
- status: 'error',
- color: 'destructive',
- })
- })
- it('returns error when error rate is above 1%', () => {
- const result = getHealthStatus(5, 100)
- expect(result).toEqual({
- status: 'error',
- color: 'destructive',
- })
- })
- it('returns error when error rate is 10%', () => {
- const result = getHealthStatus(10, 200)
- expect(result).toEqual({
- status: 'error',
- color: 'destructive',
- })
- })
- it('returns error for very high error rates', () => {
- const result = getHealthStatus(90, 1000)
- expect(result).toEqual({
- status: 'error',
- color: 'destructive',
- })
- })
- })
- describe('healthy status', () => {
- it('returns healthy when error rate is 0% with sufficient data', () => {
- const result = getHealthStatus(0, 100)
- expect(result).toEqual({
- status: 'healthy',
- color: 'brand',
- })
- })
- it('returns healthy when error rate is below 1%', () => {
- const result = getHealthStatus(0.5, 100)
- expect(result).toEqual({
- status: 'healthy',
- color: 'brand',
- })
- })
- it('returns healthy when error rate is just below 1%', () => {
- const result = getHealthStatus(0.99, 100)
- expect(result).toEqual({
- status: 'healthy',
- color: 'brand',
- })
- })
- it('returns healthy with 0% error rate and large total', () => {
- const result = getHealthStatus(0, 10000)
- expect(result).toEqual({
- status: 'healthy',
- color: 'brand',
- })
- })
- })
- describe('edge cases', () => {
- it('handles fractional error rates correctly', () => {
- const result = getHealthStatus(0.99, 1000)
- expect(result).toEqual({
- status: 'healthy',
- color: 'brand',
- })
- })
- it('returns unknown for very small total values', () => {
- const result = getHealthStatus(10, 1)
- expect(result).toEqual({
- status: 'unknown',
- color: 'muted',
- })
- })
- it('handles very large total values', () => {
- const result = getHealthStatus(0.5, 1000000)
- expect(result).toEqual({
- status: 'healthy',
- color: 'brand',
- })
- })
- it('returns healthy when total is exactly 100 and error rate is 0', () => {
- const result = getHealthStatus(0, 100)
- expect(result).toEqual({
- status: 'healthy',
- color: 'brand',
- })
- })
- it('returns error when total is exactly 100 and error rate is 1%', () => {
- const result = getHealthStatus(1, 100)
- expect(result).toEqual({
- status: 'error',
- color: 'destructive',
- })
- })
- })
- })
|