Skip to content

Commit 0ebebe0

Browse files
authored
fix(amazonq): Fix Generate unit tests from right click context menu (#5705)
* initial changes * fix gen unit tests
1 parent 694c49b commit 0ebebe0

File tree

4 files changed

+21
-23
lines changed

4 files changed

+21
-23
lines changed

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/controller/CodeTestChatController.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.apps.AmazonQAppInitConte
5656
import software.aws.toolkits.jetbrains.services.amazonq.auth.AuthController
5757
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument.InlineCompletionReference
5858
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument.InlineCompletionReferencePosition
59+
import software.aws.toolkits.jetbrains.services.amazonq.messages.AmazonQMessage
5960
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfileManager
6061
import software.aws.toolkits.jetbrains.services.amazonq.project.RelevantDocument
6162
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.CodeWhispererUTGChatManager
@@ -110,6 +111,12 @@ import java.util.UUID
110111
import software.amazon.awssdk.services.codewhispererstreaming.model.Position as StreamingPosition
111112
import software.amazon.awssdk.services.codewhispererstreaming.model.Range as StreamingRange
112113

114+
data class TestCommandMessage(
115+
val sender: String = "codetest",
116+
val command: String = "test",
117+
val type: String = "addAnswer",
118+
) : AmazonQMessage
119+
113120
class CodeTestChatController(
114121
private val context: AmazonQAppInitContext,
115122
private val chatSessionStorage: ChatSessionStorage,

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/ActionRegistrar.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
// Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0
3-
3+
@file:Suppress("BannedImports")
44
package software.aws.toolkits.jetbrains.services.cwc.commands
55

6+
import com.google.gson.Gson
67
import com.intellij.openapi.application.ApplicationManager
78
import com.intellij.openapi.project.Project
89
import kotlinx.coroutines.flow.MutableSharedFlow
@@ -14,6 +15,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.Gener
1415
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SendToPromptParams
1516
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TriggerType
1617
import software.aws.toolkits.jetbrains.services.amazonq.messages.AmazonQMessage
18+
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.controller.TestCommandMessage
1719
import software.aws.toolkits.jetbrains.services.cwc.editor.context.ActiveFileContextExtractor
1820
import software.aws.toolkits.jetbrains.services.cwc.editor.context.ExtractionTriggerType
1921

@@ -25,8 +27,7 @@ class ActionRegistrar {
2527

2628
fun reportMessageClick(command: EditorContextCommand, project: Project) {
2729
if (command == EditorContextCommand.GenerateUnitTests) {
28-
// pre-existing old chat code path
29-
_messages.tryEmit(ContextMenuActionMessage(command, project))
30+
AsyncChatUiListener.notifyPartialMessageUpdate(Gson().toJson(TestCommandMessage()))
3031
} else {
3132
// new agentic chat route
3233
ApplicationManager.getApplication().executeOnPooledThread {

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/ChatController.kt

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ import software.aws.toolkits.jetbrains.core.coroutines.EDT
3838
import software.aws.toolkits.jetbrains.services.amazonq.apps.AmazonQAppInitContext
3939
import software.aws.toolkits.jetbrains.services.amazonq.auth.AuthController
4040
import software.aws.toolkits.jetbrains.services.amazonq.auth.AuthNeededState
41-
import software.aws.toolkits.jetbrains.services.amazonq.messages.AmazonQMessage
4241
import software.aws.toolkits.jetbrains.services.amazonq.messages.MessagePublisher
4342
import software.aws.toolkits.jetbrains.services.amazonq.onboarding.OnboardingPageInteraction
4443
import software.aws.toolkits.jetbrains.services.amazonq.onboarding.OnboardingPageInteractionType
@@ -52,7 +51,6 @@ import software.aws.toolkits.jetbrains.services.cwc.clients.chat.model.TriggerTy
5251
import software.aws.toolkits.jetbrains.services.cwc.clients.chat.v1.ChatSessionFactoryV1
5352
import software.aws.toolkits.jetbrains.services.cwc.commands.CodeScanIssueActionMessage
5453
import software.aws.toolkits.jetbrains.services.cwc.commands.ContextMenuActionMessage
55-
import software.aws.toolkits.jetbrains.services.cwc.commands.EditorContextCommand
5654
import software.aws.toolkits.jetbrains.services.cwc.controller.chat.StaticPrompt
5755
import software.aws.toolkits.jetbrains.services.cwc.controller.chat.StaticTextResponse
5856
import software.aws.toolkits.jetbrains.services.cwc.controller.chat.messenger.ChatPromptHandler
@@ -76,12 +74,6 @@ import software.aws.toolkits.jetbrains.services.cwc.storage.ChatSessionStorage
7674
import software.aws.toolkits.telemetry.CwsprChatCommandType
7775
import java.util.UUID
7876

79-
data class TestCommandMessage(
80-
val sender: String = "codetest",
81-
val command: String = "test",
82-
val type: String = "addAnswer",
83-
) : AmazonQMessage
84-
8577
class ChatController private constructor(
8678
private val context: AmazonQAppInitContext,
8779
private val chatSessionStorage: ChatSessionStorage,
@@ -285,16 +277,7 @@ class ChatController private constructor(
285277

286278
// JB specific (not in vscode)
287279
override suspend fun processContextMenuCommand(message: ContextMenuActionMessage) {
288-
// Extract context
289-
if (message.project != context.project) {
290-
return
291-
}
292-
293-
if (message.command == EditorContextCommand.GenerateUnitTests) {
294-
// Publish an event to "codetest" tab with command as "test" and type as "addAnswer"
295-
val messageToPublish = TestCommandMessage()
296-
context.messagesFromAppToUi.publish(messageToPublish)
297-
}
280+
// No-op since context commands are handled elsewhere. This function will be deprecated once we remove this class
298281
}
299282

300283
private suspend fun processPromptActions(

plugins/amazonq/mynah-ui/src/mynah-ui/ui/quickActions/handler.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ private handleDocCommand(chatPrompt: ChatPrompt, tabID: string, taskName: string
331331
this.showScanInTab(affectedTabId)
332332
}
333333

334-
private handleCodeTestCommand(chatPrompt: ChatPrompt, tabID: string, eventId: string | undefined) {
334+
private handleCodeTestCommand(chatPrompt: ChatPrompt, tabID: string | undefined, eventId: string | undefined) {
335335
if (!this.isCodeTestEnabled) {
336336
return
337337
}
@@ -343,10 +343,17 @@ private handleDocCommand(chatPrompt: ChatPrompt, tabID: string, taskName: string
343343
this.connector.startTestGen(testTabId, realPromptText)
344344
return
345345
}
346+
/**
347+
* right click -> generate test has no tab id
348+
* we have to manually create one if a testgen tab
349+
* wasn't previously created
350+
*/
351+
if (!tabID) {
352+
tabID = this.mynahUI?.updateStore('', {})
353+
}
346354
const affectedTabId: string | undefined = this.addTab(tabID)
347355

348356
// if there is no test tab, open a new one
349-
350357
if (affectedTabId === undefined) {
351358
this.mynahUI?.notify({
352359
content: uiComponentsTexts.noMoreTabsTooltip,

0 commit comments

Comments
 (0)