|
34 | 34 | import org.springframework.mock.web.MockMultipartFile; |
35 | 35 | import org.springframework.web.multipart.MultipartFile; |
36 | 36 | import java.io.IOException; |
| 37 | +import java.time.OffsetDateTime; |
37 | 38 | import java.util.List; |
38 | 39 | import java.util.Optional; |
39 | 40 | import java.util.Set; |
@@ -1378,6 +1379,64 @@ void detachAllFilesByEntityId_ShouldThrowAuthorizationException_WhenUserIsNotOwn |
1378 | 1379 | verify(fileRepository, never()).saveAll(any()); |
1379 | 1380 | } |
1380 | 1381 |
|
| 1382 | + // --- detachFilesForMultiOwnerEntity Tests --- |
| 1383 | + |
| 1384 | + @Test |
| 1385 | + void detachFilesForMultiOwnerEntity_ShouldSoftDelete_WhenFileIsAttached() { |
| 1386 | + FileAsset file = new FileAsset(); |
| 1387 | + file.setId(1L); |
| 1388 | + file.setStatus(FileStatus.ATTACHED); |
| 1389 | + file.setRelatedEntityType(RelatedEntityType.TASK); |
| 1390 | + file.setRelatedEntityId(42L); |
| 1391 | + file.setDeletedAt(null); |
| 1392 | + |
| 1393 | + when(fileRepository.findAllById(List.of(1L))).thenReturn(List.of(file)); |
| 1394 | + |
| 1395 | + fileService.detachFilesForMultiOwnerEntity(RelatedEntityType.TASK, 42L, List.of(1L)); |
| 1396 | + |
| 1397 | + assertEquals(FileStatus.SOFT_DELETED, file.getStatus()); |
| 1398 | + assertNotNull(file.getDeletedAt()); |
| 1399 | + verify(fileRepository).saveAll(List.of(file)); |
| 1400 | + } |
| 1401 | + |
| 1402 | + @Test |
| 1403 | + void detachFilesForMultiOwnerEntity_ShouldIgnore_WhenFileIsAlreadySoftDeleted() { |
| 1404 | + OffsetDateTime originalDeletedAt = OffsetDateTime.now().minusDays(1); |
| 1405 | + FileAsset file = new FileAsset(); |
| 1406 | + file.setId(1L); |
| 1407 | + file.setStatus(FileStatus.SOFT_DELETED); |
| 1408 | + file.setRelatedEntityType(RelatedEntityType.TASK); |
| 1409 | + file.setRelatedEntityId(42L); |
| 1410 | + file.setDeletedAt(originalDeletedAt); |
| 1411 | + |
| 1412 | + when(fileRepository.findAllById(List.of(1L))).thenReturn(List.of(file)); |
| 1413 | + |
| 1414 | + fileService.detachFilesForMultiOwnerEntity(RelatedEntityType.TASK, 42L, List.of(1L)); |
| 1415 | + |
| 1416 | + assertEquals(FileStatus.SOFT_DELETED, file.getStatus()); |
| 1417 | + assertEquals(originalDeletedAt, file.getDeletedAt()); // Should not be overwritten |
| 1418 | + verify(fileRepository).saveAll(List.of(file)); // Note: saveAll is still called, but entity is unchanged |
| 1419 | + } |
| 1420 | + |
| 1421 | + @Test |
| 1422 | + void detachFilesForMultiOwnerEntity_ShouldIgnore_WhenFileIsHardDeleted() { |
| 1423 | + OffsetDateTime originalDeletedAt = OffsetDateTime.now().minusDays(1); |
| 1424 | + FileAsset file = new FileAsset(); |
| 1425 | + file.setId(1L); |
| 1426 | + file.setStatus(FileStatus.HARD_DELETED); |
| 1427 | + file.setRelatedEntityType(RelatedEntityType.TASK); |
| 1428 | + file.setRelatedEntityId(42L); |
| 1429 | + file.setDeletedAt(originalDeletedAt); |
| 1430 | + |
| 1431 | + when(fileRepository.findAllById(List.of(1L))).thenReturn(List.of(file)); |
| 1432 | + |
| 1433 | + fileService.detachFilesForMultiOwnerEntity(RelatedEntityType.TASK, 42L, List.of(1L)); |
| 1434 | + |
| 1435 | + assertEquals(FileStatus.HARD_DELETED, file.getStatus()); |
| 1436 | + assertEquals(originalDeletedAt, file.getDeletedAt()); |
| 1437 | + verify(fileRepository).saveAll(List.of(file)); |
| 1438 | + } |
| 1439 | + |
1381 | 1440 | // --- Update Role Tests --- |
1382 | 1441 |
|
1383 | 1442 | @Test |
|
0 commit comments