Skip to content

Commit bace5f9

Browse files
committed
#11912 fix tests for name only update
1 parent 5116b54 commit bace5f9

3 files changed

Lines changed: 65 additions & 9 deletions

File tree

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2040,15 +2040,16 @@ public Response updateTemplateMetadata(@Context ContainerRequestContext crc, Str
20402040
try {
20412041
Template template = findTemplateOrDie(templateId);
20422042
Dataverse dataverse = template.getDataverse();
2043-
2043+
boolean nameOnly = false;
20442044
JsonObject json = JsonUtil.getJsonObject(body);
20452045

20462046
/*
20472047
You can also set a new name for your template in the json
20482048
*/
20492049

20502050
if (json.containsKey("name") && !json.getString("name").isBlank()) {
2051-
template.setName(json.getString("name"));
2051+
template.setName(json.getString("name"));
2052+
nameOnly=true;
20522053
}
20532054

20542055

@@ -2061,10 +2062,21 @@ public Response updateTemplateMetadata(@Context ContainerRequestContext crc, Str
20612062
}
20622063
} else {
20632064
updatedFields = jsonParser().parseMultipleFields(json, replaceData);
2064-
}
2065+
}
20652066

20662067
Map<String, String> instructionsMap = jsonParser().parseRequestBodyInstructionsMap(json);
20672068

2069+
2070+
//if we're only updating the name then return the metadata and instructions to previous
2071+
nameOnly = nameOnly && updatedFields.isEmpty() && instructionsMap==null;
2072+
2073+
if (nameOnly){
2074+
updatedFields = template.getDatasetFields();
2075+
instructionsMap = template.getInstructionsMap();
2076+
}
2077+
2078+
2079+
20682080
Template updated = execCommand(new UpdateTemplateFieldsCommand(template, dataverse, updatedFields, instructionsMap, replaceData, createDataverseRequest(getRequestUser(crc))));
20692081

20702082
return created("/dataverses/template/" + updated.getId(), jsonTemplate(updated));

src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateTemplateFieldsCommand.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,12 @@ public Template execute(CommandContext ctxt) throws CommandException {
6969
* @param template The template to update with the new fields.
7070
*/
7171
private void updateTemplateFields(Template template) {
72+
73+
//if it's empty then empty out the list
74+
if (updatedFields.isEmpty()) {
75+
template.setDatasetFields(updatedFields);
76+
}
77+
7278
for (DatasetField updatedField : updatedFields) {
7379
boolean found = false;
7480

@@ -168,12 +174,17 @@ private void updateInstructions(Template template){
168174
template.updateInstructions();
169175
} else {
170176
Map <String, String> currentInstructionsMap = template.getInstructionsMap();
171-
Map<String, String> merged = new HashMap<>(currentInstructionsMap);
172-
if(instructions != null){
177+
Map <String, String> merged = new HashMap<>(currentInstructionsMap);
178+
if (instructions != null) {
173179
merged.putAll(instructions);
180+
template.setInstructionsMap(merged);
181+
182+
} else {
183+
template.getInstructionsMap().clear();
174184
}
175-
template.setInstructionsMap(merged);
176-
template.updateInstructions();
185+
186+
template.updateInstructions();
187+
177188
}
178189
}
179190

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

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2903,6 +2903,27 @@ public void testUpdateTemplates() throws JsonParseException {
29032903
}
29042904
""";
29052905

2906+
String jsonStringForFieldsOnly = """
2907+
{
2908+
"fields": [
2909+
{
2910+
"typeName": "author",
2911+
"value": [
2912+
{
2913+
"authorName": {
2914+
"typeName": "authorName",
2915+
"value": "Brady, Tom"
2916+
},
2917+
"authorAffiliation": {
2918+
"typeName": "authorIdentifierScheme",
2919+
"value": "ORCID"
2920+
}
2921+
}
2922+
]
2923+
}
2924+
]
2925+
}
2926+
""";
29062927

29072928
String jsonStringForUpdateReplaceData = """
29082929
{
@@ -3037,7 +3058,7 @@ public void testUpdateTemplates() throws JsonParseException {
30373058
.body("data.name", equalTo("Dataverse template - edited"))
30383059
.body("data.usageCount", equalTo(0))
30393060
.body("data.termsOfUseAndAccess.license.name", equalTo("CC0 1.0"))
3040-
.body("data.datasetFields.citation.fields.size()", equalTo(1))
3061+
.body("data.datasetFields.size()", equalTo(0))
30413062
.body("data.instructions.flatten().size()", equalTo(2))
30423063
.body("data.dataverseAlias", equalTo(dataverseAlias));
30433064

@@ -3049,10 +3070,22 @@ public void testUpdateTemplates() throws JsonParseException {
30493070
.body("data.name", equalTo("Template - Just Name"))
30503071
.body("data.usageCount", equalTo(0))
30513072
.body("data.termsOfUseAndAccess.license.name", equalTo("CC0 1.0"))
3052-
.body("data.datasetFields.citation.fields.size()", equalTo(1))
3073+
.body("data.datasetFields.size()", equalTo(0))
30533074
.body("data.instructions.flatten().size()", equalTo(2))
30543075
.body("data.dataverseAlias", equalTo(dataverseAlias));
30553076

3077+
Response updateTemplateUpdateFieldsOnly = UtilIT.updateTemplateMetadata(templateId.toString(), jsonStringForFieldsOnly, apiToken, true);
3078+
3079+
updateTemplateUpdateFieldsOnly.prettyPrint();
3080+
3081+
updateTemplateUpdateFieldsOnly.then().assertThat().statusCode(CREATED.getStatusCode())
3082+
.body("data.name", equalTo("Template - Just Name"))
3083+
.body("data.usageCount", equalTo(0))
3084+
.body("data.termsOfUseAndAccess.license.name", equalTo("CC0 1.0"))
3085+
.body("data.datasetFields.size()", equalTo(1))
3086+
.body("data.instructions.flatten().size()", equalTo(2))
3087+
.body("data.dataverseAlias", equalTo(dataverseAlias));
3088+
30563089
//Update Template License
30573090
// Test case 1: Update to a valid, predefined license (CC BY 4.0).
30583091
Response updateLicenseResponse = UtilIT.updateTemplateLicenseTerms(templateId.toString(), "{ \"name\": \"CC BY 4.0\" }", apiToken);

0 commit comments

Comments
 (0)