diff --git a/src/main/webapp/dataverseuser.xhtml b/src/main/webapp/dataverseuser.xhtml
index dd9fe6e2460..6c7826783d7 100644
--- a/src/main/webapp/dataverseuser.xhtml
+++ b/src/main/webapp/dataverseuser.xhtml
@@ -450,7 +450,7 @@
#{item.theObject.getDataset().getDisplayName()}
-
+
diff --git a/src/main/webapp/file.xhtml b/src/main/webapp/file.xhtml
index 633b71702f6..8a5c2709e5d 100644
--- a/src/main/webapp/file.xhtml
+++ b/src/main/webapp/file.xhtml
@@ -71,7 +71,8 @@
-
+
+
@@ -79,7 +80,7 @@
-
+
-
+
diff --git a/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java b/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java
index b6484c16628..a48334c27f9 100644
--- a/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java
+++ b/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java
@@ -3846,7 +3846,7 @@ public void testReCreateDataset() {
}
@Test
- public void testCurationLabelAPIs() {
+ public void testCurationStatusAPIs() {
Response createUser = UtilIT.createRandomUser();
createUser.prettyPrint();
String username = UtilIT.getUsernameFromResponse(createUser);
@@ -3888,16 +3888,60 @@ public void testCurationLabelAPIs() {
String labelSetName = getData(response.getBody().asString());
// full should be {"message":"AlternateProcess"}
assertTrue(labelSetName.contains("AlternateProcess"));
-
- // Now set a label
- //Option from the wrong set
- Response response2 = UtilIT.setDatasetCurationLabel(datasetId, apiToken, "Author contacted");
- response2.then().assertThat().statusCode(BAD_REQUEST.getStatusCode());
- // Valid option
- Response response3 = UtilIT.setDatasetCurationLabel(datasetId, apiToken, "State 1");
- response3.then().assertThat().statusCode(OK.getStatusCode());
+
+ // Set curation statuses and verify history
+ Response setStatus1 = UtilIT.setDatasetCurationLabel(datasetId, apiToken, "State 1");
+ setStatus1.then().assertThat().statusCode(OK.getStatusCode());
+
+ Response setStatus2 = UtilIT.setDatasetCurationLabel(datasetId, apiToken, "State 2");
+ setStatus2.then().assertThat().statusCode(OK.getStatusCode());
+
+ Response setStatus3 = UtilIT.setDatasetCurationLabel(datasetId, apiToken, "State 3");
+ setStatus3.then().assertThat().statusCode(OK.getStatusCode());
+
+ // Get curation status with history
+ Response getStatusWithHistory = UtilIT.getDatasetCurationStatus(datasetId, apiToken, true);
+ getStatusWithHistory.then().assertThat().statusCode(OK.getStatusCode());
+ JsonArray history = getDataAsJsonArray(getStatusWithHistory.body().asString());
+
+ // Verify history
+ assertEquals(3, history.size());
+ assertEquals("State 3", history.getJsonObject(0).getString("label"));
+ assertEquals("State 2", history.getJsonObject(1).getString("label"));
+ assertEquals("State 1", history.getJsonObject(2).getString("label"));
+
+ // Reset status to null
+ Response resetStatus = UtilIT.deleteDatasetCurationLabel(datasetId, apiToken);
+ resetStatus.then().assertThat().statusCode(OK.getStatusCode());
+
+ // Verify null status
+ Response getStatusAfterReset = UtilIT.getDatasetCurationStatus(datasetId, apiToken, false);
+ getStatusAfterReset.then().assertThat().statusCode(OK.getStatusCode());
+
+ JsonObject statusAfterReset = Json.createReader(new StringReader(getStatusAfterReset.body().asString())).readObject();
+ assertFalse(statusAfterReset.containsKey("label"));
+
+ // Attempt to set invalid status
+ Response setInvalidStatus = UtilIT.setDatasetCurationLabel(datasetId, apiToken, "Invalid Status");
+ setInvalidStatus.then().assertThat().statusCode(BAD_REQUEST.getStatusCode());
+
+ // Clean up
+ Response deleteDatasetResponse = UtilIT.deleteDatasetViaNativeApi(datasetId, apiToken);
+ assertEquals(200, deleteDatasetResponse.getStatusCode());
+
+ Response deleteDataverseResponse = UtilIT.deleteDataverse(dataverseAlias, apiToken);
+ assertEquals(200, deleteDataverseResponse.getStatusCode());
+
+ Response deleteUserResponse = UtilIT.deleteUser(username);
+ assertEquals(200, deleteUserResponse.getStatusCode());
}
+ private JsonArray getDataAsJsonArray(String body) {
+ try (StringReader rdr = new StringReader(body)) {
+ return Json.createReader(rdr).readObject().getJsonArray("data");
+ }
+ }
+
private JsonObject getDataAsJsonObject(String body) {
try (StringReader rdr = new StringReader(body)) {
return Json.createReader(rdr).readObject().getJsonObject("data");
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 9a1deca887e..f0d1d6fba4a 100644
--- a/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java
+++ b/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java
@@ -3913,6 +3913,20 @@ static Response setDatasetCurationLabel(Integer datasetId, String apiToken, Stri
return response;
}
+ static Response deleteDatasetCurationLabel(Integer datasetId, String apiToken) {
+ Response response = given()
+ .header(API_TOKEN_HTTP_HEADER, apiToken)
+ .delete("/api/datasets/" + datasetId + "/curationStatus");
+ return response;
+ }
+
+ static Response getDatasetCurationStatus(Integer datasetId, String apiToken, boolean includeHistory) {
+ Response response = given()
+ .header(API_TOKEN_HTTP_HEADER, apiToken)
+ .get("/api/datasets/" + datasetId + "/curationStatus?includeHistory=" + includeHistory);
+ return response;
+ }
+
static Response getDatasetVersionArchivalStatus(Integer datasetId, String version, String apiToken) {
Response response = given()
.header(API_TOKEN_HTTP_HEADER, apiToken)