@@ -26,6 +26,7 @@ import software.amazon.awssdk.services.ssooidc.SsoOidcClient
26
26
import software.aws.toolkits.core.region.AwsRegion
27
27
import software.aws.toolkits.jetbrains.core.MockClientManager
28
28
import software.aws.toolkits.jetbrains.core.MockClientManagerRule
29
+ import software.aws.toolkits.jetbrains.core.MockResourceCacheRule
29
30
import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection
30
31
import software.aws.toolkits.jetbrains.core.credentials.ManagedSsoProfile
31
32
import software.aws.toolkits.jetbrains.core.credentials.MockToolkitAuthManagerRule
@@ -35,6 +36,7 @@ import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
35
36
import software.aws.toolkits.jetbrains.core.credentials.sono.Q_SCOPES
36
37
import software.aws.toolkits.jetbrains.core.region.MockRegionProviderRule
37
38
import software.aws.toolkits.jetbrains.services.amazonq.profile.QEndpoints
39
+ import software.aws.toolkits.jetbrains.services.amazonq.profile.QProfileResources
38
40
import software.aws.toolkits.jetbrains.services.amazonq.profile.QProfileState
39
41
import software.aws.toolkits.jetbrains.services.amazonq.profile.QProfileSwitchIntent
40
42
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfile
@@ -68,6 +70,9 @@ class QRegionProfileManagerTest {
68
70
@Rule
69
71
val disposableRule = DisposableRule ()
70
72
73
+ @get:Rule
74
+ val resourceCache = MockResourceCacheRule ()
75
+
71
76
private lateinit var sut: QRegionProfileManager
72
77
private val project: Project
73
78
get() = projectRule.project
@@ -142,7 +147,39 @@ class QRegionProfileManagerTest {
142
147
assertThat(cnt).isEqualTo(2 )
143
148
}
144
149
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
+ }
146
183
147
184
@Test
148
185
fun `validateProfile should cross validate selected profile with latest API response for current project and remove it if its not longer accessible` () {
0 commit comments