Skip to content

Commit 9256dd3

Browse files
committed
fix mocks for node:https
1 parent 349dc14 commit 9256dd3

File tree

1 file changed

+34
-28
lines changed

1 file changed

+34
-28
lines changed

packages/core/tests/telemetry.test.ts

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import https from 'node:https'
2+
13
import path from 'path'
24
import type { InitialisedList } from '../src/lib/core/initialise-lists'
35
import { runTelemetry, disableTelemetry } from '../src/lib/telemetry'
@@ -55,8 +57,13 @@ jest.mock('conf', () => {
5557
}
5658
})
5759

58-
jest.mock('node-fetch', () => {
59-
return jest.fn().mockImplementation(async () => ({} as Response))
60+
jest.mock('node:https', () => {
61+
const end = jest.fn()
62+
const request = jest.fn().mockImplementation(() => ({ end })) as any
63+
request.end = end
64+
return {
65+
request
66+
}
6067
})
6168

6269
jest.mock('node:os', () => {
@@ -105,15 +112,10 @@ const lists: Record<string, InitialisedList> = {
105112

106113
describe('Telemetry tests', () => {
107114
beforeEach(() => {
108-
jest.resetAllMocks()
115+
jest.clearAllMocks()
109116
mockTelemetryConfig = undefined // reset state
110117
})
111118

112-
afterAll(() => {
113-
jest.restoreAllMocks()
114-
})
115-
116-
const mockFetch = require('node-fetch')
117119
const today = new Date().toJSON().slice(0, 10)
118120
const mockYesterday = '2023-01-01'
119121
const mockTelemetryConfigInitialised = {
@@ -127,12 +129,14 @@ describe('Telemetry tests', () => {
127129
}
128130

129131
function expectDidSend (lastSentDate: string | null) {
130-
expect(mockFetch).toHaveBeenCalledWith(`https://telemetry.keystonejs.com/v1/event/project`, {
132+
expect(https.request).toHaveBeenCalledWith(`https://telemetry.keystonejs.com/v1/event/project`, {
131133
method: 'POST',
132134
headers: {
133135
'Content-Type': 'application/json',
134136
},
135-
body: JSON.stringify({
137+
})
138+
expect((https.request as any).end).toHaveBeenCalledWith(
139+
JSON.stringify({
136140
previous: lastSentDate,
137141
fields: {
138142
unknown: 0,
@@ -141,26 +145,28 @@ describe('Telemetry tests', () => {
141145
lists: 2,
142146
versions: mockPackageVersions,
143147
database: 'sqlite',
144-
}),
145-
})
148+
})
149+
)
146150

147-
expect(mockFetch).toHaveBeenCalledWith(`https://telemetry.keystonejs.com/v1/event/device`, {
151+
expect(https.request).toHaveBeenCalledWith(`https://telemetry.keystonejs.com/v1/event/device`, {
148152
method: 'POST',
149153
headers: {
150154
'Content-Type': 'application/json',
151155
},
152-
body: JSON.stringify({
156+
})
157+
expect((https.request as any).end).toHaveBeenCalledWith(
158+
JSON.stringify({
153159
previous: lastSentDate,
154160
os: 'keystone-os',
155161
node: process.versions.node.split('.')[0],
156-
}),
157-
})
162+
})
163+
)
158164
}
159165

160166
test('Telemetry writes out an empty configuration, and sends nothing on first run', async () => {
161167
await runTelemetry(mockProjectDir, lists, 'sqlite') // inform
162168

163-
expect(mockFetch).toHaveBeenCalledTimes(0)
169+
expect(https.request).toHaveBeenCalledTimes(0)
164170
expect(mockTelemetryConfig).toBeDefined()
165171
expect(mockTelemetryConfig?.device.lastSentDate).toBe(null)
166172
expect(mockTelemetryConfig?.projects).toBeDefined()
@@ -172,7 +178,7 @@ describe('Telemetry tests', () => {
172178
await runTelemetry(mockProjectDir, lists, 'sqlite') // send
173179

174180
expectDidSend(null)
175-
expect(mockFetch).toHaveBeenCalledTimes(2)
181+
expect(https.request).toHaveBeenCalledTimes(2)
176182
expect(mockTelemetryConfig).toBeDefined()
177183
expect(mockTelemetryConfig?.device.lastSentDate).toBe(today)
178184
expect(mockTelemetryConfig?.projects).toBeDefined()
@@ -186,7 +192,7 @@ describe('Telemetry tests', () => {
186192
await runTelemetry(mockProjectDir, lists, 'sqlite') // send, same day
187193

188194
expectDidSend(null)
189-
expect(mockFetch).toHaveBeenCalledTimes(2) // would be 4 if sent twice
195+
expect(https.request).toHaveBeenCalledTimes(2) // would be 4 if sent twice
190196
})
191197

192198
test('Telemetry sends a lastSentDate on the third run, second day', async () => {
@@ -195,7 +201,7 @@ describe('Telemetry tests', () => {
195201
await runTelemetry(mockProjectDir, lists, 'sqlite') // send, different day
196202

197203
expectDidSend(mockYesterday)
198-
expect(mockFetch).toHaveBeenCalledTimes(2)
204+
expect(https.request).toHaveBeenCalledTimes(2)
199205
expect(mockTelemetryConfig).toBeDefined()
200206
expect(mockTelemetryConfig?.device.lastSentDate).toBe(today)
201207
expect(mockTelemetryConfig?.projects).toBeDefined()
@@ -216,7 +222,7 @@ describe('Telemetry tests', () => {
216222
await runTelemetry(mockProjectDir, lists, 'sqlite') // send
217223
await runTelemetry(mockProjectDir, lists, 'sqlite') // send, same day
218224

219-
expect(mockFetch).toHaveBeenCalledTimes(0)
225+
expect(https.request).toHaveBeenCalledTimes(0)
220226
expect(mockTelemetryConfig).toBe(false)
221227
})
222228

@@ -241,18 +247,18 @@ describe('Telemetry tests', () => {
241247

242248
await runTelemetry(mockProjectDir, lists, 'sqlite') // try send again
243249

244-
expect(mockFetch).toHaveBeenCalledTimes(0)
250+
expect(https.request).toHaveBeenCalledTimes(0)
245251
expect(mockTelemetryConfig).toBe(mockTelemetryConfigInitialised) // unchanged
246252
})
247253

248254
test(`if not initialised, we do nothing`, async () => {
249255
expect(mockTelemetryConfig).toBe(undefined)
250-
expect(mockFetch).toHaveBeenCalledTimes(0)
256+
expect(https.request).toHaveBeenCalledTimes(0)
251257

252258
await runTelemetry(mockProjectDir, lists, 'sqlite') // try inform
253259
await runTelemetry(mockProjectDir, lists, 'sqlite') // try send
254260

255-
expect(mockFetch).toHaveBeenCalledTimes(0)
261+
expect(https.request).toHaveBeenCalledTimes(0)
256262
expect(mockTelemetryConfig).toBe(undefined) // nothing changed
257263
})
258264
})
@@ -276,7 +282,7 @@ describe('Telemetry tests', () => {
276282

277283
await runTelemetryThrows(mockProjectDir, lists, 'sqlite') // send
278284

279-
expect(mockFetch).toHaveBeenCalledTimes(0)
285+
expect(https.request).toHaveBeenCalledTimes(0)
280286
expect(mockTelemetryConfig).toBe(mockTelemetryConfigInitialised) // unchanged
281287
})
282288
})
@@ -298,18 +304,18 @@ describe('Telemetry tests', () => {
298304

299305
await runTelemetryCI(mockProjectDir, lists, 'sqlite') // try send again
300306

301-
expect(mockFetch).toHaveBeenCalledTimes(0)
307+
expect(https.request).toHaveBeenCalledTimes(0)
302308
expect(mockTelemetryConfig).toBe(mockTelemetryConfigInitialised) // unchanged
303309
})
304310

305311
test(`if not initialised, we do nothing`, async () => {
306312
expect(mockTelemetryConfig).toBe(undefined)
307-
expect(mockFetch).toHaveBeenCalledTimes(0)
313+
expect(https.request).toHaveBeenCalledTimes(0)
308314

309315
await runTelemetryCI(mockProjectDir, lists, 'sqlite') // try inform
310316
await runTelemetryCI(mockProjectDir, lists, 'sqlite') // try send
311317

312-
expect(mockFetch).toHaveBeenCalledTimes(0)
318+
expect(https.request).toHaveBeenCalledTimes(0)
313319
expect(mockTelemetryConfig).toBe(undefined) // nothing changed
314320
})
315321
})

0 commit comments

Comments
 (0)