|
63 | 63 | import static java.lang.Thread.sleep; |
64 | 64 | import static org.hamcrest.CoreMatchers.*; |
65 | 65 | import static org.hamcrest.Matchers.contains; |
| 66 | +import static org.hamcrest.Matchers.hasEntry; |
66 | 67 | import static org.junit.jupiter.api.Assertions.*; |
67 | 68 |
|
68 | 69 | public class DatasetsIT { |
@@ -5589,4 +5590,140 @@ public void testRequireFilesToPublishDatasets() { |
5589 | 5590 | publishDatasetResponse.prettyPrint(); |
5590 | 5591 | publishDatasetResponse.then().assertThat().statusCode(OK.getStatusCode()); |
5591 | 5592 | } |
| 5593 | + |
| 5594 | + @Test |
| 5595 | + public void testDeleteFiles() { |
| 5596 | + Response createUser = UtilIT.createRandomUser(); |
| 5597 | + String username = UtilIT.getUsernameFromResponse(createUser); |
| 5598 | + String apiToken = UtilIT.getApiTokenFromResponse(createUser); |
| 5599 | + |
| 5600 | + Response createDataverseResponse = UtilIT.createRandomDataverse(apiToken); |
| 5601 | + String dataverseAlias = UtilIT.getAliasFromResponse(createDataverseResponse); |
| 5602 | + |
| 5603 | + Response createDatasetResponse = UtilIT.createRandomDatasetViaNativeApi(dataverseAlias, apiToken); |
| 5604 | + Integer datasetId = UtilIT.getDatasetIdFromResponse(createDatasetResponse); |
| 5605 | + |
| 5606 | + // Add files to the dataset |
| 5607 | + String pathToFile1 = "scripts/api/data/licenses/licenseCC0-1.0.json"; |
| 5608 | + String pathToFile2 = "scripts/api/data/licenses/licenseCC-BY-4.0.json"; |
| 5609 | + String pathToFile3 = "scripts/api/data/licenses/licenseCC-BY-NC-4.0.json"; |
| 5610 | + String pathToFile4 = "scripts/api/data/licenses/licenseCC-BY-NC-ND-4.0.json"; |
| 5611 | + String pathToFile5 = "scripts/api/data/licenses/licenseCC-BY-ND-4.0.json"; |
| 5612 | + |
| 5613 | + JsonObjectBuilder json = Json.createObjectBuilder(); |
| 5614 | + json.add("description", "File 1"); |
| 5615 | + Response addFile1Response = UtilIT.uploadFileViaNative(datasetId.toString(), pathToFile1, json.build(), apiToken); |
| 5616 | + Long file1Id = JsonPath.from(addFile1Response.body().asString()).getLong("data.files[0].dataFile.id"); |
| 5617 | + |
| 5618 | + json.add("description", "File 2"); |
| 5619 | + Response addFile2Response = UtilIT.uploadFileViaNative(datasetId.toString(), pathToFile2, json.build(), apiToken); |
| 5620 | + Long file2Id = JsonPath.from(addFile2Response.body().asString()).getLong("data.files[0].dataFile.id"); |
| 5621 | + |
| 5622 | + json.add("description", "File 3"); |
| 5623 | + Response addFile3Response = UtilIT.uploadFileViaNative(datasetId.toString(), pathToFile3, json.build(), apiToken); |
| 5624 | + Long file3Id = JsonPath.from(addFile3Response.body().asString()).getLong("data.files[0].dataFile.id"); |
| 5625 | + |
| 5626 | + json.add("description", "File 4"); |
| 5627 | + Response addFile4Response = UtilIT.uploadFileViaNative(datasetId.toString(), pathToFile4, json.build(), apiToken); |
| 5628 | + Long file4Id = JsonPath.from(addFile4Response.body().asString()).getLong("data.files[0].dataFile.id"); |
| 5629 | + |
| 5630 | + json.add("description", "File 5"); |
| 5631 | + Response addFile5Response = UtilIT.uploadFileViaNative(datasetId.toString(), pathToFile5, json.build(), apiToken); |
| 5632 | + Long file5Id = JsonPath.from(addFile5Response.body().asString()).getLong("data.files[0].dataFile.id"); |
| 5633 | + |
| 5634 | + // Delete files 1 and 2 |
| 5635 | + JsonArrayBuilder fileIdsToDelete = Json.createArrayBuilder(); |
| 5636 | + fileIdsToDelete.add(file1Id); |
| 5637 | + fileIdsToDelete.add(file2Id); |
| 5638 | + |
| 5639 | + Response deleteFilesResponse = UtilIT.deleteDatasetFiles(datasetId.toString(), fileIdsToDelete.build(), apiToken); |
| 5640 | + deleteFilesResponse.then().assertThat() |
| 5641 | + .statusCode(OK.getStatusCode()) |
| 5642 | + .body("data.message", startsWith("2")); |
| 5643 | + |
| 5644 | + // Verify files were deleted |
| 5645 | + Response getDatasetResponse = UtilIT.nativeGet(datasetId, apiToken); |
| 5646 | + getDatasetResponse.then().assertThat() |
| 5647 | + .statusCode(OK.getStatusCode()) |
| 5648 | + .body("data.latestVersion.files.findAll { it.dataFile.id == " + file1Id + " }.size()", equalTo(0)) |
| 5649 | + .body("data.latestVersion.files.findAll { it.dataFile.id == " + file2Id + " }.size()", equalTo(0)) |
| 5650 | + .body("data.latestVersion.files.findAll { it.dataFile.id == " + file3Id + " }.size()", equalTo(1)) |
| 5651 | + .body("data.latestVersion.files.findAll { it.dataFile.id == " + file4Id + " }.size()", equalTo(1)) |
| 5652 | + .body("data.latestVersion.files.findAll { it.dataFile.id == " + file5Id + " }.size()", equalTo(1)); |
| 5653 | + |
| 5654 | + |
| 5655 | + // Test deleting after dataset publication |
| 5656 | + Response publishDataverseResponse = UtilIT.publishDataverseViaNativeApi(dataverseAlias, apiToken); |
| 5657 | + publishDataverseResponse.then().assertThat().statusCode(OK.getStatusCode()); |
| 5658 | + |
| 5659 | + // Publish the dataset |
| 5660 | + Response publishDatasetResponse = UtilIT.publishDatasetViaNativeApi(datasetId, "major", apiToken); |
| 5661 | + publishDatasetResponse.then().assertThat() |
| 5662 | + .statusCode(OK.getStatusCode()); |
| 5663 | + |
| 5664 | + // Delete files 3 and 4 from the published dataset |
| 5665 | + fileIdsToDelete = Json.createArrayBuilder(); |
| 5666 | + fileIdsToDelete.add(file3Id); |
| 5667 | + fileIdsToDelete.add(file4Id); |
| 5668 | + |
| 5669 | + deleteFilesResponse = UtilIT.deleteDatasetFiles(datasetId.toString(), fileIdsToDelete.build(), apiToken); |
| 5670 | + deleteFilesResponse.then().assertThat() |
| 5671 | + .statusCode(OK.getStatusCode()) |
| 5672 | + .body("data.message", startsWith("2")); |
| 5673 | + |
| 5674 | + // Verify files were deleted |
| 5675 | + getDatasetResponse = UtilIT.nativeGet(datasetId, apiToken); |
| 5676 | + getDatasetResponse.then().assertThat() |
| 5677 | + .statusCode(OK.getStatusCode()) |
| 5678 | + .body("data.latestVersion.files.findAll { it.dataFile.id == " + file3Id + " }.size()", equalTo(0)) |
| 5679 | + .body("data.latestVersion.files.findAll { it.dataFile.id == " + file4Id + " }.size()", equalTo(0)) |
| 5680 | + .body("data.latestVersion.files.findAll { it.dataFile.id == " + file5Id + " }.size()", equalTo(1)); |
| 5681 | + |
| 5682 | + // Test error conditions |
| 5683 | + |
| 5684 | + // Try to delete a non-existent file |
| 5685 | + fileIdsToDelete = Json.createArrayBuilder(); |
| 5686 | + fileIdsToDelete.add(999999L); |
| 5687 | + |
| 5688 | + deleteFilesResponse = UtilIT.deleteDatasetFiles(datasetId.toString(), fileIdsToDelete.build(), apiToken); |
| 5689 | + deleteFilesResponse.then().assertThat() |
| 5690 | + .statusCode(BAD_REQUEST.getStatusCode()) |
| 5691 | + .body("message", containsString("No files")); |
| 5692 | + |
| 5693 | + // Try to delete files from a non-existent dataset |
| 5694 | + deleteFilesResponse = UtilIT.deleteDatasetFiles("999999", fileIdsToDelete.build(), apiToken); |
| 5695 | + deleteFilesResponse.then().assertThat() |
| 5696 | + .statusCode(NOT_FOUND.getStatusCode()); |
| 5697 | + |
| 5698 | + // Try to delete files without proper permissions |
| 5699 | + // Create a second user |
| 5700 | + Response createSecondUser = UtilIT.createRandomUser(); |
| 5701 | + String unauthorizedUsername = UtilIT.getUsernameFromResponse(createSecondUser); |
| 5702 | + String unauthorizedUserApiToken = UtilIT.getApiTokenFromResponse(createSecondUser); |
| 5703 | + |
| 5704 | + //Reset to a valid file id |
| 5705 | + fileIdsToDelete = Json.createArrayBuilder(); |
| 5706 | + fileIdsToDelete.add(file5Id); |
| 5707 | + deleteFilesResponse = UtilIT.deleteDatasetFiles(datasetId.toString(), fileIdsToDelete.build(), unauthorizedUserApiToken); |
| 5708 | + deleteFilesResponse.then().assertThat() |
| 5709 | + .statusCode(FORBIDDEN.getStatusCode()); |
| 5710 | + |
| 5711 | + // Make the user a superuser to destroy dataset |
| 5712 | + Response makeSuperUserResponse = UtilIT.setSuperuserStatus(username, true); |
| 5713 | + makeSuperUserResponse.then().assertThat() |
| 5714 | + .statusCode(OK.getStatusCode()); |
| 5715 | + |
| 5716 | + // Clean up |
| 5717 | + Response destroyDatasetResponse = UtilIT.destroyDataset(datasetId, apiToken); |
| 5718 | + assertEquals(200, destroyDatasetResponse.getStatusCode()); |
| 5719 | + |
| 5720 | + Response deleteDataverseResponse = UtilIT.deleteDataverse(dataverseAlias, apiToken); |
| 5721 | + assertEquals(200, deleteDataverseResponse.getStatusCode()); |
| 5722 | + |
| 5723 | + Response deleteUnauthorizedUserResponse = UtilIT.deleteUser(unauthorizedUsername); |
| 5724 | + assertEquals(200, deleteUnauthorizedUserResponse.getStatusCode()); |
| 5725 | + |
| 5726 | + Response deleteUserResponse = UtilIT.deleteUser(username); |
| 5727 | + assertEquals(200, deleteUserResponse.getStatusCode()); |
| 5728 | + } |
5592 | 5729 | } |
0 commit comments