@@ -26,6 +26,7 @@ import software.amazon.awssdk.services.ssooidc.SsoOidcClient
2626import software.aws.toolkits.core.region.AwsRegion
2727import software.aws.toolkits.jetbrains.core.MockClientManager
2828import software.aws.toolkits.jetbrains.core.MockClientManagerRule
29+ import software.aws.toolkits.jetbrains.core.MockResourceCacheRule
2930import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection
3031import software.aws.toolkits.jetbrains.core.credentials.ManagedSsoProfile
3132import software.aws.toolkits.jetbrains.core.credentials.MockToolkitAuthManagerRule
@@ -35,6 +36,7 @@ import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
3536import software.aws.toolkits.jetbrains.core.credentials.sono.Q_SCOPES
3637import software.aws.toolkits.jetbrains.core.region.MockRegionProviderRule
3738import software.aws.toolkits.jetbrains.services.amazonq.profile.QEndpoints
39+ import software.aws.toolkits.jetbrains.services.amazonq.profile.QProfileResources
3840import software.aws.toolkits.jetbrains.services.amazonq.profile.QProfileState
3941import software.aws.toolkits.jetbrains.services.amazonq.profile.QProfileSwitchIntent
4042import 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` () {
0 commit comments