Skip to content

Commit 6e0139c

Browse files
committed
test: improve doc telemetry test robustness
1 parent 7db9545 commit 6e0139c

File tree

2 files changed

+22
-15
lines changed

2 files changed

+22
-15
lines changed

packages/core/src/test/amazonqDoc/controller.test.ts

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
FollowUpSequences,
1515
generateVirtualMemoryUri,
1616
updateFilePaths,
17+
waitForTelemetryCall,
1718
} from './utils'
1819
import { CurrentWsFolders, NewFileInfo } from '../../amazonqDoc/types'
1920
import { CodeGenState, docScheme, Session } from '../../amazonqDoc'
@@ -165,6 +166,7 @@ for (let i = 0; i < 1000; i++) {
165166
it('should emit generation telemetry for initial README generation', async () => {
166167
await performAction('generate', getSessionStub)
167168

169+
await waitForTelemetryCall(sendDocTelemetrySpy, 1)
168170
const expectedEvent = createExpectedEvent({
169171
type: 'generation',
170172
...EventMetrics.INITIAL_README,
@@ -186,7 +188,7 @@ for (let i = 0; i < 1000; i++) {
186188
interactionType: 'GENERATE_README',
187189
conversationId: conversationID,
188190
})
189-
191+
await waitForTelemetryCall(sendDocTelemetrySpy, 1)
190192
await assertTelemetry({
191193
spy: sendDocTelemetrySpy,
192194
expectedEvent: firstExpectedEvent,
@@ -202,7 +204,7 @@ for (let i = 0; i < 1000; i++) {
202204
interactionType: 'GENERATE_README',
203205
conversationId: conversationID,
204206
})
205-
207+
await waitForTelemetryCall(sendDocTelemetrySpy, 1)
206208
await assertTelemetry({
207209
spy: sendDocTelemetrySpy,
208210
expectedEvent: secondExpectedEvent,
@@ -213,15 +215,15 @@ for (let i = 0; i < 1000; i++) {
213215

214216
it('should emit acceptance telemetry for README generation', async () => {
215217
await performAction('generate', getSessionStub)
216-
await new Promise((resolve) => setTimeout(resolve, 100))
218+
await waitForTelemetryCall(sendDocTelemetrySpy, 1)
219+
await performAction('accept', getSessionStub)
217220
const expectedEvent = createExpectedEvent({
218221
type: 'acceptance',
219222
...EventMetrics.INITIAL_README,
220223
interactionType: 'GENERATE_README',
221224
conversationId: conversationID,
222225
})
223-
224-
await performAction('accept', getSessionStub)
226+
await waitForTelemetryCall(sendDocTelemetrySpy, 2)
225227
await assertTelemetry({
226228
spy: sendDocTelemetrySpy,
227229
expectedEvent,
@@ -231,7 +233,7 @@ for (let i = 0; i < 1000; i++) {
231233
})
232234
it('should emit generation telemetry for README update', async () => {
233235
await performAction('update', getSessionStub)
234-
236+
await waitForTelemetryCall(sendDocTelemetrySpy, 1)
235237
const expectedEvent = createExpectedEvent({
236238
type: 'generation',
237239
...EventMetrics.REPO_STRUCTURE,
@@ -247,13 +249,13 @@ for (let i = 0; i < 1000; i++) {
247249
})
248250
it('should emit another generation telemetry for make changes operation after README update', async () => {
249251
await performAction('update', getSessionStub)
250-
await new Promise((resolve) => setTimeout(resolve, 100))
252+
await waitForTelemetryCall(sendDocTelemetrySpy, 1)
251253

252254
modifiedReadme = ReadmeBuilder.createReadmeWithDataFlow()
253255
await updateFilePaths(session, modifiedReadme, uploadID, docScheme, controllerSetup.workspaceFolder)
254256

255257
await performAction('makeChanges', getSessionStub, 'add data flow section')
256-
258+
await waitForTelemetryCall(sendDocTelemetrySpy, 2)
257259
const expectedEvent = createExpectedEvent({
258260
type: 'generation',
259261
...EventMetrics.DATA_FLOW,
@@ -272,16 +274,17 @@ for (let i = 0; i < 1000; i++) {
272274

273275
it('should emit acceptance telemetry for README update', async () => {
274276
await performAction('update', getSessionStub)
275-
await new Promise((resolve) => setTimeout(resolve, 100))
277+
await waitForTelemetryCall(sendDocTelemetrySpy, 1)
276278

279+
await performAction('accept', getSessionStub)
280+
await waitForTelemetryCall(sendDocTelemetrySpy, 2)
277281
const expectedEvent = createExpectedEvent({
278282
type: 'acceptance',
279283
...EventMetrics.REPO_STRUCTURE,
280284
interactionType: 'UPDATE_README',
281285
conversationId: conversationID,
282286
})
283287

284-
await performAction('accept', getSessionStub)
285288
await assertTelemetry({
286289
spy: sendDocTelemetrySpy,
287290
expectedEvent,
@@ -292,7 +295,7 @@ for (let i = 0; i < 1000; i++) {
292295

293296
it('should emit generation telemetry for README edit', async () => {
294297
await performAction('edit', getSessionStub, 'add repository structure section')
295-
298+
await waitForTelemetryCall(sendDocTelemetrySpy, 1)
296299
const expectedEvent = createExpectedEvent({
297300
type: 'generation',
298301
...EventMetrics.REPO_STRUCTURE,
@@ -308,16 +311,16 @@ for (let i = 0; i < 1000; i++) {
308311
})
309312
it('should emit acceptance telemetry for README edit', async () => {
310313
await performAction('edit', getSessionStub, 'add repository structure section')
311-
await new Promise((resolve) => setTimeout(resolve, 100))
312-
314+
await waitForTelemetryCall(sendDocTelemetrySpy, 1)
315+
await performAction('accept', getSessionStub)
316+
await waitForTelemetryCall(sendDocTelemetrySpy, 2)
313317
const expectedEvent = createExpectedEvent({
314318
type: 'acceptance',
315319
...EventMetrics.REPO_STRUCTURE,
316320
interactionType: 'EDIT_README',
317321
conversationId: conversationID,
318322
})
319323

320-
await performAction('accept', getSessionStub)
321324
await assertTelemetry({
322325
spy: sendDocTelemetrySpy,
323326
expectedEvent,

packages/core/src/test/amazonqDoc/utils.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { createSessionConfig } from '../../amazonq/commons/session/sessionConfig
2121
import { DocGenerationTask } from '../../amazonqDoc/controllers/docGenerationTask'
2222
import { DocV2GenerationEvent, DocV2AcceptanceEvent } from '../../amazonqFeatureDev/client/featuredevproxyclient'
2323
import { FollowUpTypes } from '../../amazonq/commons/types'
24+
import { waitUntil } from '../../shared'
2425

2526
export function createMessenger(): DocMessenger {
2627
return new DocMessenger(
@@ -200,7 +201,6 @@ export async function assertTelemetry(params: {
200201
type: 'generation' | 'acceptance'
201202
callIndex?: number
202203
}) {
203-
await new Promise((resolve) => setTimeout(resolve, 100))
204204
const spyCall = params.callIndex !== undefined ? params.spy.getCall(params.callIndex) : params.spy
205205
sinon.assert.calledWith(spyCall, sinon.match(params.expectedEvent), params.type)
206206
}
@@ -247,3 +247,7 @@ export const FollowUpSequences = {
247247
makeChanges: [FollowUpTypes.MakeChanges],
248248
acceptContent: [FollowUpTypes.AcceptChanges],
249249
}
250+
251+
export async function waitForTelemetryCall(spy: sinon.SinonStub, expectedCallCount: number) {
252+
await waitUntil(() => Promise.resolve(spy.callCount >= expectedCallCount), { timeout: 2000, interval: 100 })
253+
}

0 commit comments

Comments
 (0)