Skip to content

Commit e47f7c5

Browse files
committed
test(field): unit test parseField
1 parent eeb211e commit e47f7c5

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
import { describe, expect, test } from 'vitest'
2+
3+
import { FieldRepr } from './field'
4+
import { parseField } from './parse'
5+
6+
describe('parseField', () => {
7+
test('empty field', () => {
8+
expectInvalidField('')
9+
})
10+
11+
test('invalid root field', () => {
12+
expectInvalidField('abc')
13+
})
14+
15+
test('ResponseTimes', () => {
16+
expectValidFields([
17+
'ResponseTimes.Min',
18+
'ResponseTimes.Max',
19+
'ResponseTimes.Mean',
20+
'ResponseTimes.Median',
21+
'ResponseTimes.Deciles',
22+
'ResponseTimes.Deciles.1',
23+
'ResponseTimes.Quartiles',
24+
'ResponseTimes.Quartiles.2',
25+
'ResponseTimes.StandardDeviation',
26+
])
27+
expectInvalidFields([
28+
'ResponseTimes.xxx',
29+
'ResponseTimes.Max.xxx',
30+
'ResponseTimes.1',
31+
'ResponseTimes.Max.1',
32+
'ResponseTimes.Deciles.-1',
33+
])
34+
})
35+
36+
test('RequestEventTimes', () => {
37+
expectValidFields([
38+
'RequestEventTimes.DNSDone.Min',
39+
'RequestEventTimes.ConnectDone.Max',
40+
'RequestEventTimes.TLSHandshakeDone.Mean',
41+
'RequestEventTimes.WroteHeaders.Median',
42+
'RequestEventTimes.WroteRequest.Deciles',
43+
'RequestEventTimes.GotFirstResponseByte.Quartiles',
44+
'RequestEventTimes.BodyRead.StandardDeviation',
45+
'RequestEventTimes.PutIdleConn.StandardDeviation',
46+
])
47+
expectInvalidFields([
48+
'RequestEventTimes.xxx',
49+
'RequestEventTimes.ConnectDone.xxx',
50+
'RequestEventTimes.ConnectDone.Mean.xxx',
51+
])
52+
})
53+
54+
test('StatusCodesDistribution', () => {
55+
expectValidFields([
56+
'StatusCodesDistribution.101',
57+
'StatusCodesDistribution.200',
58+
'StatusCodesDistribution.302',
59+
'StatusCodesDistribution.418',
60+
'StatusCodesDistribution.500',
61+
])
62+
expectInvalidFields([
63+
'StatusCodesDistribution.xxx',
64+
'StatusCodesDistribution.-1',
65+
'StatusCodesDistribution.99',
66+
'StatusCodesDistribution.600',
67+
'StatusCodesDistribution.200.xxx',
68+
])
69+
})
70+
})
71+
72+
const expectValidField = (field: FieldRepr) => {
73+
const parsedField = parseField(field)
74+
75+
expect(parsedField?.isValid()).toBeTruthy()
76+
expect(parsedField?.root.key).toEqual(getRoot(field))
77+
expect(parsedField?.depth).toEqual(getDepth(field))
78+
if (hasParent(field)) {
79+
expectValidField(getParent(field))
80+
}
81+
}
82+
83+
const expectValidFields = (fields: FieldRepr[]) => {
84+
fields.forEach(expectValidField)
85+
}
86+
87+
const expectInvalidField = (field: string) =>
88+
// @ts-expect-error - testing context
89+
expect(parseField(field)).toBeNull()
90+
91+
const expectInvalidFields = (fields: string[]) => {
92+
fields.forEach(expectInvalidField)
93+
}
94+
95+
const hasParent = (field: FieldRepr) => field.split('.').length > 1
96+
97+
const getParent = (field: FieldRepr): FieldRepr =>
98+
field.split('.').slice(0, -1).join('.') as FieldRepr
99+
100+
const getDepth = (field: FieldRepr): number => field.split('.').length - 1
101+
102+
const getRoot = (field: FieldRepr) => field.split('.')[0]

0 commit comments

Comments
 (0)