@@ -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
@@ -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` () {
0 commit comments