Skip to content

Commit d1f1709

Browse files
committed
fix(amazonq): fix failing QRegionProfileManagerTest
1 parent 1a4a5db commit d1f1709

File tree

2 files changed

+44
-3
lines changed

2 files changed

+44
-3
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
@@ -67,6 +69,10 @@ class QRegionProfileManagerTest {
6769
@Rule
6870
val disposableRule = DisposableRule()
6971

72+
@get:Rule
73+
val resourceCache = MockResourceCacheRule()
74+
75+
7076
private lateinit var sut: QRegionProfileManager
7177
private val project: Project
7278
get() = projectRule.project
@@ -124,7 +130,38 @@ class QRegionProfileManagerTest {
124130
assertThat(cnt).isEqualTo(2)
125131
}
126132

127-
// TODO: Add two unit tests for listProfiles — one with cache hit, one without
133+
@Test
134+
fun `listProfiles will call each client to get profiles`() {
135+
val client = clientRule.create<CodeWhispererRuntimeClient>()
136+
val mockResponse: SdkIterable<Profile> = SdkIterable<Profile> {
137+
listOf(
138+
Profile.builder().profileName("FOO").arn("foo").build(),
139+
).toMutableList().iterator()
140+
}
141+
142+
val mockResponse2: SdkIterable<Profile> = SdkIterable<Profile> {
143+
listOf(
144+
Profile.builder().profileName("BAR").arn("bar").build(),
145+
).toMutableList().iterator()
146+
}
147+
148+
val iterable: ListAvailableProfilesIterable = mock {
149+
on { it.profiles() } doReturn mockResponse doReturn mockResponse2
150+
}
151+
152+
// TODO: not sure if we can mock client with different region different response?
153+
client.stub {
154+
onGeneric { listAvailableProfilesPaginator(any<Consumer<ListAvailableProfilesRequest.Builder>>()) } doReturn iterable
155+
}
156+
val connectionSettings = sut.getQClientSettings(project)
157+
resourceCache.addEntry(connectionSettings, QProfileResources.LIST_REGION_PROFILES, QProfileResources.LIST_REGION_PROFILES.fetch(connectionSettings))
158+
159+
val r = sut.listRegionProfiles(project)
160+
assertThat(r).hasSize(2)
161+
162+
assertThat(r).contains(QRegionProfile("FOO", "foo"))
163+
assertThat(r).contains(QRegionProfile("BAR", "bar"))
164+
}
128165

129166
@Test
130167
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 & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,12 @@ interface MockResourceCacheInterface {
182182
addEntry(project, resourceId, CompletableFuture.failedFuture<Any>(throws))
183183
}
184184

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

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

0 commit comments

Comments
 (0)