Skip to content

Commit ab34c78

Browse files
committed
fix tests
1 parent e98c7d8 commit ab34c78

File tree

10 files changed

+78
-996
lines changed

10 files changed

+78
-996
lines changed

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererCodeCoverageTrackerTest.kt

Lines changed: 0 additions & 505 deletions
This file was deleted.

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererServiceTest.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import org.mockito.kotlin.any
1616
import org.mockito.kotlin.doReturn
1717
import org.mockito.kotlin.mock
1818
import org.mockito.kotlin.spy
19+
import org.mockito.kotlin.stub
1920
import org.mockito.kotlin.whenever
2021
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument.InlineCompletionTriggerKind
2122
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.FileUriUtil.toUriString
@@ -54,6 +55,12 @@ class CodeWhispererServiceTest : CodeWhispererTestBase() {
5455
val fileContextProviderSpy = spy(fileContextProvider)
5556
projectRule.project.replaceService(FileContextProvider::class.java, fileContextProviderSpy, disposableRule.disposable)
5657

58+
codewhispererService.stub {
59+
onGeneric {
60+
getRequestContext(any(), any(), any(), any(), any())
61+
}.thenCallRealMethod()
62+
}
63+
5764
val requestContext = codewhispererService.getRequestContext(
5865
TriggerTypeInfo(CodewhispererTriggerType.AutoTrigger, CodeWhispererAutomatedTriggerType.Enter()),
5966
editor = projectRule.fixture.editor,
@@ -87,6 +94,11 @@ class CodeWhispererServiceTest : CodeWhispererTestBase() {
8794
}
8895

8996
projectRule.project.replaceService(FileContextProvider::class.java, mockFileContextProvider, disposableRule.disposable)
97+
codewhispererService.stub {
98+
onGeneric {
99+
getRequestContext(any(), any(), any(), any(), any())
100+
}.thenCallRealMethod()
101+
}
90102

91103
val actual = codewhispererService.getRequestContext(
92104
TriggerTypeInfo(CodewhispererTriggerType.OnDemand, CodeWhispererAutomatedTriggerType.Unknown()),

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererSettingsTest.kt

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
package software.aws.toolkits.jetbrains.services.codewhisperer
55

66
import com.intellij.analysis.problemsView.toolWindow.ProblemsView
7-
import com.intellij.openapi.application.ApplicationManager
87
import com.intellij.openapi.components.service
98
import com.intellij.openapi.wm.RegisterToolWindowTask
109
import com.intellij.openapi.wm.ToolWindow
@@ -22,14 +21,12 @@ import org.junit.Rule
2221
import org.junit.Test
2322
import org.mockito.kotlin.any
2423
import org.mockito.kotlin.never
25-
import org.mockito.kotlin.spy
2624
import org.mockito.kotlin.verify
2725
import org.mockito.kotlin.whenever
2826
import software.aws.toolkits.jetbrains.core.ToolWindowHeadlessManagerImpl
2927
import software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWhispererLoginType
3028
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExploreActionState
3129
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.isCodeWhispererEnabled
32-
import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererService
3330
import software.aws.toolkits.jetbrains.services.codewhisperer.status.CodeWhispererStatusBarWidgetFactory
3431
import software.aws.toolkits.jetbrains.services.codewhisperer.toolwindow.CodeWhispererCodeReferenceToolWindowFactory
3532
import software.aws.toolkits.jetbrains.settings.CodeWhispererConfiguration
@@ -39,7 +36,6 @@ import kotlin.test.fail
3936

4037
class CodeWhispererSettingsTest : CodeWhispererTestBase() {
4138

42-
private lateinit var codewhispererServiceSpy: CodeWhispererService
4339
private lateinit var toolWindowHeadlessManager: ToolWindowHeadlessManagerImpl
4440

4541
@get:Rule
@@ -48,9 +44,6 @@ class CodeWhispererSettingsTest : CodeWhispererTestBase() {
4844
@Before
4945
override fun setUp() {
5046
super.setUp()
51-
codewhispererServiceSpy = spy(codewhispererService)
52-
ApplicationManager.getApplication().replaceService(CodeWhispererService::class.java, codewhispererServiceSpy, disposableRule.disposable)
53-
5447
// Create a mock ToolWindowManager with working implementation of setAvailable() and isAvailable()
5548
toolWindowHeadlessManager = object : ToolWindowHeadlessManagerImpl(projectRule.project) {
5649
private val myToolWindows: MutableMap<String, ToolWindow> = HashMap()
@@ -91,7 +84,7 @@ class CodeWhispererSettingsTest : CodeWhispererTestBase() {
9184
whenever(stateManager.checkActiveCodeWhispererConnectionType(projectRule.project)).thenReturn(CodeWhispererLoginType.Logout)
9285
assertThat(isCodeWhispererEnabled(projectRule.project)).isFalse
9386
invokeCodeWhispererService()
94-
verify(codewhispererServiceSpy, never()).showRecommendationsInPopup(any(), any(), any())
87+
verify(codewhispererService, never()).showRecommendationsInPopup(any(), any(), any())
9588
}
9689

9790
@Test
@@ -100,7 +93,7 @@ class CodeWhispererSettingsTest : CodeWhispererTestBase() {
10093
assertThat(stateManager.isAutoEnabled()).isFalse
10194
runInEdtAndWait {
10295
projectRule.fixture.type(':')
103-
verify(codewhispererServiceSpy, never()).showRecommendationsInPopup(any(), any(), any())
96+
verify(codewhispererService, never()).showRecommendationsInPopup(any(), any(), any())
10497
}
10598
}
10699

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererTelemetryTest.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import software.aws.toolkits.core.telemetry.TelemetryBatcher
1919
import software.aws.toolkits.core.telemetry.TelemetryPublisher
2020
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.actions.Pause
2121
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.actions.Resume
22-
import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.CodeWhispererCodeCoverageTracker
2322
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants
2423
import software.aws.toolkits.jetbrains.services.telemetry.NoOpPublisher
2524
import software.aws.toolkits.jetbrains.services.telemetry.TelemetryService
@@ -83,7 +82,6 @@ class CodeWhispererTelemetryTest : CodeWhispererTestBase() {
8382
super.tearDown()
8483
telemetryService.dispose()
8584
AwsSettings.getInstance().isTelemetryEnabled = isTelemetryEnabledDefault
86-
CodeWhispererCodeCoverageTracker.getInstancesMap().clear()
8785
}
8886

8987
companion object {

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererTestBase.kt

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
3838
import software.aws.toolkits.jetbrains.core.credentials.sono.Q_SCOPES
3939
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLanguageServer
4040
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
41-
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.LspServerConfigurations
42-
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.WorkspaceInfo
4341
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument.InlineCompletionListWithReferences
4442
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfileManager
4543
import software.aws.toolkits.jetbrains.services.codewhisperer.CodeWhispererTestUtil.codeWhispererRecommendationActionId
@@ -48,6 +46,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.CodeWhispererTestU
4846
import software.aws.toolkits.jetbrains.services.codewhisperer.CodeWhispererTestUtil.pythonTestLeftContext
4947
import software.aws.toolkits.jetbrains.services.codewhisperer.CodeWhispererTestUtil.testValidAccessToken
5048
import software.aws.toolkits.jetbrains.services.codewhisperer.actions.CodeWhispererRecommendationAction
49+
import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.CodeWhispererCodeScanManager
5150
import software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWhispererClientAdaptor
5251
import software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWhispererLoginType
5352
import software.aws.toolkits.jetbrains.services.codewhisperer.editor.CodeWhispererEditorManager
@@ -95,6 +94,7 @@ open class CodeWhispererTestBase {
9594
private lateinit var originalExplorerActionState: CodeWhispererExploreActionState
9695
private lateinit var originalSettings: CodeWhispererConfiguration
9796
private lateinit var qRegionProfileManagerSpy: QRegionProfileManager
97+
private lateinit var codeScanManager: CodeWhispererCodeScanManager
9898

9999
@Before
100100
open fun setUp() {
@@ -106,13 +106,6 @@ open class CodeWhispererTestBase {
106106
mockLspInlineCompletionResponse(pythonResponse)
107107

108108
mockClientManagerRule.create<SsoOidcClient>()
109-
every { mockLanguageServer.getConfigurationFromServer(any()) } returns CompletableFuture.completedFuture(
110-
LspServerConfigurations(
111-
listOf(
112-
WorkspaceInfo(projectRule.project.basePath.orEmpty(), "workspaceId")
113-
)
114-
)
115-
)
116109
every { mockLanguageServer.logInlineCompletionSessionResults(any()) } returns CompletableFuture.completedFuture(Unit)
117110

118111
popupManagerSpy = spy(CodeWhispererPopupManager.getInstance())
@@ -129,7 +122,15 @@ open class CodeWhispererTestBase {
129122

130123
stateManager = spy(CodeWhispererExplorerActionManager.getInstance())
131124
recommendationManager = CodeWhispererRecommendationManager.getInstance()
132-
codewhispererService = CodeWhispererService.getInstance()
125+
codewhispererService = spy(CodeWhispererService.getInstance())
126+
codewhispererService.stub {
127+
onGeneric {
128+
getRequestContext(any(), any(), any(), any(), any())
129+
} doAnswer {
130+
aRequestContext(projectRule.project)
131+
}
132+
}
133+
ApplicationManager.getApplication().replaceService(CodeWhispererService::class.java, codewhispererService, disposableRule.disposable)
133134
editorManager = CodeWhispererEditorManager.getInstance()
134135
settingsManager = CodeWhispererSettings.getInstance()
135136

@@ -163,6 +164,11 @@ open class CodeWhispererTestBase {
163164
ApplicationManager.getApplication().replaceService(CodeWhispererExplorerActionManager::class.java, stateManager, disposableRule.disposable)
164165
stateManager.setAutoEnabled(false)
165166

167+
codeScanManager = spy(CodeWhispererCodeScanManager.getInstance(projectRule.project))
168+
doNothing().`when`(codeScanManager).buildCodeScanUI()
169+
doNothing().`when`(codeScanManager).removeCodeScanUI()
170+
projectRule.project.replaceService(CodeWhispererCodeScanManager::class.java, codeScanManager, disposableRule.disposable)
171+
166172
val conn = authManagerRule.createConnection(ManagedSsoProfile("us-east-1", "url", Q_SCOPES))
167173
ToolkitConnectionManager.getInstance(projectRule.project).switchConnection(conn)
168174

@@ -190,7 +196,7 @@ open class CodeWhispererTestBase {
190196
fun withCodeWhispererServiceInvokedAndWait(runnable: (InvocationContext) -> Unit) {
191197
val statesCaptor = argumentCaptor<InvocationContext>()
192198
invokeCodeWhispererService()
193-
verify(popupManagerSpy, timeout(500000).atLeastOnce())
199+
verify(popupManagerSpy, timeout(5000).atLeastOnce())
194200
.showPopup(statesCaptor.capture(), any(), any(), any())
195201
val states = statesCaptor.lastValue
196202

@@ -254,13 +260,12 @@ open class CodeWhispererTestBase {
254260
}
255261

256262
fun addUserInputAfterInvocation(userInput: String) {
257-
val codewhispererServiceSpy = spy(codewhispererService)
258263
val triggerTypeCaptor = argumentCaptor<TriggerTypeInfo>()
259264
val editorCaptor = argumentCaptor<Editor>()
260265
val projectCaptor = argumentCaptor<Project>()
261266
val psiFileCaptor = argumentCaptor<PsiFile>()
262267
val latencyContextCaptor = argumentCaptor<LatencyContext>()
263-
codewhispererServiceSpy.stub {
268+
codewhispererService.stub {
264269
onGeneric {
265270
getRequestContext(
266271
triggerTypeCaptor.capture(),
@@ -270,7 +275,7 @@ open class CodeWhispererTestBase {
270275
latencyContextCaptor.capture()
271276
)
272277
}.doAnswer {
273-
val requestContext = codewhispererServiceSpy.getRequestContext(
278+
val requestContext = codewhispererService.getRequestContext(
274279
triggerTypeCaptor.firstValue,
275280
editorCaptor.firstValue,
276281
projectCaptor.firstValue,
@@ -281,7 +286,6 @@ open class CodeWhispererTestBase {
281286
requestContext
282287
}.thenCallRealMethod()
283288
}
284-
ApplicationManager.getApplication().replaceService(CodeWhispererService::class.java, codewhispererServiceSpy, disposableRule.disposable)
285289
}
286290

287291
fun mockLspInlineCompletionResponse(response: InlineCompletionListWithReferences) {

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererTestUtil.kt

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33

44
package software.aws.toolkits.jetbrains.services.codewhisperer
55

6+
import com.intellij.openapi.project.Project
67
import org.eclipse.lsp4j.jsonrpc.messages.Either
8+
import org.mockito.kotlin.mock
79
import software.amazon.awssdk.awscore.DefaultAwsResponseMetadata
810
import software.amazon.awssdk.awscore.util.AwsHeader
911
import software.amazon.awssdk.http.SdkHttpResponse
@@ -30,8 +32,14 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages
3032
import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererSql
3133
import software.aws.toolkits.jetbrains.services.codewhisperer.language.languages.CodeWhispererTypeScript
3234
import software.aws.toolkits.jetbrains.services.codewhisperer.model.CaretContext
35+
import software.aws.toolkits.jetbrains.services.codewhisperer.model.CaretPosition
3336
import software.aws.toolkits.jetbrains.services.codewhisperer.model.FileContextInfo
37+
import software.aws.toolkits.jetbrains.services.codewhisperer.model.LatencyContext
38+
import software.aws.toolkits.jetbrains.services.codewhisperer.model.TriggerTypeInfo
39+
import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererAutomatedTriggerType
3440
import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererService
41+
import software.aws.toolkits.jetbrains.services.codewhisperer.service.RequestContext
42+
import software.aws.toolkits.telemetry.CodewhispererTriggerType
3543
import java.nio.file.Paths
3644
import kotlin.random.Random
3745

@@ -120,6 +128,43 @@ fun aFileContextInfo(language: CodeWhispererProgrammingLanguage? = null): FileCo
120128
return FileContextInfo(caretContextInfo, fileName, programmingLanguage, fileRelativePath)
121129
}
122130

131+
fun aTriggerType(): CodewhispererTriggerType =
132+
CodewhispererTriggerType.values().filterNot { it == CodewhispererTriggerType.Unknown }.random()
133+
134+
fun aRequestContext(
135+
project: Project,
136+
myFileContextInfo: FileContextInfo? = null,
137+
): RequestContext {
138+
val triggerType = aTriggerType()
139+
val automatedTriggerType = if (triggerType == CodewhispererTriggerType.AutoTrigger) {
140+
listOf(
141+
CodeWhispererAutomatedTriggerType.IdleTime(),
142+
CodeWhispererAutomatedTriggerType.Enter(),
143+
CodeWhispererAutomatedTriggerType.SpecialChar('a'),
144+
CodeWhispererAutomatedTriggerType.IntelliSense()
145+
).random()
146+
} else {
147+
CodeWhispererAutomatedTriggerType.Unknown()
148+
}
149+
150+
return RequestContext(
151+
project,
152+
mock(),
153+
TriggerTypeInfo(triggerType, automatedTriggerType),
154+
CaretPosition(Random.nextInt(), Random.nextInt()),
155+
fileContextInfo = myFileContextInfo ?: aFileContextInfo(),
156+
null,
157+
LatencyContext(
158+
Random.nextDouble(),
159+
Random.nextLong(),
160+
Random.nextLong(),
161+
aString()
162+
),
163+
customizationArn = null,
164+
workspaceId = null,
165+
)
166+
}
167+
123168
fun aProgrammingLanguage(): CodeWhispererProgrammingLanguage = listOf(
124169
CodeWhispererJava.INSTANCE,
125170
CodeWhispererPython.INSTANCE,

0 commit comments

Comments
 (0)