Skip to content

Commit a52dcc9

Browse files
authored
Add tests for #4468 (#4469)
1 parent df1dd93 commit a52dcc9

File tree

2 files changed

+59
-2
lines changed

2 files changed

+59
-2
lines changed

buildSrc/src/main/kotlin/toolkit-intellij-subplugin.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ tasks.withType<Test>().all {
122122
val jetbrainsCoreTestResources = project(":plugin-toolkit:jetbrains-core").projectDir.resolve("tst-resources")
123123
systemProperty("idea.log.config.properties.file", jetbrainsCoreTestResources.resolve("toolkit-test-log.properties"))
124124
systemProperty("org.gradle.project.ideProfileName", ideProfile.name)
125-
systemProperty("aws.dev.useDAG", true)
126125

127126
jvmArgs(openedPackages)
128127
}

plugins/core/jetbrains-community/tst/software/aws/toolkits/jetbrains/core/credentials/sso/SsoAccessTokenProviderTest.kt

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,18 @@
33

44
package software.aws.toolkits.jetbrains.core.credentials.sso
55

6+
import com.intellij.openapi.application.ApplicationManager
67
import com.intellij.testFramework.ApplicationRule
8+
import com.intellij.testFramework.DisposableRule
79
import com.intellij.testFramework.RuleChain
10+
import com.intellij.testFramework.replaceService
811
import kotlinx.coroutines.runBlocking
912
import org.assertj.core.api.Assertions.assertThat
1013
import org.assertj.core.api.Assertions.assertThatThrownBy
1114
import org.junit.Before
1215
import org.junit.Rule
1316
import org.junit.Test
17+
import org.junit.jupiter.api.assertThrows
1418
import org.mockito.kotlin.KStubbing
1519
import org.mockito.kotlin.any
1620
import org.mockito.kotlin.eq
@@ -33,6 +37,7 @@ import software.amazon.awssdk.services.ssooidc.model.StartDeviceAuthorizationRes
3337
import software.aws.toolkits.core.region.aRegionId
3438
import software.aws.toolkits.core.utils.delegateMock
3539
import software.aws.toolkits.core.utils.test.aString
40+
import software.aws.toolkits.jetbrains.core.credentials.sso.pkce.ToolkitOAuthService
3641
import software.aws.toolkits.jetbrains.utils.rules.SsoLoginCallbackProviderRule
3742
import java.time.Clock
3843
import java.time.Duration
@@ -53,11 +58,12 @@ class SsoAccessTokenProviderTest {
5358
private lateinit var ssoCache: SsoCache
5459

5560
private val applicationRule = ApplicationRule()
61+
private val disposableRule = DisposableRule()
5662
private val ssoCallbackRule = SsoLoginCallbackProviderRule()
5763

5864
@JvmField
5965
@Rule
60-
val ruleChain = RuleChain(applicationRule, ssoCallbackRule)
66+
val ruleChain = RuleChain(applicationRule, ssoCallbackRule, disposableRule)
6167

6268
@Before
6369
fun setUp() {
@@ -163,6 +169,58 @@ class SsoAccessTokenProviderTest {
163169
verify(ssoCache).saveAccessToken(ssoUrl, accessToken)
164170
}
165171

172+
@Test
173+
fun `initiates authorizatation_grant registration when scopes are requested in a commercial region`() {
174+
val sut = SsoAccessTokenProvider(ssoUrl, "us-east-1", ssoCache, ssoOidcClient, scopes = listOf("dummy:scope"), clock = clock)
175+
setupCacheStub(returnValue = null)
176+
177+
val oauth = mock<ToolkitOAuthService>()
178+
ApplicationManager.getApplication().replaceService(ToolkitOAuthService::class.java, oauth, disposableRule.disposable)
179+
180+
ssoOidcClient.stub {
181+
on(
182+
ssoOidcClient.registerClient(any<RegisterClientRequest>())
183+
).thenReturn(
184+
RegisterClientResponse.builder()
185+
.clientId(clientId)
186+
.clientSecret(clientSecret)
187+
.clientSecretExpiresAt(clock.instant().plusSeconds(180).toEpochMilli())
188+
.build()
189+
)
190+
}
191+
192+
// flow is not completely stubbed out
193+
assertThrows<Exception> { sut.accessToken() }
194+
195+
verify(ssoCache).saveClientRegistration(any<PKCEClientRegistrationCacheKey>(), any())
196+
}
197+
198+
@Test
199+
fun `initiates device code registration when scopes are requested in a non-commercial region`() {
200+
val sut = SsoAccessTokenProvider(ssoUrl, "us-gov-east-1", ssoCache, ssoOidcClient, scopes = listOf("dummy:scope"), clock = clock)
201+
setupCacheStub(returnValue = null)
202+
203+
val oauth = mock<ToolkitOAuthService>()
204+
ApplicationManager.getApplication().replaceService(ToolkitOAuthService::class.java, oauth, disposableRule.disposable)
205+
206+
ssoOidcClient.stub {
207+
on(
208+
ssoOidcClient.registerClient(any<RegisterClientRequest>())
209+
).thenReturn(
210+
RegisterClientResponse.builder()
211+
.clientId(clientId)
212+
.clientSecret(clientSecret)
213+
.clientSecretExpiresAt(clock.instant().plusSeconds(180).toEpochMilli())
214+
.build()
215+
)
216+
}
217+
218+
// flow is not completely stubbed out
219+
assertThrows<Exception> { sut.accessToken() }
220+
221+
verify(ssoCache).saveClientRegistration(any<DeviceAuthorizationClientRegistrationCacheKey>(), any())
222+
}
223+
166224
@Test
167225
fun getAccessTokenWithoutCachesMultiplePolls() {
168226
val expirationClientRegistration = clock.instant().plusSeconds(120)

0 commit comments

Comments
 (0)