@@ -19,6 +19,7 @@ import com.intellij.testFramework.DisposableRule
19
19
import com.intellij.testFramework.replaceService
20
20
import io.mockk.every
21
21
import io.mockk.spyk
22
+ import kotlinx.coroutines.Dispatchers
22
23
import kotlinx.coroutines.ExperimentalCoroutinesApi
23
24
import kotlinx.coroutines.TimeoutCancellationException
24
25
import kotlinx.coroutines.test.StandardTestDispatcher
@@ -225,43 +226,49 @@ class ProjectContextProviderTest {
225
226
226
227
@Test
227
228
fun `query should send correct encrypted request to lsp` () = runTest {
228
- sut = ProjectContextProvider (project, encoderServer, this )
229
- val r = sut.query(" foo" , null )
230
- advanceUntilIdle()
229
+ // use real time
230
+ withContext(Dispatchers .Default .limitedParallelism(1 )) {
231
+ sut = ProjectContextProvider (project, encoderServer, this )
232
+ val r = sut.query(" foo" , null )
233
+ advanceUntilIdle()
231
234
232
- val request = QueryChatRequest (" foo" )
233
- val requestJson = mapper.writeValueAsString(request)
235
+ val request = QueryChatRequest (" foo" )
236
+ val requestJson = mapper.writeValueAsString(request)
234
237
235
- assertThat(mapper.readTree(requestJson)).isEqualTo(mapper.readTree(""" { "query": "foo" }""" ))
238
+ assertThat(mapper.readTree(requestJson)).isEqualTo(mapper.readTree(""" { "query": "foo" }""" ))
236
239
237
- val encryptedRequest = encoderServer.encrypt(requestJson)
240
+ val encryptedRequest = encoderServer.encrypt(requestJson)
238
241
239
- wireMock.verify(
240
- 1 ,
241
- postRequestedFor(urlPathEqualTo(" /query" ))
242
- .withHeader(" Content-Type" , equalTo(" text/plain" ))
243
- .withRequestBody(equalTo(encryptedRequest))
244
- )
242
+ wireMock.verify(
243
+ 1 ,
244
+ postRequestedFor(urlPathEqualTo(" /query" ))
245
+ .withHeader(" Content-Type" , equalTo(" text/plain" ))
246
+ .withRequestBody(equalTo(encryptedRequest))
247
+ )
248
+ }
245
249
}
246
250
247
251
@Test
248
252
fun `queryInline should send correct encrypted request to lsp` () = runTest {
249
- sut = ProjectContextProvider (project, encoderServer, this )
250
- sut.queryInline(" foo" , " Foo.java" , InlineContextTarget .CODEMAP )
251
- advanceUntilIdle()
253
+ // use real time
254
+ withContext(Dispatchers .Default .limitedParallelism(1 )) {
255
+ sut = ProjectContextProvider (project, encoderServer, this )
256
+ sut.queryInline(" foo" , " Foo.java" , InlineContextTarget .CODEMAP )
257
+ advanceUntilIdle()
252
258
253
- val request = QueryInlineCompletionRequest (" foo" , " Foo.java" , " codemap" )
254
- val requestJson = mapper.writeValueAsString(request)
259
+ val request = QueryInlineCompletionRequest (" foo" , " Foo.java" , " codemap" )
260
+ val requestJson = mapper.writeValueAsString(request)
255
261
256
- assertThat(mapper.readTree(requestJson)).isEqualTo(mapper.readTree(""" { "query": "foo", "filePath": "Foo.java", "target": "codemap" }""" ))
262
+ assertThat(mapper.readTree(requestJson)).isEqualTo(mapper.readTree(""" { "query": "foo", "filePath": "Foo.java", "target": "codemap" }""" ))
257
263
258
- val encryptedRequest = encoderServer.encrypt(requestJson)
259
- wireMock.verify(
260
- 1 ,
261
- postRequestedFor(urlPathEqualTo(" /queryInlineProjectContext" ))
262
- .withHeader(" Content-Type" , equalTo(" text/plain" ))
263
- .withRequestBody(equalTo(encryptedRequest))
264
- )
264
+ val encryptedRequest = encoderServer.encrypt(requestJson)
265
+ wireMock.verify(
266
+ 1 ,
267
+ postRequestedFor(urlPathEqualTo(" /queryInlineProjectContext" ))
268
+ .withHeader(" Content-Type" , equalTo(" text/plain" ))
269
+ .withRequestBody(equalTo(encryptedRequest))
270
+ )
271
+ }
265
272
}
266
273
267
274
@Test
@@ -287,6 +294,8 @@ class ProjectContextProviderTest {
287
294
288
295
@Test
289
296
fun `query chat should return deserialized relevantDocument` () = runTest {
297
+ // use real time
298
+ withContext(Dispatchers .Default .limitedParallelism(1 )) {
290
299
sut = ProjectContextProvider (project, encoderServer, this )
291
300
val r = sut.query(" foo" , null )
292
301
advanceUntilIdle()
@@ -304,6 +313,7 @@ class ProjectContextProviderTest {
304
313
)
305
314
)
306
315
}
316
+ }
307
317
308
318
@Test
309
319
fun `query inline should throw if resultset not deserializable` () {
@@ -334,31 +344,34 @@ class ProjectContextProviderTest {
334
344
335
345
@Test
336
346
fun `query inline should return deserialized bm25 chunks` () = runTest {
337
- sut = ProjectContextProvider (project, encoderServer, this )
338
- advanceUntilIdle()
339
- val r = sut.queryInline(" foo" , " filepath" , InlineContextTarget .CODEMAP )
340
- assertThat(r).hasSize(3 )
341
- assertThat(r[0 ]).isEqualTo(
342
- InlineBm25Chunk (
343
- " content1" ,
344
- " file1" ,
345
- 0.1
347
+ // use real time
348
+ withContext(Dispatchers .Default .limitedParallelism(1 )) {
349
+ sut = ProjectContextProvider (project, encoderServer, this )
350
+ advanceUntilIdle()
351
+ val r = sut.queryInline(" foo" , " filepath" , InlineContextTarget .CODEMAP )
352
+ assertThat(r).hasSize(3 )
353
+ assertThat(r[0 ]).isEqualTo(
354
+ InlineBm25Chunk (
355
+ " content1" ,
356
+ " file1" ,
357
+ 0.1
358
+ )
346
359
)
347
- )
348
- assertThat(r[ 1 ]).isEqualTo (
349
- InlineBm25Chunk (
350
- " content2 " ,
351
- " file2 " ,
352
- 0.2
360
+ assertThat(r[ 1 ]).isEqualTo(
361
+ InlineBm25Chunk (
362
+ " content2 " ,
363
+ " file2 " ,
364
+ 0.2
365
+ )
353
366
)
354
- )
355
- assertThat(r[ 2 ]).isEqualTo (
356
- InlineBm25Chunk (
357
- " content3 " ,
358
- " file3 " ,
359
- 0.3
367
+ assertThat(r[ 2 ]).isEqualTo(
368
+ InlineBm25Chunk (
369
+ " content3 " ,
370
+ " file3 " ,
371
+ 0.3
372
+ )
360
373
)
361
- )
374
+ }
362
375
}
363
376
364
377
@Test
@@ -431,78 +444,81 @@ class ProjectContextProviderTest {
431
444
432
445
@Test
433
446
fun `test query payload is encrypted` () = runTest {
434
- sut = ProjectContextProvider (project, encoderServer, this )
435
- sut.query(" what does this project do" , null )
436
- advanceUntilIdle()
437
- verify(encoderServer, times(1 )).encrypt(any())
447
+ // use real time
448
+ withContext(Dispatchers .Default .limitedParallelism(1 )) {
449
+ sut = ProjectContextProvider (project, encoderServer, this )
450
+ sut.query(" what does this project do" , null )
451
+ advanceUntilIdle()
452
+ verify(encoderServer, times(1 )).encrypt(any())
453
+ }
438
454
}
439
455
440
456
private fun createMockServer () = WireMockRule (wireMockConfig().dynamicPort())
441
457
}
442
458
443
459
// language=JSON
444
460
val validQueryInlineResponse = """
445
- [
446
- {
447
- "content": "content1",
448
- "filePath": "file1",
449
- "score": 0.1
450
- },
451
- {
452
- "content": "content2",
453
- "filePath": "file2",
454
- "score": 0.2
455
- },
456
- {
457
- "content": "content3",
458
- "filePath": "file3",
459
- "score": 0.3
460
- }
461
- ]
461
+ [
462
+ {
463
+ "content": "content1",
464
+ "filePath": "file1",
465
+ "score": 0.1
466
+ },
467
+ {
468
+ "content": "content2",
469
+ "filePath": "file2",
470
+ "score": 0.2
471
+ },
472
+ {
473
+ "content": "content3",
474
+ "filePath": "file3",
475
+ "score": 0.3
476
+ }
477
+ ]
462
478
""" .trimIndent()
463
479
464
480
// language=JSON
465
481
val validQueryChatResponse = """
466
- [
467
- {
468
- "filePath": "file1",
469
- "content": "content1",
470
- "id": "id1",
471
- "index": "index1",
472
- "vec": [
473
- "vec_1-1",
474
- "vec_1-2",
475
- "vec_1-3"
476
- ],
477
- "context": "context1",
478
- "prev": "prev1",
479
- "next": "next1",
480
- "relativePath": "relativeFilePath1",
481
- "programmingLanguage": "language1"
482
- },
483
- {
484
- "filePath": "file2",
485
- "content": "content2",
486
- "id": "id2",
487
- "index": "index2",
488
- "vec": [
489
- "vec_2-1",
490
- "vec_2-2",
491
- "vec_2-3"
492
- ],
493
- "context": "context2",
494
- "prev": "prev2",
495
- "next": "next2",
496
- "relativePath": "relativeFilePath2",
497
- "programmingLanguage": "language2"
498
- }
499
- ]
482
+ [
483
+ {
484
+ "filePath": "file1",
485
+ "content": "content1",
486
+ "id": "id1",
487
+ "index": "index1",
488
+ "vec": [
489
+ "vec_1-1",
490
+ "vec_1-2",
491
+ "vec_1-3"
492
+ ],
493
+ "context": "context1",
494
+ "prev": "prev1",
495
+ "next": "next1",
496
+ "relativePath": "relativeFilePath1",
497
+ "programmingLanguage": "language1"
498
+ },
499
+ {
500
+ "filePath": "file2",
501
+ "content": "content2",
502
+ "id": "id2",
503
+ "index": "index2",
504
+ "vec": [
505
+ "vec_2-1",
506
+ "vec_2-2",
507
+ "vec_2-3"
508
+ ],
509
+ "context": "context2",
510
+ "prev": "prev2",
511
+ "next": "next2",
512
+ "relativePath": "relativeFilePath2",
513
+ "programmingLanguage": "language2"
514
+ }
515
+ ]
500
516
""" .trimIndent()
501
517
502
518
// language=JSON
503
519
val validGetUsageResponse = """
504
- {
505
- "memoryUsage":123,
506
- "cpuUsage":456
507
- }
520
+ {
521
+ "memoryUsage":123,
522
+ "cpuUsage":456
523
+ }
508
524
""" .trimIndent()
0 commit comments