Skip to content

Commit 1f811c8

Browse files
add in tests for helper
1 parent c792296 commit 1f811c8

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed
+126
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
import {
2+
_rejectNetworkError,
3+
NotFoundErrorObject,
4+
OwnerNotActivatedErrorObject,
5+
ParsingErrorObject,
6+
} from './rejectNetworkError'
7+
8+
const mocks = vi.hoisted(() => ({
9+
withScope: vi.fn(),
10+
addBreadcrumb: vi.fn(),
11+
captureMessage: vi.fn(),
12+
setFingerprint: vi.fn(),
13+
setTags: vi.fn(),
14+
setLevel: vi.fn(),
15+
}))
16+
17+
vi.mock('@sentry/react', async () => {
18+
const actual = await vi.importActual('@sentry/react')
19+
return {
20+
...actual,
21+
withScope: mocks.withScope.mockImplementation((fn) =>
22+
fn({
23+
addBreadcrumb: mocks.addBreadcrumb,
24+
setFingerprint: mocks.setFingerprint,
25+
captureMessage: mocks.captureMessage,
26+
setTags: mocks.setTags,
27+
setLevel: mocks.setLevel,
28+
})
29+
),
30+
}
31+
})
32+
33+
afterEach(() => {
34+
vi.clearAllMocks()
35+
})
36+
37+
const parsingError: ParsingErrorObject = {
38+
errorName: 'Parsing Error',
39+
errorDetails: {
40+
error: Error('bad parsing'),
41+
caller: 'TestQueryOpts',
42+
},
43+
}
44+
45+
const notFoundError: NotFoundErrorObject = {
46+
errorName: 'Not Found Error',
47+
errorDetails: {
48+
caller: 'TestQueryOpts',
49+
},
50+
}
51+
52+
const ownerNotActivatedError: OwnerNotActivatedErrorObject = {
53+
errorName: 'Owner Not Activated',
54+
data: { detail: 'test' },
55+
errorDetails: {
56+
caller: 'TestQueryOpts',
57+
},
58+
}
59+
60+
const testCases = [
61+
{ errorObject: parsingError, level: 'error', status: 400 },
62+
{ errorObject: notFoundError, level: 'info', status: 404 },
63+
{ errorObject: ownerNotActivatedError, level: 'info', status: 403 },
64+
]
65+
66+
describe('rejectNetworkError', () => {
67+
describe.each(testCases)(
68+
'when the error is $errorObject.errorName',
69+
({ errorObject, level, status }) => {
70+
it('adds a breadcrumb', () => {
71+
_rejectNetworkError(errorObject).catch((_e) => {})
72+
73+
expect(mocks.addBreadcrumb).toHaveBeenCalledWith({
74+
category: 'network.error',
75+
level,
76+
message: `${errorObject.errorDetails.caller} - ${errorObject.errorName}`,
77+
data:
78+
'error' in errorObject.errorDetails
79+
? errorObject.errorDetails.error
80+
: undefined,
81+
})
82+
})
83+
84+
it('sets the tags', () => {
85+
_rejectNetworkError(errorObject).catch((_e) => {})
86+
87+
expect(mocks.setTags).toHaveBeenCalledWith({
88+
caller: errorObject.errorDetails.caller,
89+
errorName: errorObject.errorName,
90+
})
91+
})
92+
93+
it('sets the level', () => {
94+
_rejectNetworkError(errorObject).catch((_e) => {})
95+
96+
expect(mocks.setLevel).toHaveBeenCalledWith(level)
97+
})
98+
99+
it('sets the fingerprint', () => {
100+
_rejectNetworkError(errorObject).catch((_e) => {
101+
expect(mocks.setFingerprint).toHaveBeenCalledWith([
102+
`${errorObject.errorDetails.caller} - ${errorObject.errorName}`,
103+
])
104+
})
105+
})
106+
107+
it('captures the error with Sentry', () => {
108+
_rejectNetworkError(errorObject).catch((_e) => {})
109+
110+
expect(mocks.captureMessage).toHaveBeenCalledWith(
111+
`${errorObject.errorDetails.caller} - ${errorObject.errorName}`
112+
)
113+
})
114+
115+
it('returns a rejected promise', () => {
116+
const result = _rejectNetworkError(errorObject)
117+
118+
expect(result).rejects.toStrictEqual({
119+
dev: `${errorObject.errorDetails.caller} - ${errorObject.errorName}`,
120+
data: 'data' in errorObject ? errorObject.data : undefined,
121+
status,
122+
})
123+
})
124+
}
125+
)
126+
})

0 commit comments

Comments
 (0)