Skip to content

Commit 6ef975f

Browse files
committed
adding limit check on multi file upload
1 parent 559cf0f commit 6ef975f

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

src/main/java/edu/harvard/iq/dataverse/datasetutility/AddReplaceFileHelper.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2064,6 +2064,19 @@ public Response addFiles(String jsonData, Dataset dataset, User authUser, boolea
20642064
totalNumberofFiles = filesJson.getValuesAs(JsonObject.class).size();
20652065
workingVersion = dataset.getOrCreateEditVersion();
20662066
clone = workingVersion.cloneDatasetVersion();
2067+
2068+
if (!authUser.isSuperuser()) {
2069+
Integer effectiveDatasetFileCountLimit = dataset.getEffectiveDatasetFileCountLimit();
2070+
boolean hasFileCountLimit = dataset.isDatasetFileCountLimitSet(effectiveDatasetFileCountLimit);
2071+
if (hasFileCountLimit) {
2072+
int uploadedFileCount = datasetService.getDataFileCountByOwner(dataset.getId());
2073+
if (uploadedFileCount + totalNumberofFiles >= effectiveDatasetFileCountLimit) {
2074+
return error(Response.Status.BAD_REQUEST,
2075+
BundleUtil.getStringFromBundle("file.add.count_exceeds_limit", Arrays.asList(String.valueOf(effectiveDatasetFileCountLimit))));
2076+
}
2077+
}
2078+
}
2079+
20672080
for (JsonObject fileJson : filesJson.getValuesAs(JsonObject.class)) {
20682081

20692082
OptionalFileParams optionalFileParams = null;

src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,25 @@ public void testCreateUpdateDatasetFileCountLimit() throws JsonParseException {
450450
.body("data.datasetFileCountLimit", equalTo(null));
451451
}
452452

453+
@Test
454+
public void testMultipleFileUploadOverCountLimit() {
455+
Response createUser = UtilIT.createRandomUser();
456+
String apiToken = UtilIT.getApiTokenFromResponse(createUser);
457+
Response createDataverseResponse = createFileLimitedDataverse(1, apiToken);
458+
createDataverseResponse.prettyPrint();
459+
String dataverseAlias = UtilIT.getAliasFromResponse(createDataverseResponse);
460+
Response createDatasetResponse = UtilIT.createRandomDatasetViaNativeApi(dataverseAlias, apiToken);
461+
createDatasetResponse.prettyPrint();
462+
Integer datasetId = UtilIT.getDatasetIdFromResponse(createDatasetResponse);
463+
464+
String json = "[{\"id\":0},{\"id\":1},{\"id\":2}]"; // simple array since we only need an array size
465+
Response addFilesResponse = UtilIT.addFiles(datasetId.toString(), json, apiToken);
466+
addFilesResponse.prettyPrint();
467+
addFilesResponse.then().assertThat()
468+
.body("message", containsString(BundleUtil.getStringFromBundle("file.add.count_exceeds_limit", Collections.singletonList("1"))))
469+
.statusCode(BAD_REQUEST.getStatusCode());
470+
}
471+
453472
@Test
454473
public void testAddUpdateDatasetViaNativeAPI() {
455474

src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2891,6 +2891,14 @@ static Response getUploadUrls(String idOrPersistentIdOfDataset, long sizeInBytes
28912891
return requestSpecification.get("/api/datasets/" + idInPath + "/uploadurls?size=" + sizeInBytes + optionalQueryParam);
28922892
}
28932893

2894+
static Response addFiles(String idInPath, String jsonData, String apiToken) {
2895+
RequestSpecification requestSpecification = given()
2896+
.header(API_TOKEN_HTTP_HEADER, apiToken)
2897+
.contentType(ContentType.MULTIPART)
2898+
.multiPart("jsonData", jsonData);
2899+
return requestSpecification.post("/api/datasets/" + idInPath + "/addFiles");
2900+
}
2901+
28942902
/**
28952903
* If you set dataverse.files.localstack1.disable-tagging=true you will see
28962904
* an error like below.

0 commit comments

Comments
 (0)