Skip to content

Commit 8db18ae

Browse files
committed
Fix MockK exception in DefaultAuthCredentialsServiceTest for 2025.3
Use spyk(project) to create a spy of the inherited project from HeavyPlatformTestCase, matching the pattern from the original ProjectExtension-based test. This allows MockK to intercept calls to project.getService() and project.serviceIfCreated(). Fixes all 9 test failures in this class.
1 parent e9c2978 commit 8db18ae

File tree

1 file changed

+21
-17
lines changed

1 file changed

+21
-17
lines changed

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

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package software.aws.toolkits.jetbrains.services.amazonq.lsp.auth
55

66
import com.intellij.openapi.Disposable
77
import com.intellij.openapi.components.serviceIfCreated
8+
import com.intellij.openapi.project.Project
89
import com.intellij.testFramework.HeavyPlatformTestCase
910
import com.intellij.testFramework.replaceService
1011
import com.intellij.util.messages.MessageBus
@@ -15,6 +16,7 @@ import io.mockk.just
1516
import io.mockk.mockk
1617
import io.mockk.mockkStatic
1718
import io.mockk.runs
19+
import io.mockk.spyk
1820
import io.mockk.verify
1921
import kotlinx.coroutines.test.advanceUntilIdle
2022
import kotlinx.coroutines.test.runTest
@@ -43,6 +45,7 @@ class DefaultAuthCredentialsServiceTest : HeavyPlatformTestCase() {
4345
private const val TEST_ACCESS_TOKEN = "test-access-token"
4446
}
4547

48+
private lateinit var spyProject: Project
4649
private lateinit var mockLanguageServer: AmazonQLanguageServer
4750
private lateinit var mockEncryptionManager: JwtEncryptionManager
4851
private lateinit var mockConnectionManager: ToolkitConnectionManager
@@ -51,6 +54,7 @@ class DefaultAuthCredentialsServiceTest : HeavyPlatformTestCase() {
5154

5255
override fun setUp() {
5356
super.setUp()
57+
spyProject = spyk(project)
5458
setupMockLspService()
5559
setupMockMessageBus()
5660
setupMockConnectionManager()
@@ -82,16 +86,16 @@ class DefaultAuthCredentialsServiceTest : HeavyPlatformTestCase() {
8286
mockLanguageServer.updateConfiguration(any())
8387
} returns CompletableFuture.completedFuture(LspServerConfigurations(emptyList()))
8488

85-
every { project.getService(AmazonQLspService::class.java) } returns mockLspService
86-
every { project.serviceIfCreated<AmazonQLspService>() } returns mockLspService
89+
every { spyProject.getService(AmazonQLspService::class.java) } returns mockLspService
90+
every { spyProject.serviceIfCreated<AmazonQLspService>() } returns mockLspService
8791
}
8892

8993
private fun setupMockMessageBus() {
9094
val messageBus = mockk<MessageBus>()
9195
val mockConnection = mockk<MessageBusConnection> {
9296
every { subscribe(any(), any()) } just runs
9397
}
94-
every { project.messageBus } returns messageBus
98+
every { spyProject.messageBus } returns messageBus
9599
every { messageBus.connect(any<Disposable>()) } returns mockConnection
96100
}
97101

@@ -101,7 +105,7 @@ class DefaultAuthCredentialsServiceTest : HeavyPlatformTestCase() {
101105
every { activeConnectionForFeature(any()) } returns mockConnection
102106
every { connectionStateForFeature(any()) } returns BearerTokenAuthState.AUTHORIZED
103107
}
104-
project.replaceService(ToolkitConnectionManager::class.java, mockConnectionManager, project)
108+
spyProject.replaceService(ToolkitConnectionManager::class.java, mockConnectionManager, spyProject)
105109
mockkStatic("software.aws.toolkits.jetbrains.utils.FunctionUtilsKt")
106110
// these set so init doesn't always emit
107111
every { isQConnected(any()) } returns false
@@ -141,7 +145,7 @@ class DefaultAuthCredentialsServiceTest : HeavyPlatformTestCase() {
141145
}
142146

143147
fun testActiveConnectionChangedUpdatesTokenWhenConnectionIdMatchesQConnection() = runTest {
144-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
148+
sut = DefaultAuthCredentialsService(spyProject, mockEncryptionManager, this)
145149
val newConnection = createMockConnection("new-token", "connection-id")
146150
every { mockConnection.id } returns "connection-id"
147151

@@ -152,7 +156,7 @@ class DefaultAuthCredentialsServiceTest : HeavyPlatformTestCase() {
152156
}
153157

154158
fun testActiveConnectionChangedDoesNotUpdateTokenWhenConnectionIdDiffers() = runTest {
155-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
159+
sut = DefaultAuthCredentialsService(spyProject, mockEncryptionManager, this)
156160
val newConnection = createMockConnection("new-token", "different-id")
157161
every { mockConnection.id } returns "q-connection-id"
158162

@@ -163,7 +167,7 @@ class DefaultAuthCredentialsServiceTest : HeavyPlatformTestCase() {
163167
}
164168

165169
fun testOnChangeUpdatesTokenWithNewConnection() = runTest {
166-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
170+
sut = DefaultAuthCredentialsService(spyProject, mockEncryptionManager, this)
167171
setupMockConnectionManager("updated-token")
168172

169173
sut.onProviderChange("providerId", listOf("new-scope"))
@@ -173,28 +177,28 @@ class DefaultAuthCredentialsServiceTest : HeavyPlatformTestCase() {
173177
}
174178

175179
fun testInitDoesNotUpdateTokenWhenQIsNotConnected() = runTest {
176-
every { isQConnected(project) } returns false
177-
every { isQExpired(project) } returns false
180+
every { isQConnected(spyProject) } returns false
181+
every { isQExpired(spyProject) } returns false
178182

179-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
183+
sut = DefaultAuthCredentialsService(spyProject, mockEncryptionManager, this)
180184

181185
advanceUntilIdle()
182186
verify(exactly = 0) { mockLanguageServer.updateTokenCredentials(any()) }
183187
}
184188

185189
fun testInitDoesNotUpdateTokenWhenQIsExpired() = runTest {
186-
every { isQConnected(project) } returns true
187-
every { isQExpired(project) } returns true
190+
every { isQConnected(spyProject) } returns true
191+
every { isQExpired(spyProject) } returns true
188192

189-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
193+
sut = DefaultAuthCredentialsService(spyProject, mockEncryptionManager, this)
190194

191195
advanceUntilIdle()
192196
verify(exactly = 0) { mockLanguageServer.updateTokenCredentials(any()) }
193197
}
194198

195199
fun testUpdateTokenCredentialsUnencryptedSuccess() = runTest {
196200
val isEncrypted = false
197-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
201+
sut = DefaultAuthCredentialsService(spyProject, mockEncryptionManager, this)
198202

199203
sut.updateTokenCredentials(mockConnection, isEncrypted)
200204

@@ -213,7 +217,7 @@ class DefaultAuthCredentialsServiceTest : HeavyPlatformTestCase() {
213217
}
214218

215219
fun testUpdateTokenCredentialsEncryptedSuccess() = runTest {
216-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
220+
sut = DefaultAuthCredentialsService(spyProject, mockEncryptionManager, this)
217221

218222
val encryptedToken = "encryptedToken"
219223
val isEncrypted = true
@@ -237,7 +241,7 @@ class DefaultAuthCredentialsServiceTest : HeavyPlatformTestCase() {
237241
}
238242

239243
fun testDeleteTokenCredentialsSuccess() = runTest {
240-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
244+
sut = DefaultAuthCredentialsService(spyProject, mockEncryptionManager, this)
241245

242246
every { mockLanguageServer.deleteTokenCredentials() } returns Unit
243247

@@ -250,7 +254,7 @@ class DefaultAuthCredentialsServiceTest : HeavyPlatformTestCase() {
250254
fun testInitResultsInTokenUpdate() = runTest {
251255
every { isQConnected(any()) } returns true
252256
every { isQExpired(any()) } returns false
253-
sut = DefaultAuthCredentialsService(project, mockEncryptionManager, this)
257+
sut = DefaultAuthCredentialsService(spyProject, mockEncryptionManager, this)
254258

255259
advanceUntilIdle()
256260
verify(exactly = 1) { mockLanguageServer.updateTokenCredentials(any()) }

0 commit comments

Comments
 (0)