@@ -13,7 +13,10 @@ import com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo
1313import com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig
1414import com.github.tomakehurst.wiremock.http.Body
1515import com.github.tomakehurst.wiremock.junit.WireMockRule
16+ import com.intellij.openapi.application.ApplicationManager
1617import com.intellij.openapi.project.Project
18+ import com.intellij.testFramework.DisposableRule
19+ import com.intellij.testFramework.replaceService
1720import kotlinx.coroutines.test.TestScope
1821import kotlinx.coroutines.test.runTest
1922import org.assertj.core.api.Assertions.assertThat
@@ -22,6 +25,7 @@ import org.junit.Rule
2225import org.junit.jupiter.api.assertThrows
2326import org.mockito.kotlin.any
2427import org.mockito.kotlin.doReturn
28+ import org.mockito.kotlin.mock
2529import org.mockito.kotlin.spy
2630import org.mockito.kotlin.stub
2731import org.mockito.kotlin.times
@@ -36,6 +40,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.project.QueryChatRequest
3640import software.aws.toolkits.jetbrains.services.amazonq.project.QueryInlineCompletionRequest
3741import software.aws.toolkits.jetbrains.services.amazonq.project.RelevantDocument
3842import software.aws.toolkits.jetbrains.services.amazonq.project.UpdateIndexRequest
43+ import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
3944import software.aws.toolkits.jetbrains.utils.rules.CodeInsightTestFixtureRule
4045import software.aws.toolkits.jetbrains.utils.rules.JavaCodeInsightTestFixtureRule
4146import 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
0 commit comments