Skip to content

Commit af7205b

Browse files
committed
tst
1 parent e5934bc commit af7205b

File tree

6 files changed

+151
-75
lines changed

6 files changed

+151
-75
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ open class CodeWhispererTestBase {
124124
override val launcher: Launcher<AmazonQLanguageServer>
125125
get() = TODO("Not yet implemented")
126126

127+
@Suppress("ForbiddenVoid")
127128
override val launcherFuture: Future<Void>
128129
get() = CompletableFuture()
129130

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,8 @@ class AmazonQLspService @VisibleForTesting constructor(
335335

336336
interface AmazonQServerInstanceFacade : Disposable {
337337
val launcher: Launcher<AmazonQLanguageServer>
338+
339+
@Suppress("ForbiddenVoid")
338340
val launcherFuture: Future<Void>
339341
val initializeResult: Deferred<AwsExtendedInitializeResult>
340342
val encryptionManager: JwtEncryptionManager

plugins/amazonq/shared/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/auth/DefaultAuthCredentialsServiceTest.kt

Lines changed: 39 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,22 @@
44
package software.aws.toolkits.jetbrains.services.amazonq.lsp.auth
55

66
import com.intellij.openapi.Disposable
7-
import com.intellij.openapi.components.service
87
import com.intellij.openapi.components.serviceIfCreated
98
import com.intellij.openapi.project.Project
109
import com.intellij.testFramework.ProjectExtension
10+
import com.intellij.testFramework.replaceService
1111
import com.intellij.util.messages.MessageBus
1212
import com.intellij.util.messages.MessageBusConnection
13+
import io.mockk.coEvery
1314
import io.mockk.every
1415
import io.mockk.just
1516
import io.mockk.mockk
1617
import io.mockk.mockkStatic
1718
import io.mockk.runs
1819
import io.mockk.spyk
1920
import io.mockk.verify
21+
import kotlinx.coroutines.test.advanceUntilIdle
22+
import kotlinx.coroutines.test.runTest
2023
import org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage
2124
import org.junit.jupiter.api.BeforeEach
2225
import org.junit.jupiter.api.Test
@@ -26,6 +29,7 @@ import software.aws.toolkits.core.credentials.ToolkitBearerTokenProvider
2629
import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection
2730
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
2831
import software.aws.toolkits.jetbrains.core.credentials.sso.PKCEAuthorizationGrantToken
32+
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenAuthState
2933
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.InteractiveBearerTokenProvider
3034
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLanguageServer
3135
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
@@ -69,20 +73,20 @@ class DefaultAuthCredentialsServiceTest {
6973
}
7074

7175
val mockLspService = mockk<AmazonQLspService>()
72-
every {
73-
mockLspService.executeSync<CompletableFuture<ResponseMessage>>(any())
76+
coEvery {
77+
mockLspService.executeIfRunning<CompletableFuture<ResponseMessage>>(any())
7478
} coAnswers {
7579
val func = firstArg<suspend AmazonQLspService.(AmazonQLanguageServer) -> CompletableFuture<ResponseMessage>>()
7680
func.invoke(mockLspService, mockLanguageServer)
7781
}
7882

7983
every {
8084
mockLanguageServer.updateTokenCredentials(any())
81-
} returns CompletableFuture<ResponseMessage>()
85+
} returns CompletableFuture.completedFuture(ResponseMessage())
8286

8387
every {
8488
mockLanguageServer.deleteTokenCredentials()
85-
} returns CompletableFuture.completedFuture(Unit)
89+
} returns Unit
8690

8791
every { project.getService(AmazonQLspService::class.java) } returns mockLspService
8892
every { project.serviceIfCreated<AmazonQLspService>() } returns mockLspService
@@ -101,8 +105,9 @@ class DefaultAuthCredentialsServiceTest {
101105
mockConnection = createMockConnection(accessToken)
102106
mockConnectionManager = mockk {
103107
every { activeConnectionForFeature(any()) } returns mockConnection
108+
every { connectionStateForFeature(any()) } returns BearerTokenAuthState.AUTHORIZED
104109
}
105-
every { project.service<ToolkitConnectionManager>() } returns mockConnectionManager
110+
project.replaceService(ToolkitConnectionManager::class.java, mockConnectionManager, project)
106111
mockkStatic("software.aws.toolkits.jetbrains.utils.FunctionUtilsKt")
107112
// these set so init doesn't always emit
108113
every { isQConnected(any()) } returns false
@@ -142,64 +147,70 @@ class DefaultAuthCredentialsServiceTest {
142147
}
143148

144149
@Test
145-
fun `activeConnectionChanged updates token when connection ID matches Q connection`() {
146-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager)
150+
fun `activeConnectionChanged updates token when connection ID matches Q connection`() = runTest {
151+
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
147152
val newConnection = createMockConnection("new-token", "connection-id")
148153
every { mockConnection.id } returns "connection-id"
149154

150155
sut.activeConnectionChanged(newConnection)
151156

157+
advanceUntilIdle()
152158
verify(exactly = 1) { mockLanguageServer.updateTokenCredentials(any()) }
153159
}
154160

155161
@Test
156-
fun `activeConnectionChanged does not update token when connection ID differs`() {
157-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager)
162+
fun `activeConnectionChanged does not update token when connection ID differs`() = runTest {
163+
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
158164
val newConnection = createMockConnection("new-token", "different-id")
159165
every { mockConnection.id } returns "q-connection-id"
160166

161167
sut.activeConnectionChanged(newConnection)
162168

169+
advanceUntilIdle()
163170
verify(exactly = 0) { mockLanguageServer.updateTokenCredentials(any()) }
164171
}
165172

166173
@Test
167-
fun `onChange updates token with new connection`() {
168-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager)
174+
fun `onChange updates token with new connection`() = runTest {
175+
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
169176
setupMockConnectionManager("updated-token")
170177

171178
sut.onChange("providerId", listOf("new-scope"))
172179

180+
advanceUntilIdle()
173181
verify(exactly = 1) { mockLanguageServer.updateTokenCredentials(any()) }
174182
}
175183

176184
@Test
177-
fun `init does not update token when Q is not connected`() {
185+
fun `init does not update token when Q is not connected`() = runTest {
178186
every { isQConnected(project) } returns false
179187
every { isQExpired(project) } returns false
180188

181-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager)
189+
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
182190

191+
advanceUntilIdle()
183192
verify(exactly = 0) { mockLanguageServer.updateTokenCredentials(any()) }
184193
}
185194

186195
@Test
187-
fun `init does not update token when Q is expired`() {
196+
fun `init does not update token when Q is expired`() = runTest {
188197
every { isQConnected(project) } returns true
189198
every { isQExpired(project) } returns true
190199

191-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager)
200+
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
192201

202+
advanceUntilIdle()
193203
verify(exactly = 0) { mockLanguageServer.updateTokenCredentials(any()) }
194204
}
195205

196206
@Test
197-
fun `test updateTokenCredentials unencrypted success`() {
207+
fun `test updateTokenCredentials unencrypted success`() = runTest {
198208
val isEncrypted = false
199-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager)
209+
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
200210

201211
sut.updateTokenCredentials(mockConnection, isEncrypted)
202212

213+
advanceUntilIdle()
203214
verify(exactly = 1) {
204215
mockLanguageServer.updateTokenCredentials(
205216
UpdateCredentialsPayload(
@@ -214,8 +225,8 @@ class DefaultAuthCredentialsServiceTest {
214225
}
215226

216227
@Test
217-
fun `test updateTokenCredentials encrypted success`() {
218-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager)
228+
fun `test updateTokenCredentials encrypted success`() = runTest {
229+
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
219230

220231
val encryptedToken = "encryptedToken"
221232
val isEncrypted = true
@@ -224,6 +235,7 @@ class DefaultAuthCredentialsServiceTest {
224235

225236
sut.updateTokenCredentials(mockConnection, isEncrypted)
226237

238+
advanceUntilIdle()
227239
verify(atLeast = 1) {
228240
mockLanguageServer.updateTokenCredentials(
229241
UpdateCredentialsPayload(
@@ -238,22 +250,24 @@ class DefaultAuthCredentialsServiceTest {
238250
}
239251

240252
@Test
241-
fun `test deleteTokenCredentials success`() {
242-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager)
253+
fun `test deleteTokenCredentials success`() = runTest {
254+
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
243255

244-
every { mockLanguageServer.deleteTokenCredentials() } returns CompletableFuture.completedFuture(Unit)
256+
every { mockLanguageServer.deleteTokenCredentials() } returns Unit
245257

246258
sut.deleteTokenCredentials()
247259

260+
advanceUntilIdle()
248261
verify(exactly = 1) { mockLanguageServer.deleteTokenCredentials() }
249262
}
250263

251264
@Test
252-
fun `init results in token update`() {
265+
fun `init results in token update`() = runTest {
253266
every { isQConnected(any()) } returns true
254267
every { isQExpired(any()) } returns false
255-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager)
268+
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
256269

270+
advanceUntilIdle()
257271
verify(exactly = 1) { mockLanguageServer.updateTokenCredentials(any()) }
258272
}
259273
}

plugins/amazonq/shared/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/dependencies/DefaultModuleDependenciesServiceTest.kt

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@ import com.intellij.openapi.roots.ModuleRootEvent
1212
import com.intellij.testFramework.ApplicationExtension
1313
import com.intellij.util.messages.MessageBus
1414
import com.intellij.util.messages.MessageBusConnection
15+
import io.mockk.coEvery
1516
import io.mockk.every
1617
import io.mockk.just
1718
import io.mockk.mockk
1819
import io.mockk.mockkObject
1920
import io.mockk.mockkStatic
2021
import io.mockk.runs
2122
import io.mockk.verify
23+
import kotlinx.coroutines.test.advanceUntilIdle
24+
import kotlinx.coroutines.test.runTest
2225
import org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage
2326
import org.junit.jupiter.api.BeforeEach
2427
import org.junit.jupiter.api.Test
@@ -45,7 +48,7 @@ class DefaultModuleDependenciesServiceTest {
4548
mockDependencyProvider = mockk<ModuleDependencyProvider>()
4649
mockLanguageServer = mockk()
4750

48-
every { mockLanguageServer.didChangeDependencyPaths(any()) } returns CompletableFuture<Unit>()
51+
every { mockLanguageServer.didChangeDependencyPaths(any()) } returns Unit
4952

5053
// Mock message bus
5154
val messageBus = mockk<MessageBus>()
@@ -63,8 +66,8 @@ class DefaultModuleDependenciesServiceTest {
6366
val mockLspService = mockk<AmazonQLspService>()
6467
every { project.getService(AmazonQLspService::class.java) } returns mockLspService
6568
every { project.serviceIfCreated<AmazonQLspService>() } returns mockLspService
66-
every {
67-
mockLspService.executeSync<CompletableFuture<ResponseMessage>>(any())
69+
coEvery {
70+
mockLspService.executeIfRunning<CompletableFuture<ResponseMessage>>(any())
6871
} coAnswers {
6972
val func = firstArg<suspend AmazonQLspService.(AmazonQLanguageServer) -> CompletableFuture<ResponseMessage>>()
7073
func.invoke(mockLspService, mockLanguageServer)
@@ -81,7 +84,7 @@ class DefaultModuleDependenciesServiceTest {
8184
}
8285

8386
@Test
84-
fun `test initial sync on construction`() {
87+
fun `test initial sync on construction`() = runTest {
8588
// Arrange
8689
val module = mockk<Module>()
8790
val params = DidChangeDependencyPathsParams(
@@ -95,13 +98,14 @@ class DefaultModuleDependenciesServiceTest {
9598
every { mockModuleManager.modules } returns arrayOf(module)
9699
prepDependencyProvider(listOf(Pair(module, params)))
97100

98-
sut = DefaultModuleDependenciesService(project)
101+
sut = DefaultModuleDependenciesService(project, this)
99102

103+
advanceUntilIdle()
100104
verify { mockLanguageServer.didChangeDependencyPaths(params) }
101105
}
102106

103107
@Test
104-
fun `test rootsChanged with multiple modules`() {
108+
fun `test rootsChanged with multiple modules`() = runTest {
105109
// Arrange
106110
val module1 = mockk<Module>()
107111
val module2 = mockk<Module>()
@@ -127,14 +131,15 @@ class DefaultModuleDependenciesServiceTest {
127131
)
128132
)
129133

130-
sut = DefaultModuleDependenciesService(project)
134+
sut = DefaultModuleDependenciesService(project, this)
131135

136+
advanceUntilIdle()
132137
verify { mockLanguageServer.didChangeDependencyPaths(params1) }
133138
verify { mockLanguageServer.didChangeDependencyPaths(params2) }
134139
}
135140

136141
@Test
137-
fun `test rootsChanged withFileTypesChange`() {
142+
fun `test rootsChanged withFileTypesChange`() = runTest {
138143
// Arrange
139144
val module = mockk<Module>()
140145
val params = DidChangeDependencyPathsParams(
@@ -148,15 +153,16 @@ class DefaultModuleDependenciesServiceTest {
148153
val event = mockk<ModuleRootEvent>()
149154
every { event.isCausedByFileTypesChange } returns true
150155

151-
sut = DefaultModuleDependenciesService(project)
156+
sut = DefaultModuleDependenciesService(project, this)
152157

153158
sut.rootsChanged(event)
154159

160+
advanceUntilIdle()
155161
verify(exactly = 1) { mockLanguageServer.didChangeDependencyPaths(params) }
156162
}
157163

158164
@Test
159-
fun `test rootsChanged after module changes`() {
165+
fun `test rootsChanged after module changes`() = runTest {
160166
// Arrange
161167
val module = mockk<Module>()
162168
val params = DidChangeDependencyPathsParams(
@@ -173,10 +179,11 @@ class DefaultModuleDependenciesServiceTest {
173179

174180
prepDependencyProvider(listOf(Pair(module, params)))
175181

176-
sut = DefaultModuleDependenciesService(project)
182+
sut = DefaultModuleDependenciesService(project, this)
177183

178184
sut.rootsChanged(event)
179185

186+
advanceUntilIdle()
180187
verify(exactly = 2) { mockLanguageServer.didChangeDependencyPaths(params) }
181188
}
182189

0 commit comments

Comments
 (0)