Skip to content

Commit cedd4c2

Browse files
committed
add overwrite to name, email, institution, and position in guestbook response JSON
1 parent 2c5985d commit cedd4c2

File tree

3 files changed

+51
-6
lines changed

3 files changed

+51
-6
lines changed

src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -603,6 +603,11 @@ public GuestbookResponse parseGuestbookResponse(JsonObject obj, GuestbookRespons
603603
if (obj == null || guestbookResponse == null || guestbookResponse.getGuestbook() == null || guestbookResponse.getGuestbook().getCustomQuestions() == null) {
604604
return null;
605605
}
606+
// overwrite name, email, institution and position.
607+
guestbookResponse.setName(obj.getString("name", guestbookResponse.getName()));
608+
guestbookResponse.setEmail(obj.getString("email", guestbookResponse.getEmail()));
609+
guestbookResponse.setInstitution(obj.getString("institution", guestbookResponse.getInstitution()));
610+
guestbookResponse.setPosition(obj.getString("position", guestbookResponse.getPosition()));
606611
Map<Long, CustomQuestion> cqMap = new HashMap<>();
607612
guestbookResponse.getGuestbook().getCustomQuestions().stream().forEach(cq -> cqMap.put(cq.getId(),cq));
608613
JsonArray answers = obj.getJsonArray("answers");
@@ -637,14 +642,14 @@ public GuestbookResponse parseGuestbookResponse(JsonObject obj, GuestbookRespons
637642
}
638643
guestbookResponse.setCustomQuestionResponses(customQuestionResponses);
639644
// verify each required question is in the response
640-
List<String> missingReponses = new ArrayList<>();
645+
List<String> missingResponses = new ArrayList<>();
641646
for (Map.Entry<Long, CustomQuestion> e : cqMap.entrySet()) {
642647
if (e.getValue().isRequired()) {
643-
missingReponses.add(e.getValue().getQuestionString());
648+
missingResponses.add(e.getValue().getQuestionString());
644649
}
645650
}
646-
if (!missingReponses.isEmpty()) {
647-
String missing = String.join(",", missingReponses);
651+
if (!missingResponses.isEmpty()) {
652+
String missing = String.join(",", missingResponses);
648653
throw new JsonParseException(BundleUtil.getStringFromBundle("access.api.requestAccess.failure.guestbookresponseMissingRequired", List.of(missing)));
649654
}
650655

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

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3888,6 +3888,14 @@ public void testDownloadFileWithGuestbookResponse() throws IOException, JsonPars
38883888
String apiToken = UtilIT.getApiTokenFromResponse(createUserResponse);
38893889
String username = UtilIT.getUsernameFromResponse(createUserResponse);
38903890

3891+
// Create second user with no permission
3892+
createUserResponse = UtilIT.createRandomUser();
3893+
createUserResponse.prettyPrint();
3894+
assertEquals(200, createUserResponse.getStatusCode());
3895+
String apiToken2 = UtilIT.getApiTokenFromResponse(createUserResponse);
3896+
String username2 = UtilIT.getUsernameFromResponse(createUserResponse);
3897+
String user2Email = JsonPath.from(createUserResponse.body().asString()).getString("data.authenticatedUser.email");
3898+
38913899
// Create Dataset
38923900
Response createDatasetResponse = UtilIT.createRandomDatasetViaNativeApi(dataverseAlias, ownerApiToken);
38933901
createDatasetResponse.then().assertThat().statusCode(CREATED.getStatusCode());
@@ -3997,6 +4005,21 @@ public void testDownloadFileWithGuestbookResponse() throws IOException, JsonPars
39974005
signedUrlResponse = get(signedUrl);
39984006
signedUrlResponse.prettyPrint();
39994007
assertEquals(OK.getStatusCode(), signedUrlResponse.getStatusCode());
4008+
4009+
// TEST Overwrite name, email, institution and position in guestbook Response. Using user2
4010+
requestFileAccessResponse = UtilIT.requestFileAccess(fileId1.toString(), apiToken2, null);
4011+
assertEquals(200, requestFileAccessResponse.getStatusCode());
4012+
grantFileAccessResponse = UtilIT.grantFileAccess(fileId1.toString(), "@" + username2, ownerApiToken);
4013+
assertEquals(200, grantFileAccessResponse.getStatusCode());
4014+
// Modify guestbookResponse excluding email to show that the email remains unchanged
4015+
guestbookResponse = guestbookResponse.replace("\"guestbookResponse\": {",
4016+
"\"guestbookResponse\": { \"name\":\"My Name\", \"position\":\"My Position\", \"institution\":\"My Institution\",");
4017+
downloadResponse = UtilIT.getDownloadFileUrlWithGuestbookResponse(fileId1, apiToken2, guestbookResponse, true);
4018+
downloadResponse.prettyPrint();
4019+
downloadResponse.then().assertThat()
4020+
.statusCode(OK.getStatusCode());
4021+
Response guestbookResponses = UtilIT.getGuestbookResponses(dataverseAlias, guestbook.getId(), ownerApiToken);
4022+
assertTrue(guestbookResponses.prettyPrint().contains("My Name," + user2Email + ",My Institution,My Position"));
40004023
}
40014024

40024025
@Test
@@ -4045,7 +4068,5 @@ public void testDownloadFileWithSignedUrl() throws IOException, JsonParseExcepti
40454068
downloadResponse.prettyPrint();
40464069
downloadResponse.then().assertThat()
40474070
.statusCode(OK.getStatusCode());
4048-
String signedUrl = UtilIT.getSignedUrlFromResponse(downloadResponse);
4049-
40504071
}
40514072
}

src/test/java/edu/harvard/iq/dataverse/util/json/JsonParserTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -811,6 +811,10 @@ public void testGuestbookResponse() throws JsonParseException {
811811

812812
final String guestbookResponseJson = """
813813
{
814+
"name": "My Name",
815+
"email": "myemail@example.com",
816+
"institution": "Harvard",
817+
"position": "Upright",
814818
"answers": [
815819
{
816820
"id": 1,
@@ -872,5 +876,20 @@ public void testGuestbookResponse() throws JsonParseException {
872876
System.out.println(e.getMessage());
873877
assertTrue(e.getMessage().contains("ID 4 not found"));
874878
}
879+
880+
// Test overwrite name, email, institution and position.
881+
try {
882+
jsonObj = JsonUtil.getJsonObject(guestbookResponseJson);
883+
gbr = sut.parseGuestbookResponse(jsonObj, guestbookResponse);
884+
assertEquals("My Name", gbr.getName());
885+
// Removing name from the JSON defaults it to the original value in guestbook response
886+
gbr.setName("My Original Name");
887+
jsonObj = JsonUtil.getJsonObject(guestbookResponseJson.replace("\"name\": \"My Name\",", ""));
888+
gbr = sut.parseGuestbookResponse(jsonObj, guestbookResponse);
889+
assertEquals("My Original Name", gbr.getName());
890+
} catch (JsonParseException e) {
891+
System.out.println(e.getMessage());
892+
assertTrue(e.getMessage().contains("ID 4 not found"));
893+
}
875894
}
876895
}

0 commit comments

Comments
 (0)