Skip to content

Commit a61ec40

Browse files
authored
Merge pull request #11669 from IQSS/11633-list-dataverse-links-api-change
refactor json response for get dataverse links api
2 parents c856b07 + 92d502d commit a61ec40

File tree

5 files changed

+37
-8
lines changed

5 files changed

+37
-8
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
The [API for listing the collections a dataverse has been linked to](https://guides.dataverse.org/en/latest/admin/dataverses-datasets.html#list-dataverse-collection-links) (`api/dataverses/$dataverse-alias/links`) has been refactored to return a new Json format. This is a breaking API.

doc/sphinx-guides/source/api/changelog.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ This API changelog is experimental and we would love feedback on its usefulness.
99

1010
v6.8
1111
----
12+
1213
- For POST /api/files/{id}/metadata passing an empty string ("description":"") or array ("categories":[]) will no longer be ignored. Empty fields will now clear out the values in the file's metadata. To ignore the fields simply do not include them in the JSON string.
1314
- For PUT /api/datasets/{id}/editMetadata the query parameter "sourceInternalVersionNumber" has been removed and replaced with "sourceLastUpdateTime" to verify that the data being edited hasn't been modified and isn't stale.
15+
- For GET /api/dataverses/$dataverse-alias/links the Json response has changed breaking the backward compatibility of the API.
1416

1517
v6.7
1618
----

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,7 @@
3434
import static edu.harvard.iq.dataverse.util.StringUtil.nonEmpty;
3535
import static edu.harvard.iq.dataverse.util.json.JsonPrinter.*;
3636

37-
import edu.harvard.iq.dataverse.util.json.JSONLDUtil;
38-
import edu.harvard.iq.dataverse.util.json.JsonParseException;
39-
import edu.harvard.iq.dataverse.util.json.JsonPrinter;
40-
import edu.harvard.iq.dataverse.util.json.JsonUtil;
37+
import edu.harvard.iq.dataverse.util.json.*;
4138

4239
import java.io.*;
4340
import java.util.*;
@@ -1707,13 +1704,16 @@ public Response listLinks(@Context ContainerRequestContext crc, @PathParam("iden
17071704
List<Dataset> datasetsThisDvHasLinkedToList = dataverseSvc.findDatasetsThisIdHasLinkedTo(dv.getId());
17081705
JsonArrayBuilder datasetsThisDvHasLinkedToBuilder = Json.createArrayBuilder();
17091706
for (Dataset dataset : datasetsThisDvHasLinkedToList) {
1710-
datasetsThisDvHasLinkedToBuilder.add(dataset.getLatestVersion().getTitle());
1707+
JsonObjectBuilder ds = new NullSafeJsonBuilder();
1708+
ds.add("title", dataset.getLatestVersion().getTitle());
1709+
ds.add("identifier", dataset.getProtocol() + ":" + dataset.getAuthority() + "/" + dataset.getIdentifier());
1710+
datasetsThisDvHasLinkedToBuilder.add(ds);
17111711
}
17121712

17131713
JsonObjectBuilder response = Json.createObjectBuilder();
1714-
response.add("dataverses that the " + dv.getAlias() + " dataverse has linked to", dvsThisDvHasLinkedToBuilder);
1715-
response.add("dataverses that link to the " + dv.getAlias(), dvsThatLinkToThisDvBuilder);
1716-
response.add("datasets that the " + dv.getAlias() + " has linked to", datasetsThisDvHasLinkedToBuilder);
1714+
response.add("linkedDataverses", dvsThisDvHasLinkedToBuilder);
1715+
response.add("dataversesLinkingToThis", dvsThatLinkToThisDvBuilder);
1716+
response.add("linkedDatasets", datasetsThisDvHasLinkedToBuilder);
17171717
return ok(response);
17181718

17191719
} catch (WrappedResponse wr) {

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.logging.Logger;
1111

1212
import static jakarta.ws.rs.core.Response.Status.*;
13+
import static org.hamcrest.CoreMatchers.containsString;
1314
import static org.hamcrest.CoreMatchers.equalTo;
1415
import static org.junit.jupiter.api.Assertions.*;
1516

@@ -80,6 +81,13 @@ public void testLinkedDataset() {
8081
tryToLinkUnpublishedDataset.then().assertThat()
8182
.statusCode(OK.getStatusCode());
8283

84+
Response getLinksResponse = UtilIT.getDataverseLinks(dataverse2Alias, superuserApiToken);
85+
getLinksResponse.prettyPrint();
86+
getLinksResponse.then().assertThat()
87+
.statusCode(OK.getStatusCode());
88+
assertEquals("Darwin's Finches", JsonPath.from(getLinksResponse.asString()).getString("data.linkedDatasets[0].title"));
89+
assertEquals(datasetPid, JsonPath.from(getLinksResponse.asString()).getString("data.linkedDatasets[0].identifier"));
90+
8391
// A dataset cannot be linked to its parent dataverse.
8492
Response tryToLinkToParentDataverse = UtilIT.linkDataset(datasetPid, dataverse1Alias, superuserApiToken);
8593
tryToLinkToParentDataverse.prettyPrint();
@@ -126,6 +134,17 @@ public void testCreateDeleteDataverseLink() {
126134
.statusCode(FORBIDDEN.getStatusCode())
127135
.body("message", equalTo(dataverseAlias + " has already been linked to " + dataverseAlias2 + "."));
128136

137+
Response getLinksResponse = UtilIT.getDataverseLinks(dataverseAlias, apiToken);
138+
getLinksResponse.prettyPrint();
139+
getLinksResponse.then().assertThat()
140+
.statusCode(OK.getStatusCode())
141+
.body("data.dataversesLinkingToThis[0]", equalTo(dataverseAlias2));
142+
getLinksResponse = UtilIT.getDataverseLinks(dataverseAlias2, apiToken);
143+
getLinksResponse.prettyPrint();
144+
getLinksResponse.then().assertThat()
145+
.statusCode(OK.getStatusCode())
146+
.body("data.linkedDataverses[0]", equalTo(dataverseAlias));
147+
129148
Response deleteLinkingDataverseResponse = UtilIT.deleteDataverseLink(dataverseAlias, dataverseAlias2, apiToken);
130149
deleteLinkingDataverseResponse.prettyPrint();
131150
deleteLinkingDataverseResponse.then().assertThat()

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2109,6 +2109,13 @@ static Response createDataverseLink(String linkedDataverseAlias, String linkingD
21092109
.put("api/dataverses/" + linkedDataverseAlias + "/link/" + linkingDataverseAlias);
21102110
return response;
21112111
}
2112+
2113+
static Response getDataverseLinks(String dataverseAlias, String apiToken) {
2114+
Response response = given()
2115+
.header(API_TOKEN_HTTP_HEADER, apiToken)
2116+
.get("api/dataverses/"+ dataverseAlias + "/links");
2117+
return response;
2118+
}
21122119

21132120
static Response deleteDataverseLink(String linkedDataverseAlias, String linkingDataverseAlias, String apiToken) {
21142121
Response response = given()

0 commit comments

Comments
 (0)