3
3
4
4
package software.aws.toolkits.jetbrains.services.amazonq.webview
5
5
6
- import com.google.gson.Gson
6
+ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
7
7
import com.intellij.openapi.editor.Document
8
8
import com.intellij.openapi.fileEditor.FileDocumentManager
9
9
import com.intellij.openapi.vfs.LocalFileSystem
@@ -41,31 +41,31 @@ class BrowserConnectorTest : AmazonQTestBase() {
41
41
override fun setup () {
42
42
super .setup()
43
43
fixture = projectRule.fixture
44
-
44
+
45
45
mockCodeScanManager = mock()
46
46
mockLocalFileSystem = mock()
47
47
mockFileDocumentManager = mock()
48
-
48
+
49
49
project.replaceService(CodeWhispererCodeScanManager ::class .java, mockCodeScanManager, disposableRule.disposable)
50
-
50
+
51
51
browserConnector = spy(BrowserConnector (project = project))
52
52
}
53
53
54
54
@Test
55
55
fun `parseFindingsMessages should handle empty additionalMessages` () {
56
56
val messagesMap = mapOf<String , Any >()
57
-
57
+
58
58
browserConnector.parseFindingsMessages(messagesMap)
59
-
59
+
60
60
verify(mockCodeScanManager, never()).addOnDemandIssues(any(), any(), any())
61
61
}
62
62
63
63
@Test
64
64
fun `parseFindingsMessages should handle null additionalMessages` () {
65
65
val messagesMap = mapOf (" additionalMessages" to null )
66
-
66
+
67
67
browserConnector.parseFindingsMessages(messagesMap)
68
-
68
+
69
69
verify(mockCodeScanManager, never()).addOnDemandIssues(any(), any(), any())
70
70
}
71
71
@@ -81,9 +81,9 @@ class BrowserConnectorTest : AmazonQTestBase() {
81
81
)
82
82
val additionalMessages = mutableListOf<Map <String , Any >>(findingsMessage, otherMessage)
83
83
val messagesMap = mapOf (" additionalMessages" to additionalMessages)
84
-
84
+
85
85
browserConnector.parseFindingsMessages(messagesMap)
86
-
86
+
87
87
assert (additionalMessages.size == 1 )
88
88
assert (additionalMessages[0 ] == otherMessage)
89
89
}
@@ -96,9 +96,9 @@ class BrowserConnectorTest : AmazonQTestBase() {
96
96
)
97
97
val additionalMessages = mutableListOf<Map <String , Any >>(findingsMessage)
98
98
val messagesMap = mapOf (" additionalMessages" to additionalMessages)
99
-
99
+
100
100
browserConnector.parseFindingsMessages(messagesMap)
101
-
101
+
102
102
assert (additionalMessages.isEmpty())
103
103
}
104
104
@@ -112,16 +112,16 @@ class BrowserConnectorTest : AmazonQTestBase() {
112
112
on { getLineStartOffset(0 ) } doReturn 0
113
113
on { getLineEndOffset(0 ) } doReturn 10
114
114
}
115
-
115
+
116
116
mockStatic(LocalFileSystem ::class .java).use { localFileSystemMock ->
117
117
localFileSystemMock.`when `<LocalFileSystem > { LocalFileSystem .getInstance() }.thenReturn(mockLocalFileSystem)
118
118
whenever(mockLocalFileSystem.findFileByIoFile(any())) doReturn mockVirtualFile
119
-
119
+
120
120
mockStatic(FileDocumentManager ::class .java).use { fileDocumentManagerMock ->
121
121
fileDocumentManagerMock.`when `<FileDocumentManager > { FileDocumentManager .getInstance() } doReturn mockFileDocumentManager
122
122
whenever(mockFileDocumentManager.getDocument(mockVirtualFile)) doReturn mockDocument
123
123
whenever(mockCodeScanManager.isIgnoredIssue(any(), any(), any(), any())) doReturn false
124
-
124
+
125
125
val issue = BrowserConnector .FlareCodeScanIssue (
126
126
startLine = 1 , endLine = 1 , comment = " Test comment" , title = " Test Issue" ,
127
127
description = Description (" Test description" , " Test text" ), detectorId = " test-detector" ,
@@ -132,24 +132,24 @@ class BrowserConnectorTest : AmazonQTestBase() {
132
132
scanJobId = " test-job-id" , language = " kotlin" , autoDetected = false ,
133
133
filePath = " /test/file.kt" , findingContext = " test context"
134
134
)
135
-
135
+
136
136
val aggregatedIssue = BrowserConnector .AggregatedCodeScanIssue (" /test/file.kt" , listOf (issue))
137
137
val findingsMessage = mapOf (
138
138
" messageId" to " test_codeReviewFindings" ,
139
- " body" to Gson ().toJson (listOf (aggregatedIssue))
139
+ " body" to jacksonObjectMapper ().writeValueAsString (listOf (aggregatedIssue))
140
140
)
141
141
val additionalMessages = mutableListOf<Map <String , Any >>(findingsMessage)
142
142
val messagesMap = mapOf (" additionalMessages" to additionalMessages)
143
-
143
+
144
144
browserConnector.parseFindingsMessages(messagesMap)
145
-
145
+
146
146
val issuesCaptor = argumentCaptor<List <CodeWhispererCodeScanIssue >>()
147
147
verify(mockCodeScanManager).addOnDemandIssues(
148
148
issuesCaptor.capture(),
149
149
any(),
150
150
eq(CodeWhispererConstants .CodeAnalysisScope .AGENTIC )
151
151
)
152
-
152
+
153
153
assert (additionalMessages.isEmpty())
154
154
assert (issuesCaptor.firstValue.isNotEmpty())
155
155
assert (issuesCaptor.firstValue[0 ].title == " Test Issue" )
@@ -160,11 +160,11 @@ class BrowserConnectorTest : AmazonQTestBase() {
160
160
@Test
161
161
fun `parseFindingsMessages should skip directory files and not populate mappedFindings` () {
162
162
val mockDirectoryFile = mock<VirtualFile > { on { isDirectory } doReturn true }
163
-
163
+
164
164
mockStatic(LocalFileSystem ::class .java).use { localFileSystemMock ->
165
165
localFileSystemMock.`when `<LocalFileSystem > { LocalFileSystem .getInstance() } doReturn mockLocalFileSystem
166
166
whenever(mockLocalFileSystem.findFileByIoFile(any())) doReturn mockDirectoryFile
167
-
167
+
168
168
val issue = BrowserConnector .FlareCodeScanIssue (
169
169
startLine = 1 , endLine = 1 , comment = null , title = " Test Issue" ,
170
170
description = Description (" Test description" , " Test text" ), detectorId = " test-detector" ,
@@ -174,15 +174,15 @@ class BrowserConnectorTest : AmazonQTestBase() {
174
174
scanJobId = " test-job-id" , language = " kotlin" , autoDetected = true ,
175
175
filePath = " /test/directory" , findingContext = " test context"
176
176
)
177
-
177
+
178
178
val aggregatedIssue = BrowserConnector .AggregatedCodeScanIssue (" /test/directory" , listOf (issue))
179
179
val findingsMessage = mapOf (
180
180
" messageId" to " test_displayFindings" ,
181
- " body" to Gson ().toJson (listOf (aggregatedIssue))
181
+ " body" to jacksonObjectMapper ().writeValueAsString (listOf (aggregatedIssue))
182
182
)
183
183
val additionalMessages = mutableListOf<Map <String , Any >>(findingsMessage)
184
184
val messagesMap = mapOf (" additionalMessages" to additionalMessages)
185
-
185
+
186
186
browserConnector.parseFindingsMessages(messagesMap)
187
187
188
188
val issuesCaptor = argumentCaptor<List <CodeWhispererCodeScanIssue >>()
@@ -205,9 +205,9 @@ class BrowserConnectorTest : AmazonQTestBase() {
205
205
)
206
206
val additionalMessages = mutableListOf<Map <String , Any >>(findingsMessage)
207
207
val messagesMap = mapOf (" additionalMessages" to additionalMessages)
208
-
208
+
209
209
browserConnector.parseFindingsMessages(messagesMap)
210
-
210
+
211
211
assert (additionalMessages.isEmpty())
212
212
}
213
213
}
0 commit comments