Skip to content

Commit 2249c8a

Browse files
committed
add test and fix broken test due to merge
1 parent 1628d33 commit 2249c8a

File tree

2 files changed

+55
-4
lines changed

2 files changed

+55
-4
lines changed

plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/workspace/context/ProjectContextProviderTest.kt

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ import com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo
1313
import com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig
1414
import com.github.tomakehurst.wiremock.http.Body
1515
import com.github.tomakehurst.wiremock.junit.WireMockRule
16+
import com.intellij.openapi.application.ApplicationManager
1617
import com.intellij.openapi.project.Project
18+
import com.intellij.testFramework.DisposableRule
19+
import com.intellij.testFramework.replaceService
1720
import kotlinx.coroutines.test.TestScope
1821
import kotlinx.coroutines.test.runTest
1922
import org.assertj.core.api.Assertions.assertThat
@@ -22,6 +25,7 @@ import org.junit.Rule
2225
import org.junit.jupiter.api.assertThrows
2326
import org.mockito.kotlin.any
2427
import org.mockito.kotlin.doReturn
28+
import org.mockito.kotlin.mock
2529
import org.mockito.kotlin.spy
2630
import org.mockito.kotlin.stub
2731
import org.mockito.kotlin.times
@@ -36,6 +40,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.project.QueryChatRequest
3640
import software.aws.toolkits.jetbrains.services.amazonq.project.QueryInlineCompletionRequest
3741
import software.aws.toolkits.jetbrains.services.amazonq.project.RelevantDocument
3842
import software.aws.toolkits.jetbrains.services.amazonq.project.UpdateIndexRequest
43+
import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
3944
import software.aws.toolkits.jetbrains.utils.rules.CodeInsightTestFixtureRule
4045
import software.aws.toolkits.jetbrains.utils.rules.JavaCodeInsightTestFixtureRule
4146
import java.net.ConnectException
@@ -47,6 +52,10 @@ class ProjectContextProviderTest {
4752
@JvmField
4853
val projectRule: CodeInsightTestFixtureRule = JavaCodeInsightTestFixtureRule()
4954

55+
@Rule
56+
@JvmField
57+
val disposableRule: DisposableRule = DisposableRule()
58+
5059
@Rule
5160
@JvmField
5261
val wireMock: WireMockRule = createMockServer()
@@ -114,7 +123,13 @@ class ProjectContextProviderTest {
114123
}
115124

116125
@Test
117-
fun `index should send files within the project to lsp`() {
126+
fun `index should send files within the project to lsp - vector index enabled`() {
127+
ApplicationManager.getApplication().replaceService(
128+
CodeWhispererSettings::class.java,
129+
mock { on { isProjectContextEnabled() } doReturn true },
130+
disposableRule.disposable
131+
)
132+
118133
projectRule.fixture.addFileToProject("Foo.java", "foo")
119134
projectRule.fixture.addFileToProject("Bar.java", "bar")
120135
projectRule.fixture.addFileToProject("Baz.java", "baz")
@@ -139,13 +154,45 @@ class ProjectContextProviderTest {
139154
)
140155
}
141156

157+
@Test
158+
fun `index should send files within the project to lsp - vector index disabled`() {
159+
ApplicationManager.getApplication().replaceService(
160+
CodeWhispererSettings::class.java,
161+
mock { on { isProjectContextEnabled() } doReturn false },
162+
disposableRule.disposable
163+
)
164+
165+
projectRule.fixture.addFileToProject("Foo.java", "foo")
166+
projectRule.fixture.addFileToProject("Bar.java", "bar")
167+
projectRule.fixture.addFileToProject("Baz.java", "baz")
168+
169+
sut.index()
170+
171+
val request = IndexRequest(listOf("/src/Foo.java", "/src/Bar.java", "/src/Baz.java"), "/src", "default", "")
172+
assertThat(request.filePaths).hasSize(3)
173+
assertThat(request.filePaths).satisfies({
174+
it.contains("/src/Foo.java") &&
175+
it.contains("/src/Baz.java") &&
176+
it.contains("/src/Bar.java")
177+
})
178+
assertThat(request.config).isEqualTo("default")
179+
180+
wireMock.verify(
181+
1,
182+
postRequestedFor(urlPathEqualTo("/buildIndex"))
183+
.withHeader("Content-Type", equalTo("text/plain"))
184+
// comment it out because order matters and will cause json string different
185+
// .withRequestBody(equalTo(encryptedRequest))
186+
)
187+
}
188+
142189
@Test
143190
fun `updateIndex should send correct encrypted request to lsp`() {
144191
sut.updateIndex(listOf("foo.java"), ProjectContextProvider.IndexUpdateMode.UPDATE)
145192
val request = UpdateIndexRequest(listOf("foo.java"), ProjectContextProvider.IndexUpdateMode.UPDATE.value)
146193
val requestJson = mapper.writeValueAsString(request)
147194

148-
assertThat(mapper.readTree(requestJson)).isEqualTo(mapper.readTree("""{ "filePath": "foo.java" }"""))
195+
assertThat(mapper.readTree(requestJson)).isEqualTo(mapper.readTree("""{ "filePaths": ["foo.java"], "mode": "update" }"""))
149196

150197
val encryptedRequest = encoderServer.encrypt(requestJson)
151198

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,8 @@ class ProjectContextProvider(val project: Project, private val encoderServer: En
139139
var duration = (System.currentTimeMillis() - indexStartTime).toDouble()
140140
logger.debug { "time elapsed to collect project context files: ${duration}ms, collected ${filesResult.files.size} files" }
141141

142-
val encrypted = encryptRequest(IndexRequest(filesResult.files, projectRoot, "all", ""))
142+
val indexOption = if (CodeWhispererSettings.getInstance().isProjectContextEnabled()) IndexOption.ALL else IndexOption.DEFAULT
143+
val encrypted = encryptRequest(IndexRequest(filesResult.files, projectRoot, indexOption, ""))
143144
val response = sendMsgToLsp(LspMessage.Index, encrypted)
144145

145146
duration = (System.currentTimeMillis() - indexStartTime).toDouble()
@@ -191,7 +192,6 @@ class ProjectContextProvider(val project: Project, private val encoderServer: En
191192
}
192193

193194
fun updateIndex(filePaths: List<String>, mode: IndexUpdateMode) {
194-
if (!isIndexComplete.get()) return
195195
val encrypted = encryptRequest(UpdateIndexRequest(filePaths, mode.value))
196196
sendMsgToLsp(LspMessage.UpdateIndex, encrypted)
197197
}
@@ -336,5 +336,9 @@ class ProjectContextProvider(val project: Project, private val encoderServer: En
336336

337337
companion object {
338338
private val logger = getLogger<ProjectContextProvider>()
339+
private object IndexOption {
340+
const val ALL = "all"
341+
const val DEFAULT = "default"
342+
}
339343
}
340344
}

0 commit comments

Comments
 (0)