@@ -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