Skip to content

Commit fbcdf40

Browse files
authored
Merge branch 'main' into regionExpansion_fixlaunch
2 parents ad24bbd + 3a66543 commit fbcdf40

File tree

4 files changed

+50
-6
lines changed

4 files changed

+50
-6
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "Fix issue where Amazon Q cannot process chunks from local `@workspace` context"
4+
}

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
@@ -29,6 +29,7 @@ import software.amazon.awssdk.services.ssooidc.SsoOidcClient
2929
import software.aws.toolkits.core.region.AwsRegion
3030
import software.aws.toolkits.jetbrains.core.MockClientManager
3131
import software.aws.toolkits.jetbrains.core.MockClientManagerRule
32+
import software.aws.toolkits.jetbrains.core.MockResourceCacheRule
3233
import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection
3334
import software.aws.toolkits.jetbrains.core.credentials.ManagedSsoProfile
3435
import software.aws.toolkits.jetbrains.core.credentials.MockToolkitAuthManagerRule
@@ -39,6 +40,7 @@ import software.aws.toolkits.jetbrains.core.credentials.sono.Q_SCOPES
3940
import software.aws.toolkits.jetbrains.core.credentials.sso.bearer.BearerTokenAuthState
4041
import software.aws.toolkits.jetbrains.core.region.MockRegionProviderRule
4142
import software.aws.toolkits.jetbrains.services.amazonq.profile.QEndpoints
43+
import software.aws.toolkits.jetbrains.services.amazonq.profile.QProfileResources
4244
import software.aws.toolkits.jetbrains.services.amazonq.profile.QProfileState
4345
import software.aws.toolkits.jetbrains.services.amazonq.profile.QProfileSwitchIntent
4446
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfile
@@ -72,6 +74,9 @@ class QRegionProfileManagerTest {
7274
@Rule
7375
val disposableRule = DisposableRule()
7476

77+
@get:Rule
78+
val resourceCache = MockResourceCacheRule()
79+
7580
private lateinit var sut: QRegionProfileManager
7681
private val project: Project
7782
get() = projectRule.project
@@ -150,7 +155,39 @@ class QRegionProfileManagerTest {
150155
assertThat(cnt).isEqualTo(2)
151156
}
152157

153-
// TODO: Add two unit tests for listProfiles — one with cache hit, one without
158+
@Test
159+
fun `listProfiles will call each client to get profiles`() {
160+
val client = clientRule.create<CodeWhispererRuntimeClient>()
161+
val mockResponse: SdkIterable<Profile> = SdkIterable<Profile> {
162+
listOf(
163+
Profile.builder().profileName("FOO").arn("foo").build(),
164+
).toMutableList().iterator()
165+
}
166+
167+
val mockResponse2: SdkIterable<Profile> = SdkIterable<Profile> {
168+
listOf(
169+
Profile.builder().profileName("BAR").arn("bar").build(),
170+
).toMutableList().iterator()
171+
}
172+
173+
val iterable: ListAvailableProfilesIterable = mock {
174+
on { it.profiles() } doReturn mockResponse doReturn mockResponse2
175+
}
176+
177+
// TODO: not sure if we can mock client with different region different response?
178+
client.stub {
179+
onGeneric { listAvailableProfilesPaginator(any<Consumer<ListAvailableProfilesRequest.Builder>>()) } doReturn iterable
180+
}
181+
val connectionSettings = sut.getQClientSettings(project)
182+
resourceCache.addEntry(connectionSettings, QProfileResources.LIST_REGION_PROFILES, QProfileResources.LIST_REGION_PROFILES.fetch(connectionSettings))
183+
184+
assertThat(sut.listRegionProfiles(project))
185+
.hasSize(2)
186+
.containsExactlyInAnyOrder(
187+
QRegionProfile("FOO", "foo"),
188+
QRegionProfile("BAR", "bar")
189+
)
190+
}
154191

155192
@Test
156193
fun `validateProfile should cross validate selected profile with latest API response for current project and remove it if its not longer accessible`() {

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/project/ProjectContextProvider.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,17 +74,17 @@ class ProjectContextProvider(val project: Project, private val encoderServer: En
7474
)
7575

7676
// TODO: move to LspMessage.kt
77+
@JsonIgnoreProperties(ignoreUnknown = true)
7778
data class Usage(
78-
@JsonIgnoreProperties(ignoreUnknown = true)
7979
@JsonProperty("memoryUsage")
8080
val memoryUsage: Int? = null,
8181
@JsonProperty("cpuUsage")
8282
val cpuUsage: Int? = null,
8383
)
8484

8585
// TODO: move to LspMessage.kt
86+
@JsonIgnoreProperties(ignoreUnknown = true)
8687
data class Chunk(
87-
@JsonIgnoreProperties(ignoreUnknown = true)
8888
@JsonProperty("filePath")
8989
val filePath: String? = null,
9090
@JsonProperty("content")

plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/core/MockResourceCache.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import org.junit.jupiter.api.extension.BeforeEachCallback
1313
import org.junit.jupiter.api.extension.ExtensionContext
1414
import org.junit.runner.Description
1515
import software.aws.toolkits.core.ClientConnectionSettings
16-
import software.aws.toolkits.core.ConnectionSettings
1716
import software.aws.toolkits.core.credentials.ToolkitAuthenticationProvider
1817
import software.aws.toolkits.core.credentials.ToolkitBearerTokenProvider
1918
import software.aws.toolkits.core.credentials.ToolkitCredentialsProvider
@@ -182,8 +181,12 @@ interface MockResourceCacheInterface {
182181
addEntry(project, resourceId, CompletableFuture.failedFuture<Any>(throws))
183182
}
184183

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

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

0 commit comments

Comments
 (0)