ObservabilityOverview.utils.test.ts249 lines · main
1import { describe, expect, it } from 'vitest'
2
3import type { LogsBarChartDatum } from '../ProjectHome/ProjectUsage.metrics'
4import {
5 calculateErrorRate,
6 calculateSuccessRate,
7 getHealthStatus,
8} from './ObservabilityOverview.utils'
9
10describe('calculateErrorRate', () => {
11 it('returns 0 when total is 0', () => {
12 const data: LogsBarChartDatum[] = [
13 { timestamp: '2024-01-15T12:00:00Z', ok_count: 0, warning_count: 0, error_count: 0 },
14 ]
15
16 expect(calculateErrorRate(data)).toBe(0)
17 })
18
19 it('calculates correct error rate', () => {
20 const data: LogsBarChartDatum[] = [
21 { timestamp: '2024-01-15T12:00:00Z', ok_count: 80, warning_count: 10, error_count: 10 },
22 ]
23
24 expect(calculateErrorRate(data)).toBe(10)
25 })
26
27 it('calculates error rate across multiple data points', () => {
28 const data: LogsBarChartDatum[] = [
29 { timestamp: '2024-01-15T12:00:00Z', ok_count: 50, warning_count: 25, error_count: 25 },
30 { timestamp: '2024-01-15T12:01:00Z', ok_count: 50, warning_count: 25, error_count: 25 },
31 ]
32
33 expect(calculateErrorRate(data)).toBe(25)
34 })
35
36 it('handles high error rates', () => {
37 const data: LogsBarChartDatum[] = [
38 { timestamp: '2024-01-15T12:00:00Z', ok_count: 10, warning_count: 10, error_count: 80 },
39 ]
40
41 expect(calculateErrorRate(data)).toBe(80)
42 })
43
44 it('handles empty array', () => {
45 expect(calculateErrorRate([])).toBe(0)
46 })
47})
48
49describe('calculateSuccessRate', () => {
50 it('returns 0 when total is 0', () => {
51 const data: LogsBarChartDatum[] = [
52 { timestamp: '2024-01-15T12:00:00Z', ok_count: 0, warning_count: 0, error_count: 0 },
53 ]
54
55 expect(calculateSuccessRate(data)).toBe(0)
56 })
57
58 it('calculates correct success rate', () => {
59 const data: LogsBarChartDatum[] = [
60 { timestamp: '2024-01-15T12:00:00Z', ok_count: 80, warning_count: 10, error_count: 10 },
61 ]
62
63 expect(calculateSuccessRate(data)).toBe(80)
64 })
65
66 it('returns 100% for all successful requests', () => {
67 const data: LogsBarChartDatum[] = [
68 { timestamp: '2024-01-15T12:00:00Z', ok_count: 100, warning_count: 0, error_count: 0 },
69 ]
70
71 expect(calculateSuccessRate(data)).toBe(100)
72 })
73
74 it('calculates success rate across multiple data points', () => {
75 const data: LogsBarChartDatum[] = [
76 { timestamp: '2024-01-15T12:00:00Z', ok_count: 70, warning_count: 15, error_count: 15 },
77 { timestamp: '2024-01-15T12:01:00Z', ok_count: 70, warning_count: 15, error_count: 15 },
78 ]
79
80 expect(calculateSuccessRate(data)).toBe(70)
81 })
82
83 it('handles empty array', () => {
84 expect(calculateSuccessRate([])).toBe(0)
85 })
86})
87
88describe('getHealthStatus', () => {
89 describe('unknown status', () => {
90 it('returns unknown when total is 0', () => {
91 const result = getHealthStatus(0, 0)
92
93 expect(result).toEqual({
94 status: 'unknown',
95 color: 'muted',
96 })
97 })
98
99 it('returns unknown when total is below 100', () => {
100 const result = getHealthStatus(5, 50)
101
102 expect(result).toEqual({
103 status: 'unknown',
104 color: 'muted',
105 })
106 })
107
108 it('returns unknown when total is exactly 99', () => {
109 const result = getHealthStatus(10, 99)
110
111 expect(result).toEqual({
112 status: 'unknown',
113 color: 'muted',
114 })
115 })
116
117 it('returns unknown even with high error rate when total is low', () => {
118 const result = getHealthStatus(50, 20)
119
120 expect(result).toEqual({
121 status: 'unknown',
122 color: 'muted',
123 })
124 })
125 })
126
127 describe('error status', () => {
128 it('returns error when error rate is exactly 1%', () => {
129 const result = getHealthStatus(1, 100)
130
131 expect(result).toEqual({
132 status: 'error',
133 color: 'destructive',
134 })
135 })
136
137 it('returns error when error rate is above 1%', () => {
138 const result = getHealthStatus(5, 100)
139
140 expect(result).toEqual({
141 status: 'error',
142 color: 'destructive',
143 })
144 })
145
146 it('returns error when error rate is 10%', () => {
147 const result = getHealthStatus(10, 200)
148
149 expect(result).toEqual({
150 status: 'error',
151 color: 'destructive',
152 })
153 })
154
155 it('returns error for very high error rates', () => {
156 const result = getHealthStatus(90, 1000)
157
158 expect(result).toEqual({
159 status: 'error',
160 color: 'destructive',
161 })
162 })
163 })
164
165 describe('healthy status', () => {
166 it('returns healthy when error rate is 0% with sufficient data', () => {
167 const result = getHealthStatus(0, 100)
168
169 expect(result).toEqual({
170 status: 'healthy',
171 color: 'brand',
172 })
173 })
174
175 it('returns healthy when error rate is below 1%', () => {
176 const result = getHealthStatus(0.5, 100)
177
178 expect(result).toEqual({
179 status: 'healthy',
180 color: 'brand',
181 })
182 })
183
184 it('returns healthy when error rate is just below 1%', () => {
185 const result = getHealthStatus(0.99, 100)
186
187 expect(result).toEqual({
188 status: 'healthy',
189 color: 'brand',
190 })
191 })
192
193 it('returns healthy with 0% error rate and large total', () => {
194 const result = getHealthStatus(0, 10000)
195
196 expect(result).toEqual({
197 status: 'healthy',
198 color: 'brand',
199 })
200 })
201 })
202
203 describe('edge cases', () => {
204 it('handles fractional error rates correctly', () => {
205 const result = getHealthStatus(0.99, 1000)
206
207 expect(result).toEqual({
208 status: 'healthy',
209 color: 'brand',
210 })
211 })
212
213 it('returns unknown for very small total values', () => {
214 const result = getHealthStatus(10, 1)
215
216 expect(result).toEqual({
217 status: 'unknown',
218 color: 'muted',
219 })
220 })
221
222 it('handles very large total values', () => {
223 const result = getHealthStatus(0.5, 1000000)
224
225 expect(result).toEqual({
226 status: 'healthy',
227 color: 'brand',
228 })
229 })
230
231 it('returns healthy when total is exactly 100 and error rate is 0', () => {
232 const result = getHealthStatus(0, 100)
233
234 expect(result).toEqual({
235 status: 'healthy',
236 color: 'brand',
237 })
238 })
239
240 it('returns error when total is exactly 100 and error rate is 1%', () => {
241 const result = getHealthStatus(1, 100)
242
243 expect(result).toEqual({
244 status: 'error',
245 color: 'destructive',
246 })
247 })
248 })
249})