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