diff --git a/doc/release-notes/12450-expose-collection-guestbook-root-setting.md b/doc/release-notes/12450-expose-collection-guestbook-root-setting.md new file mode 100644 index 00000000000..bcd5e9dc10d --- /dev/null +++ b/doc/release-notes/12450-expose-collection-guestbook-root-setting.md @@ -0,0 +1,6 @@ +Added the ability to set and view the guestbookRoot setting of a collection via these APIs + +Any GET call that returns a Collection or List of Collections will include "guestbookRoot": true or false +`Create Dataverse: POST /api/dataverse/{id}` +`Update Dataverse: PUT /api/dataverse/{id}` +(by adding "guestbookRoot" the Json body) diff --git a/doc/sphinx-guides/source/_static/api/dataverse-complete.json b/doc/sphinx-guides/source/_static/api/dataverse-complete.json index d5e92d1f1fc..ecc8ca641ee 100644 --- a/doc/sphinx-guides/source/_static/api/dataverse-complete.json +++ b/doc/sphinx-guides/source/_static/api/dataverse-complete.json @@ -11,5 +11,7 @@ ], "affiliation": "Scientific Research University", "description": "We do all the science.", - "dataverseType": "LABORATORY" + "dataverseType": "LABORATORY", + "datasetFileCountLimit": 10, + "guestbookRoot": false } diff --git a/src/main/java/edu/harvard/iq/dataverse/api/dto/DataverseDTO.java b/src/main/java/edu/harvard/iq/dataverse/api/dto/DataverseDTO.java index bcb47eb5ff4..9615b5f951f 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/dto/DataverseDTO.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/dto/DataverseDTO.java @@ -13,6 +13,7 @@ public class DataverseDTO { private List dataverseContacts; private Dataverse.DataverseType dataverseType; private Integer datasetFileCountLimit; + private Boolean guestbookRoot; public String getAlias() { return alias; @@ -69,4 +70,12 @@ public Dataverse.DataverseType getDataverseType() { public void setDataverseType(Dataverse.DataverseType dataverseType) { this.dataverseType = dataverseType; } + + public Boolean getGuestbookRoot() { + return guestbookRoot; + } + + public void setGuestbookRoot(Boolean guestbookRoot) { + this.guestbookRoot = guestbookRoot; + } } diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDataverseCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDataverseCommand.java index 35c4d5bd049..08686e0c682 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDataverseCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/UpdateDataverseCommand.java @@ -133,6 +133,9 @@ private void updateDataverseFromDTO(Dataverse dataverse, DataverseDTO dto) { if (dto.getDatasetFileCountLimit() != null) { dataverse.setDatasetFileCountLimit(dto.getDatasetFileCountLimit()); } + if (dto.getGuestbookRoot() != null) { + dataverse.setGuestbookRoot(dto.getGuestbookRoot()); + } } @Override diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java index cb2d6d60fb9..62815c296a8 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java @@ -144,6 +144,9 @@ public Dataverse parseDataverse(JsonObject jobj) throws JsonParseException { if (jobj.containsKey("requireFilesToPublishDataset")) { dv.setRequireFilesToPublishDataset(jobj.getBoolean("requireFilesToPublishDataset")); } + if (jobj.containsKey("guestbookRoot")) { + dv.setGuestbookRoot(jobj.getBoolean("guestbookRoot")); + } /* We decided that subject is not user set, but gotten from the subject of the dataverse's datasets - leavig this code in for now, in case we need to go back to it at some point @@ -205,6 +208,9 @@ public DataverseDTO parseDataverseDTO(JsonObject jsonObject) throws JsonParseExc if (jsonObject.containsKey("datasetFileCountLimit")) { dataverseDTO.setDatasetFileCountLimit(Integer.valueOf(jsonObject.getInt("datasetFileCountLimit"))); } + if (jsonObject.containsKey("guestbookRoot")) { + dataverseDTO.setGuestbookRoot(jsonObject.getBoolean("guestbookRoot")); + } return dataverseDTO; } diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java index f2716fe20d2..c26d0d5edb9 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java @@ -356,6 +356,7 @@ public static JsonObjectBuilder json(Dataverse dv, Boolean hideEmail, Boolean re if (dv.getFilePIDsEnabled() != null) { bld.add("filePIDsEnabled", dv.getFilePIDsEnabled()); } + bld.add("guestbookRoot", dv.isGuestbookRoot()); bld.add("effectiveRequiresFilesToPublishDataset", dv.getEffectiveRequiresFilesToPublishDataset()); bld.add("isReleased", dv.isReleased()); diff --git a/src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java b/src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java index 7cc05c48b2a..3f9039607b9 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java @@ -1766,7 +1766,7 @@ public void testUpdateDataverse() throws JsonParseException { updateDataverseResponse = UtilIT.updateDataverse( testDataverseAlias, newAlias, newName, newAffiliation, newDataverseType, newContactEmails, newInputLevelNames, null, newMetadataBlockNames, apiToken, - Boolean.TRUE, Boolean.TRUE, null + Boolean.TRUE, Boolean.TRUE, null, null ); updateDataverseResponse.then().assertThat() .statusCode(BAD_REQUEST.getStatusCode()) @@ -1776,7 +1776,7 @@ public void testUpdateDataverse() throws JsonParseException { updateDataverseResponse = UtilIT.updateDataverse( testDataverseAlias, newAlias, newName, newAffiliation, newDataverseType, newContactEmails, newInputLevelNames, newFacetIds, null, apiToken, - Boolean.TRUE, Boolean.TRUE, null + Boolean.TRUE, Boolean.TRUE, null, null ); updateDataverseResponse.then().assertThat() .statusCode(BAD_REQUEST.getStatusCode()) @@ -1877,6 +1877,7 @@ public void testUpdateDataverse() throws JsonParseException { // Update the dataverse without setting metadata blocks, facets, or input levels // Do NOT ignore the missing data so the metadata blocks, facets, and input levels are deleted and inherited from the parent + // Also testing Guestbook Root updateDataverseResponse = UtilIT.updateDataverse( newAlias, newAlias, @@ -1888,9 +1889,10 @@ public void testUpdateDataverse() throws JsonParseException { null, null, apiToken, - Boolean.TRUE, Boolean.TRUE, null + Boolean.TRUE, Boolean.TRUE, null, Boolean.TRUE ); updateDataverseResponse.then().assertThat().statusCode(OK.getStatusCode()); + updateDataverseResponse.then().assertThat().body("data.guestbookRoot", equalTo(true)); // Assert that the metadata blocks are inherited from the parent listMetadataBlocksResponse = UtilIT.listMetadataBlocks(newAlias, false, false, apiToken); @@ -2713,7 +2715,7 @@ public void testCreateAndGetTemplates() throws JsonParseException { dataverseAlias, dataverseAlias, newName, newAffiliation, newDataverseType, newContactEmails, newInputLevelNames, null, newMetadataBlockNames, apiToken, - Boolean.FALSE, Boolean.FALSE, null); + Boolean.FALSE, Boolean.FALSE, null, null); updateDataverseResponse.then().assertThat() .statusCode(OK.getStatusCode()); @@ -2942,7 +2944,7 @@ public void testUpdateTemplates() throws JsonParseException { dataverseAlias, dataverseAlias, newName, newAffiliation, newDataverseType, newContactEmails, newInputLevelNames, null, newMetadataBlockNames, apiToken, - Boolean.FALSE, Boolean.FALSE, null); + Boolean.FALSE, Boolean.FALSE, null, null); updateDataverseResponse.then().assertThat() .statusCode(OK.getStatusCode()); diff --git a/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java b/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java index fdb1b4f53f1..fd1f7e80e56 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java @@ -450,7 +450,7 @@ static Response updateDataverse(String alias, String apiToken) { return updateDataverse(alias, newAlias, newName, newAffiliation, newDataverseType, newContactEmails, - newInputLevelNames, newFacetIds, newMetadataBlockNames, apiToken, null, null, null); + newInputLevelNames, newFacetIds, newMetadataBlockNames, apiToken, null, null, null, null); } static Response updateDataverse(String alias, @@ -465,7 +465,8 @@ static Response updateDataverse(String alias, String apiToken, Boolean inheritMetadataBlocksFromParent, Boolean inheritFacetsFromParent, - Integer datasetFileCountLimit) { + Integer datasetFileCountLimit, + Boolean guestbookRoot) { JsonArrayBuilder contactArrayBuilder = JsonUtil.createArrayBuilder(); for(String contactEmail : newContactEmails) { contactArrayBuilder.add(JsonUtil.createObjectBuilder().add("contactEmail", contactEmail)); @@ -481,6 +482,9 @@ static Response updateDataverse(String alias, if (datasetFileCountLimit != null) { jsonBuilder.add("datasetFileCountLimit", datasetFileCountLimit); } + if (guestbookRoot != null) { + jsonBuilder.add("guestbookRoot", guestbookRoot); + } updateDataverseRequestJsonWithMetadataBlocksConfiguration(newInputLevelNames, newFacetIds, newMetadataBlockNames, inheritMetadataBlocksFromParent, inheritFacetsFromParent, jsonBuilder); @@ -505,7 +509,8 @@ static Response updateDataverse(String alias, Dataverse dv, String apiToken) { apiToken, null, null, - dv.isDatasetFileCountLimitSet(dv.getDatasetFileCountLimit()) ? dv.getDatasetFileCountLimit() : -1); + dv.isDatasetFileCountLimitSet(dv.getDatasetFileCountLimit()) ? dv.getDatasetFileCountLimit() : -1, + null); } private static void updateDataverseRequestJsonWithMetadataBlocksConfiguration(String[] inputLevelNames, diff --git a/src/test/java/edu/harvard/iq/dataverse/api/dto/DataverseDTOTest.java b/src/test/java/edu/harvard/iq/dataverse/api/dto/DataverseDTOTest.java new file mode 100644 index 00000000000..b1c9cc9e58e --- /dev/null +++ b/src/test/java/edu/harvard/iq/dataverse/api/dto/DataverseDTOTest.java @@ -0,0 +1,37 @@ +package edu.harvard.iq.dataverse.api.dto; + +import edu.harvard.iq.dataverse.Dataverse; +import edu.harvard.iq.dataverse.DataverseContact; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class DataverseDTOTest { + + @Test + public void testDataverseDTO() { + DataverseDTO dv = new DataverseDTO(); + List dataverseContacts = new ArrayList<>(); + dataverseContacts.add(new DataverseContact()); + dataverseContacts.add(new DataverseContact()); + dv.setGuestbookRoot(Boolean.FALSE); + dv.setAffiliation("affiliation"); + dv.setDataverseType(Dataverse.DataverseType.JOURNALS); + dv.setDataverseContacts(dataverseContacts); + dv.setDescription("description"); + dv.setName("name"); + dv.setAlias("alias"); + dv.setDatasetFileCountLimit(Integer.MAX_VALUE); + + assertEquals(Boolean.FALSE, dv.getGuestbookRoot()); + assertEquals("affiliation", dv.getAffiliation()); + assertEquals("description", dv.getDescription()); + assertEquals("name", dv.getName()); + assertEquals("alias", dv.getAlias()); + assertEquals(Integer.MAX_VALUE, dv.getDatasetFileCountLimit()); + assertEquals(2,dv.getDataverseContacts().size()); + } +}