Skip to content

Commit 7283dbd

Browse files
authored
Merge pull request #11168 from vera/edit-metadata-api-500-error
Fix 500 errors when uploading single controlled vocab or compound field values to editMetadata API
2 parents a789342 + 69b9a01 commit 7283dbd

4 files changed

Lines changed: 48 additions & 3 deletions

File tree

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"fields": [
3+
{
4+
"typeName": "targetSampleSize",
5+
"value": {
6+
"targetSampleActualSize": {
7+
"typeName": "targetSampleSizeFormula",
8+
"value": "n = N*X / (X + N – 1)"
9+
}
10+
}
11+
}
12+
]
13+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"typeName": "journalArticleType",
3+
"value": "abstract"
4+
}

src/main/java/edu/harvard/iq/dataverse/api/Datasets.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1187,8 +1187,14 @@ private String validateDatasetFieldValues(List<DatasetField> fields) {
11871187
if (dsf.getDatasetFieldType().isAllowMultiples() && dsf.getControlledVocabularyValues().isEmpty()
11881188
&& dsf.getDatasetFieldCompoundValues().isEmpty() && dsf.getDatasetFieldValues().isEmpty()) {
11891189
error.append("Empty multiple value for field: ").append(dsf.getDatasetFieldType().getDisplayName()).append(" ");
1190-
} else if (!dsf.getDatasetFieldType().isAllowMultiples() && dsf.getSingleValue().getValue().isEmpty()) {
1191-
error.append("Empty value for field: ").append(dsf.getDatasetFieldType().getDisplayName()).append(" ");
1190+
} else if (!dsf.getDatasetFieldType().isAllowMultiples()) {
1191+
if (dsf.getDatasetFieldType().isControlledVocabulary() && dsf.getSingleControlledVocabularyValue().getStrValue().isEmpty()) {
1192+
error.append("Empty cvoc value for field: ").append(dsf.getDatasetFieldType().getDisplayName()).append(" ");
1193+
} else if (dsf.getDatasetFieldType().isCompound() && dsf.getDatasetFieldCompoundValues().isEmpty()) {
1194+
error.append("Empty compound value for field: ").append(dsf.getDatasetFieldType().getDisplayName()).append(" ");
1195+
} else if (!dsf.getDatasetFieldType().isControlledVocabulary() && !dsf.getDatasetFieldType().isCompound() && dsf.getSingleValue().getValue().isEmpty()) {
1196+
error.append("Empty value for field: ").append(dsf.getDatasetFieldType().getDisplayName()).append(" ");
1197+
}
11921198
}
11931199
}
11941200

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

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import jakarta.json.JsonArray;
2727
import jakarta.json.JsonObject;
2828
import jakarta.json.JsonObjectBuilder;
29+
import jakarta.json.JsonArrayBuilder;
2930
import jakarta.ws.rs.core.Response.Status;
3031
import org.apache.commons.lang3.RandomStringUtils;
3132
import org.apache.commons.lang3.StringUtils;
@@ -368,6 +369,14 @@ public void testAddUpdateDatasetViaNativeAPI() {
368369
createDataverseResponse.prettyPrint();
369370
String dataverseAlias = UtilIT.getAliasFromResponse(createDataverseResponse);
370371

372+
JsonArrayBuilder metadataBlocks = Json.createArrayBuilder();
373+
metadataBlocks.add("citation");
374+
metadataBlocks.add("journal");
375+
metadataBlocks.add("socialscience");
376+
Response setMetadataBlocksResponse = UtilIT.setMetadataBlocks(dataverseAlias, metadataBlocks, apiToken);
377+
setMetadataBlocksResponse.prettyPrint();
378+
setMetadataBlocksResponse.then().assertThat().statusCode(OK.getStatusCode());
379+
371380
Response createDatasetResponse = UtilIT.createRandomDatasetViaNativeApi(dataverseAlias, apiToken);
372381
createDatasetResponse.prettyPrint();
373382
Integer datasetId = UtilIT.getDatasetIdFromResponse(createDatasetResponse);
@@ -411,7 +420,20 @@ public void testAddUpdateDatasetViaNativeAPI() {
411420
String responseString = addSubjectSingleViaNative.prettyPrint();
412421
addSubjectSingleViaNative.then().assertThat()
413422
.statusCode(OK.getStatusCode()).body(containsString("Mathematical Sciences")).body(containsString("Social Sciences"));
414-
423+
424+
425+
String pathToJsonFileSingleCvoc = "doc/sphinx-guides/source/_static/api/dataset-add-single-cvoc-field-metadata.json";
426+
Response addSingleCvocViaNative = UtilIT.updateFieldLevelDatasetMetadataViaNative(datasetPersistentId, pathToJsonFileSingleCvoc, apiToken);
427+
addSingleCvocViaNative.prettyPrint();
428+
addSingleCvocViaNative.then().assertThat()
429+
.statusCode(OK.getStatusCode());
430+
431+
432+
String pathToJsonFileSingleCompound = "doc/sphinx-guides/source/_static/api/dataset-add-single-compound-field-metadata.json";
433+
Response addSingleCompoundViaNative = UtilIT.updateFieldLevelDatasetMetadataViaNative(datasetPersistentId, pathToJsonFileSingleCompound, apiToken);
434+
addSingleCompoundViaNative.prettyPrint();
435+
addSingleCompoundViaNative.then().assertThat()
436+
.statusCode(OK.getStatusCode());
415437

416438

417439
//Trying to blank out required field should fail...

0 commit comments

Comments
 (0)