Skip to content

Commit 35934d8

Browse files
committed
improve error checking, especially around versions #11305
1 parent 8602eff commit 35934d8

File tree

2 files changed

+88
-4
lines changed

2 files changed

+88
-4
lines changed

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

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -246,11 +246,28 @@ public Response exportDataset(@Context ContainerRequestContext crc, @QueryParam(
246246
}
247247

248248
DataverseRequest req = createDataverseRequest(getRequestUser(crc));
249-
String versionToLookUp = DS_VERSION_LATEST_PUBLISHED;
250-
if (versionId != null) {
251-
versionToLookUp = versionId;
249+
DatasetVersion datasetVersion = null;
250+
try {
251+
String versionToLookUp = DS_VERSION_LATEST_PUBLISHED;
252+
if (versionId != null) {
253+
versionToLookUp = versionId;
254+
}
255+
datasetVersion = getDatasetVersionOrDie(req, versionToLookUp, dataset, uriInfo, headers);
256+
} catch (WrappedResponse wr) {
257+
// wr.getLocalizedMessage() is null so don't bother returning it
258+
return error(BAD_REQUEST, "Unable to look up dataset based on version. Try " + DS_VERSION_LATEST_PUBLISHED + " or " + DS_VERSION_DRAFT + ".");
259+
}
260+
261+
if (!datasetVersion.isDraft()) {
262+
Command<DatasetVersion> cmd = new GetLatestPublishedDatasetVersionCommand(dvRequestService.getDataverseRequest(), dataset);
263+
DatasetVersion latestPublishedVersion = commandEngine.submit(cmd);
264+
if (latestPublishedVersion == null) {
265+
return error(BAD_REQUEST, "Non-draft version requested but for published versions only the latest (" + DS_VERSION_LATEST_PUBLISHED + ") is supported.");
266+
}
267+
if (!datasetVersion.equals(latestPublishedVersion)) {
268+
return error(BAD_REQUEST, "Non-draft version requested (" + versionId + ") but for published versions only the latest (" + DS_VERSION_LATEST_PUBLISHED + ") is supported.");
269+
}
252270
}
253-
DatasetVersion datasetVersion = getDatasetVersionOrDie(req, versionToLookUp, dataset, uriInfo, headers);
254271

255272
ExportService instance = ExportService.getInstance();
256273

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

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4704,6 +4704,73 @@ public void testCitationDate() throws IOException {
47044704
.body("oai_dc.type", equalTo("Dataset"))
47054705
.body("oai_dc.date", equalTo(todayDate))
47064706
.statusCode(OK.getStatusCode());
4707+
4708+
String newTitle = "A Post-1.0 Version";
4709+
Response updateTitle = UtilIT.updateDatasetTitleViaSword(datasetPid, newTitle, apiToken);
4710+
updateTitle.prettyPrint();
4711+
updateTitle.then().assertThat()
4712+
.statusCode(OK.getStatusCode())
4713+
.body("entry.treatment", equalTo("no treatment information available"));
4714+
4715+
UtilIT.publishDatasetViaNativeApi(datasetId, "major", apiToken).then().assertThat().statusCode(OK.getStatusCode());
4716+
4717+
Response exportDatacitePreviouslyPublishedVersion = UtilIT.exportDataset(datasetPid, "Datacite", false, "1.0", apiToken);
4718+
exportDatacitePreviouslyPublishedVersion.prettyPrint();
4719+
exportDatacitePreviouslyPublishedVersion.then().assertThat()
4720+
.statusCode(BAD_REQUEST.getStatusCode())
4721+
.body("message", equalTo("Non-draft version requested (1.0) but for published versions only the latest (:latest-published) is supported."));
4722+
4723+
Response exportDataciteJunkVersion = UtilIT.exportDataset(datasetPid, "Datacite", false, "junk", apiToken);
4724+
exportDataciteJunkVersion.prettyPrint();
4725+
exportDataciteJunkVersion.then().assertThat()
4726+
.statusCode(BAD_REQUEST.getStatusCode())
4727+
.body("message", equalTo("Unable to look up dataset based on version. Try :latest-published or :draft."));
4728+
4729+
Response deaccessionV20 = UtilIT.deaccessionDataset(datasetPid, "2.0", "retracted", null, apiToken);
4730+
deaccessionV20.prettyPrint();
4731+
deaccessionV20.then().assertThat().statusCode(OK.getStatusCode());
4732+
4733+
Response exportDataciteV20Deaccessioned = UtilIT.exportDataset(datasetPid, "Datacite", false, "2.0", apiToken);
4734+
exportDataciteV20Deaccessioned.prettyPrint();
4735+
exportDataciteV20Deaccessioned.then().assertThat()
4736+
.statusCode(BAD_REQUEST.getStatusCode())
4737+
.body("message", equalTo("Unable to look up dataset based on version. Try :latest-published or :draft."));
4738+
4739+
Response exportDataciteV10NotDeaccessioned = UtilIT.exportDataset(datasetPid, "Datacite", false, "1.0", apiToken);
4740+
exportDataciteV10NotDeaccessioned.prettyPrint();
4741+
exportDataciteV10NotDeaccessioned.then().assertThat()
4742+
.statusCode(OK.getStatusCode())
4743+
.body("resource.dates.date[0].@dateType", CoreMatchers.equalTo("Submitted"))
4744+
.body("resource.dates.date[0]", CoreMatchers.equalTo("1999-12-31"))
4745+
.body("resource.dates.date[1].@dateType", CoreMatchers.equalTo("Available"))
4746+
.body("resource.dates.date[1]", CoreMatchers.equalTo(today))
4747+
.body("resource.version", equalTo("1.0"));
4748+
4749+
Response exportDataciteLatestPublishedNotDeaccessioned = UtilIT.exportDataset(datasetPid, "Datacite", false, DS_VERSION_LATEST_PUBLISHED, apiToken);
4750+
exportDataciteLatestPublishedNotDeaccessioned.prettyPrint();
4751+
exportDataciteLatestPublishedNotDeaccessioned.then().assertThat()
4752+
.statusCode(OK.getStatusCode())
4753+
.body("resource.dates.date[0].@dateType", CoreMatchers.equalTo("Submitted"))
4754+
.body("resource.dates.date[0]", CoreMatchers.equalTo("1999-12-31"))
4755+
.body("resource.dates.date[1].@dateType", CoreMatchers.equalTo("Available"))
4756+
.body("resource.dates.date[1]", CoreMatchers.equalTo(today))
4757+
.body("resource.version", equalTo("1.0"));
4758+
4759+
Response deaccessionV10 = UtilIT.deaccessionDataset(datasetPid, "1.0", "retracted", null, apiToken);
4760+
deaccessionV10.prettyPrint();
4761+
deaccessionV10.then().assertThat().statusCode(OK.getStatusCode());
4762+
4763+
Response exportDataciteV10IsDeaccessioned = UtilIT.exportDataset(datasetPid, "Datacite", false, "1.0", apiToken);
4764+
exportDataciteV10IsDeaccessioned.prettyPrint();
4765+
exportDataciteV10IsDeaccessioned.then().assertThat()
4766+
.statusCode(BAD_REQUEST.getStatusCode())
4767+
.body("message", equalTo("Unable to look up dataset based on version. Try :latest-published or :draft."));
4768+
4769+
Response exportDataciteLatestPublishedIsDeaccessioned = UtilIT.exportDataset(datasetPid, "Datacite", false, DS_VERSION_LATEST_PUBLISHED, apiToken);
4770+
exportDataciteLatestPublishedIsDeaccessioned.prettyPrint();
4771+
exportDataciteLatestPublishedIsDeaccessioned.then().assertThat()
4772+
.statusCode(BAD_REQUEST.getStatusCode())
4773+
.body("message", equalTo("Unable to look up dataset based on version. Try :latest-published or :draft."));
47074774
}
47084775

47094776
@Test

0 commit comments

Comments
 (0)