Skip to content

Commit cca5b1e

Browse files
committed
Emit correct data for move and copy events
1 parent 9ae4880 commit cca5b1e

File tree

2 files changed

+48
-4
lines changed

2 files changed

+48
-4
lines changed

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/workspace/WorkspaceServiceHandler.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ class WorkspaceServiceHandler(
213213
// since we are using synchronous FileListener
214214
pluginAwareExecuteOnPooledThread {
215215
didCreateFiles(events.filter { it is VFileCreateEvent || it is VFileMoveEvent || it is VFileCopyEvent })
216-
didDeleteFiles(events.filterIsInstance<VFileDeleteEvent>())
216+
didDeleteFiles(events.filter { it is VFileMoveEvent || it is VFileDeleteEvent })
217217
didRenameFiles(events.filterIsInstance<VFilePropertyChangeEvent>())
218218
didChangeWatchedFiles(events)
219219
}

plugins/amazonq/shared/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/lsp/workspace/WorkspaceServiceHandlerTest.kt

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,49 @@ class WorkspaceServiceHandlerTest {
265265
assertEquals(normalizeFileUri(dirUri.toString()), paramsSlot.captured.files[0].uri)
266266
}
267267

268+
269+
@Test
270+
fun `test didDeleteFiles handles both delete and move events in same batch`() = runTest {
271+
val deleteUri = URI("file:///test/deleteFile")
272+
val oldMoveUri = URI("file:///test/oldMoveFile")
273+
val newMoveUri = URI("file:///test/newMoveFile")
274+
275+
val deleteEvent = createMockVFileEvent(deleteUri, FileChangeType.Deleted, false, "py")
276+
val moveEvent = createMockVFileMoveEvent(oldMoveUri, newMoveUri, "test.py")
277+
278+
sut.after(listOf(deleteEvent, moveEvent))
279+
280+
val deleteParamsSlot = slot<DeleteFilesParams>()
281+
verify { mockWorkspaceService.didDeleteFiles(capture(deleteParamsSlot)) }
282+
assertEquals(2, deleteParamsSlot.captured.files.size)
283+
assertEquals(normalizeFileUri(deleteUri.toString()), deleteParamsSlot.captured.files[0].uri)
284+
assertEquals(normalizeFileUri(oldMoveUri.toString()), deleteParamsSlot.captured.files[1].uri)
285+
}
286+
287+
@Test
288+
fun `test didDeleteFiles with move event of unsupported file type`() = runTest {
289+
val oldUri = URI("file:///test/oldPath")
290+
val newUri = URI("file:///test/newPath")
291+
val moveEvent = createMockVFileMoveEvent(oldUri, newUri, "test.txt")
292+
293+
sut.after(listOf(moveEvent))
294+
295+
verify(exactly = 0) { mockWorkspaceService.didDeleteFiles(any()) }
296+
}
297+
298+
@Test
299+
fun `test didDeleteFiles with move event of directory`() = runTest {
300+
val oldUri = URI("file:///test/oldDir")
301+
val newUri = URI("file:///test/newDir")
302+
val moveEvent = createMockVFileMoveEvent(oldUri, newUri, "", true)
303+
304+
sut.after(listOf(moveEvent))
305+
306+
val deleteParamsSlot = slot<DeleteFilesParams>()
307+
verify { mockWorkspaceService.didDeleteFiles(capture(deleteParamsSlot)) }
308+
assertEquals(normalizeFileUri(oldUri.toString()), deleteParamsSlot.captured.files[0].uri)
309+
}
310+
268311
@Test
269312
fun `test didChangeWatchedFiles with valid events`() = runTest {
270313
// Arrange
@@ -614,12 +657,13 @@ class WorkspaceServiceHandlerTest {
614657
}
615658
}
616659

617-
private fun createMockVFileMoveEvent(oldUri: URI, newUri: URI, fileName: String): VFileMoveEvent {
618-
val newFile = createMockVirtualFile(newUri, fileName)
660+
private fun createMockVFileMoveEvent(oldUri: URI, newUri: URI, fileName: String, isDirectory: Boolean = false): VFileMoveEvent {
661+
val oldFile = createMockVirtualFile(oldUri, fileName, isDirectory)
662+
val newFile = createMockVirtualFile(newUri, fileName, isDirectory)
619663
return mockk<VFileMoveEvent>().apply {
620664
every { file } returns newFile
621665
every { oldPath } returns oldUri.path
622-
every { oldParent } returns createMockVirtualFile(oldUri, fileName)
666+
every { oldParent } returns oldFile
623667
}
624668
}
625669

0 commit comments

Comments
 (0)