Skip to content

Commit 3a66543

Browse files
authored
fix(amazonq): fix failing QRegionProfileManagerTest (#5546)
Fix test deleted in #5544
1 parent 60bf703 commit 3a66543

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

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

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import software.amazon.awssdk.services.ssooidc.SsoOidcClient
2626
import software.aws.toolkits.core.region.AwsRegion
2727
import software.aws.toolkits.jetbrains.core.MockClientManager
2828
import software.aws.toolkits.jetbrains.core.MockClientManagerRule
29+
import software.aws.toolkits.jetbrains.core.MockResourceCacheRule
2930
import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection
3031
import software.aws.toolkits.jetbrains.core.credentials.ManagedSsoProfile
3132
import software.aws.toolkits.jetbrains.core.credentials.MockToolkitAuthManagerRule
@@ -35,6 +36,7 @@ import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
3536
import software.aws.toolkits.jetbrains.core.credentials.sono.Q_SCOPES
3637
import software.aws.toolkits.jetbrains.core.region.MockRegionProviderRule
3738
import software.aws.toolkits.jetbrains.services.amazonq.profile.QEndpoints
39+
import software.aws.toolkits.jetbrains.services.amazonq.profile.QProfileResources
3840
import software.aws.toolkits.jetbrains.services.amazonq.profile.QProfileState
3941
import software.aws.toolkits.jetbrains.services.amazonq.profile.QProfileSwitchIntent
4042
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfile
@@ -68,6 +70,9 @@ class QRegionProfileManagerTest {
6870
@Rule
6971
val disposableRule = DisposableRule()
7072

73+
@get:Rule
74+
val resourceCache = MockResourceCacheRule()
75+
7176
private lateinit var sut: QRegionProfileManager
7277
private val project: Project
7378
get() = projectRule.project
@@ -142,7 +147,39 @@ class QRegionProfileManagerTest {
142147
assertThat(cnt).isEqualTo(2)
143148
}
144149

145-
// TODO: Add two unit tests for listProfiles — one with cache hit, one without
150+
@Test
151+
fun `listProfiles will call each client to get profiles`() {
152+
val client = clientRule.create<CodeWhispererRuntimeClient>()
153+
val mockResponse: SdkIterable<Profile> = SdkIterable<Profile> {
154+
listOf(
155+
Profile.builder().profileName("FOO").arn("foo").build(),
156+
).toMutableList().iterator()
157+
}
158+
159+
val mockResponse2: SdkIterable<Profile> = SdkIterable<Profile> {
160+
listOf(
161+
Profile.builder().profileName("BAR").arn("bar").build(),
162+
).toMutableList().iterator()
163+
}
164+
165+
val iterable: ListAvailableProfilesIterable = mock {
166+
on { it.profiles() } doReturn mockResponse doReturn mockResponse2
167+
}
168+
169+
// TODO: not sure if we can mock client with different region different response?
170+
client.stub {
171+
onGeneric { listAvailableProfilesPaginator(any<Consumer<ListAvailableProfilesRequest.Builder>>()) } doReturn iterable
172+
}
173+
val connectionSettings = sut.getQClientSettings(project)
174+
resourceCache.addEntry(connectionSettings, QProfileResources.LIST_REGION_PROFILES, QProfileResources.LIST_REGION_PROFILES.fetch(connectionSettings))
175+
176+
assertThat(sut.listRegionProfiles(project))
177+
.hasSize(2)
178+
.containsExactlyInAnyOrder(
179+
QRegionProfile("FOO", "foo"),
180+
QRegionProfile("BAR", "bar")
181+
)
182+
}
146183

147184
@Test
148185
fun `validateProfile should cross validate selected profile with latest API response for current project and remove it if its not longer accessible`() {

plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/core/MockResourceCache.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import org.junit.jupiter.api.extension.BeforeEachCallback
1313
import org.junit.jupiter.api.extension.ExtensionContext
1414
import org.junit.runner.Description
1515
import software.aws.toolkits.core.ClientConnectionSettings
16-
import software.aws.toolkits.core.ConnectionSettings
1716
import software.aws.toolkits.core.credentials.ToolkitAuthenticationProvider
1817
import software.aws.toolkits.core.credentials.ToolkitBearerTokenProvider
1918
import software.aws.toolkits.core.credentials.ToolkitCredentialsProvider
@@ -182,8 +181,12 @@ interface MockResourceCacheInterface {
182181
addEntry(project, resourceId, CompletableFuture.failedFuture<Any>(throws))
183182
}
184183

185-
fun <T> addEntry(connectionSettings: ConnectionSettings, resource: Resource.Cached<T>, value: CompletableFuture<T>) {
186-
addEntry(resource, connectionSettings.region.id, connectionSettings.credentials.id, value)
184+
fun <T> addEntry(connectionSettings: ClientConnectionSettings<*>, resource: Resource.Cached<T>, value: T) {
185+
addEntry(resource, connectionSettings.region.id, connectionSettings.providerId, value)
186+
}
187+
188+
fun <T> addEntry(connectionSettings: ClientConnectionSettings<*>, resource: Resource.Cached<T>, value: CompletableFuture<T>) {
189+
addEntry(resource, connectionSettings.region.id, connectionSettings.providerId, value)
187190
}
188191

189192
fun <T> addEntry(resource: Resource.Cached<T>, regionId: String, credentialsId: String, value: T) {

0 commit comments

Comments
 (0)