@@ -433,6 +433,121 @@ class FeatureDevControllerTest : FeatureDevTestBase() {
433433 }
434434 }
435435
436+ @Test
437+ fun `test handleChat onCodeGeneration sends correct add code messages` () = runTest {
438+ val totalIterations = 10
439+
440+ for (remainingIterations in 0 until totalIterations) {
441+ val message = if (remainingIterations > 2 ) {
442+ message(" amazonqFeatureDev.code_generation.iteration_counts_ask_to_add_code_or_feedback" )
443+ } else if (remainingIterations > 0 ) {
444+ message(
445+ " amazonqFeatureDev.code_generation.iteration_counts" ,
446+ remainingIterations,
447+ totalIterations,
448+ )
449+ } else {
450+ message(
451+ " amazonqFeatureDev.code_generation.iteration_counts_ask_to_add_code" ,
452+ remainingIterations,
453+ totalIterations,
454+ )
455+ }
456+ val mockSession = mock<Session >()
457+ val featureDevService = mockk<FeatureDevService >()
458+ val repoContext = mock<FeatureDevSessionContext >()
459+ val sessionStateConfig = SessionStateConfig (testConversationId, repoContext, featureDevService)
460+ val mockInteraction = mock<Interaction >()
461+ whenever(mockSession.send(userMessage)).thenReturn(mockInteraction)
462+ whenever(mockSession.sessionState).thenReturn(
463+ PrepareCodeGenerationState (
464+ testTabId,
465+ CancellationTokenSource (),
466+ " test-command" ,
467+ sessionStateConfig,
468+ newFileContents,
469+ deletedFiles,
470+ testReferences,
471+ testUploadId,
472+ 1 ,
473+ messenger,
474+ remainingIterations,
475+ totalIterations,
476+ diffMetricsProcessed = DiffMetricsProcessed (HashSet (), HashSet ()),
477+ ),
478+ )
479+
480+ controller.onCodeGeneration(mockSession, userMessage, testTabId)
481+
482+ coVerify {
483+ messenger.sendAnswer(
484+ tabId = testTabId,
485+ messageType = FeatureDevMessageType .Answer ,
486+ message = message
487+ )
488+ }
489+ }
490+ }
491+
492+ @Test
493+ fun `test handleChat onCodeGeneration sends correct messages after cancellation` () = runTest {
494+ val totalIterations = 10
495+
496+ for (remainingIterations in - 1 until totalIterations) {
497+ // remainingIterations < 0 is to represent the null case
498+ val message = if (remainingIterations > 2 || remainingIterations < 0 ) {
499+ message(" amazonqFeatureDev.code_generation.stopped_code_generation_no_iteration_count_display" )
500+ } else if (remainingIterations > 0 ) {
501+ message(
502+ " amazonqFeatureDev.code_generation.stopped_code_generation" ,
503+ remainingIterations,
504+ totalIterations,
505+ )
506+ } else {
507+ message(
508+ " amazonqFeatureDev.code_generation.stopped_code_generation_no_iterations" ,
509+ remainingIterations,
510+ totalIterations,
511+ )
512+ }
513+ val mockSession = mock<Session >()
514+ val featureDevService = mockk<FeatureDevService >()
515+ val repoContext = mock<FeatureDevSessionContext >()
516+ val sessionStateConfig = SessionStateConfig (testConversationId, repoContext, featureDevService)
517+ val mockInteraction = mock<Interaction >()
518+ val token = CancellationTokenSource ()
519+ token.cancel()
520+ whenever(mockSession.send(userMessage)).thenReturn(mockInteraction)
521+ whenever(mockSession.sessionState).thenReturn(
522+ PrepareCodeGenerationState (
523+ testTabId,
524+ token,
525+ " test-command" ,
526+ sessionStateConfig,
527+ newFileContents,
528+ deletedFiles,
529+ testReferences,
530+ testUploadId,
531+ 1 ,
532+ messenger,
533+ (if (remainingIterations < 0 ) null else remainingIterations),
534+ totalIterations,
535+ diffMetricsProcessed = DiffMetricsProcessed (HashSet (), HashSet ()),
536+ ),
537+ )
538+
539+ controller.onCodeGeneration(mockSession, userMessage, testTabId)
540+
541+ coVerify {
542+ messenger.sendAnswer(
543+ tabId = testTabId,
544+ messageType = FeatureDevMessageType .Answer ,
545+ message = message
546+ )
547+ }
548+ }
549+ }
550+
436551 @Test
437552 fun `test handleChat onCodeGeneration sends success metrics` () = runTest {
438553 val mockSession = mock<Session >()
0 commit comments