Skip to content

Commit

Permalink
Added: test cases to testAddUpdateDatasetViaNativeAPI for sourceInter…
Browse files Browse the repository at this point in the history
…nalVersionNumber
  • Loading branch information
GPortas committed Mar 2, 2025
1 parent 39615fd commit 3902ef0
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 28 deletions.
59 changes: 35 additions & 24 deletions src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -357,15 +357,15 @@ public void testCreateDataset() {
assertEquals(200, deleteUserResponse.getStatusCode());

}

@Test
public void testAddUpdateDatasetViaNativeAPI() {

Response createUser = UtilIT.createRandomUser();
createUser.prettyPrint();
String username = UtilIT.getUsernameFromResponse(createUser);
String apiToken = UtilIT.getApiTokenFromResponse(createUser);

Response createDataverseResponse = UtilIT.createRandomDataverse(apiToken);
createDataverseResponse.prettyPrint();
String dataverseAlias = UtilIT.getAliasFromResponse(createDataverseResponse);
Expand All @@ -385,58 +385,51 @@ public void testAddUpdateDatasetViaNativeAPI() {
Response datasetAsJson = UtilIT.nativeGet(datasetId, apiToken);
datasetAsJson.then().assertThat()
.statusCode(OK.getStatusCode());

String identifier = JsonPath.from(datasetAsJson.getBody().asString()).getString("data.identifier");

//Test Add Data



Response getDatasetJsonBeforePublishing = UtilIT.nativeGet(datasetId, apiToken);
getDatasetJsonBeforePublishing.prettyPrint();
String protocol = JsonPath.from(getDatasetJsonBeforePublishing.getBody().asString()).getString("data.protocol");
String authority = JsonPath.from(getDatasetJsonBeforePublishing.getBody().asString()).getString("data.authority");

String datasetPersistentId = protocol + ":" + authority + "/" + identifier;
String pathToJsonFile = "doc/sphinx-guides/source/_static/api/dataset-add-metadata.json";
Response addSubjectViaNative = UtilIT.addDatasetMetadataViaNative(datasetPersistentId, pathToJsonFile, apiToken);
addSubjectViaNative.prettyPrint();
addSubjectViaNative.then().assertThat()
.statusCode(OK.getStatusCode());



RestAssured.registerParser("text/plain", Parser.JSON);
Response exportDatasetAsJson = UtilIT.exportDataset(datasetPersistentId, "dataverse_json", apiToken);
exportDatasetAsJson.prettyPrint();

pathToJsonFile = "doc/sphinx-guides/source/_static/api/dataset-add-subject-metadata.json";
addSubjectViaNative = UtilIT.addDatasetMetadataViaNative(datasetPersistentId, pathToJsonFile, apiToken);
addSubjectViaNative.prettyPrint();
addSubjectViaNative.then().assertThat()
.statusCode(OK.getStatusCode()).body(containsString("Mathematical Sciences"));


String pathToJsonFileSingle = "doc/sphinx-guides/source/_static/api/dataset-simple-update-metadata.json";
Response addSubjectSingleViaNative = UtilIT.updateFieldLevelDatasetMetadataViaNative(datasetPersistentId, pathToJsonFileSingle, apiToken);
String responseString = addSubjectSingleViaNative.prettyPrint();
addSubjectSingleViaNative.then().assertThat()
.statusCode(OK.getStatusCode()).body(containsString("Mathematical Sciences")).body(containsString("Social Sciences"));


String pathToJsonFileSingleCvoc = "doc/sphinx-guides/source/_static/api/dataset-add-single-cvoc-field-metadata.json";
Response addSingleCvocViaNative = UtilIT.updateFieldLevelDatasetMetadataViaNative(datasetPersistentId, pathToJsonFileSingleCvoc, apiToken);
addSingleCvocViaNative.prettyPrint();
addSingleCvocViaNative.then().assertThat()
.statusCode(OK.getStatusCode());


String pathToJsonFileSingleCompound = "doc/sphinx-guides/source/_static/api/dataset-add-single-compound-field-metadata.json";
Response addSingleCompoundViaNative = UtilIT.updateFieldLevelDatasetMetadataViaNative(datasetPersistentId, pathToJsonFileSingleCompound, apiToken);
addSingleCompoundViaNative.prettyPrint();
addSingleCompoundViaNative.then().assertThat()
.statusCode(OK.getStatusCode());


//Trying to blank out required field should fail...
String pathToJsonFileBadData = "doc/sphinx-guides/source/_static/api/dataset-update-with-blank-metadata.json";
Response deleteTitleViaNative = UtilIT.updateFieldLevelDatasetMetadataViaNative(datasetPersistentId, pathToJsonFileBadData, apiToken);
Expand All @@ -446,7 +439,7 @@ public void testAddUpdateDatasetViaNativeAPI() {


Response publishDataverse = UtilIT.publishDataverseViaSword(dataverseAlias, apiToken);

Response publishDataset = UtilIT.publishDatasetViaNativeApi(datasetPersistentId, "major", apiToken);
assertEquals(200, publishDataset.getStatusCode());
UtilIT.sleepForLock(datasetPersistentId, "finalizePublication", apiToken, UtilIT.MAXIMUM_PUBLISH_LOCK_DURATION);
Expand All @@ -462,42 +455,42 @@ public void testAddUpdateDatasetViaNativeAPI() {
String pathToJsonFileBadDataSubtitle = "doc/sphinx-guides/source/_static/api/dataset-edit-metadata-subtitle.json";
Response addDataToBadData = UtilIT.updateFieldLevelDatasetMetadataViaNative(datasetPersistentId, pathToJsonFileBadDataSubtitle, apiToken);
addDataToBadData.prettyPrint();

addDataToBadData.then().assertThat()
.body("message", equalToCI("Error parsing dataset update: Invalid value submitted for Subtitle. It should be a single value."))
.statusCode(400);
addSubjectViaNative = UtilIT.addDatasetMetadataViaNative(datasetPersistentId, pathToJsonFile, apiToken);

addSubjectViaNative = UtilIT.addDatasetMetadataViaNative(datasetPersistentId, pathToJsonFile, apiToken);
addSubjectViaNative.prettyPrint();
addSubjectViaNative.then().assertThat()
.statusCode(OK.getStatusCode());
String pathToJsonDeleteFile = "doc/sphinx-guides/source/_static/api/dataset-delete-subject-metadata.json";

String pathToJsonDeleteFile = "doc/sphinx-guides/source/_static/api/dataset-delete-subject-metadata.json";
addSubjectViaNative = UtilIT.deleteDatasetMetadataViaNative(datasetPersistentId, pathToJsonDeleteFile, apiToken);
addSubjectViaNative.prettyPrint();
addSubjectViaNative.then().assertThat()
.statusCode(OK.getStatusCode());

pathToJsonDeleteFile = "doc/sphinx-guides/source/_static/api/dataset-delete-author-metadata.json";
addSubjectViaNative = UtilIT.deleteDatasetMetadataViaNative(datasetPersistentId, pathToJsonDeleteFile, apiToken);
addSubjectViaNative.prettyPrint();
addSubjectViaNative.then().assertThat()
.statusCode(OK.getStatusCode());

pathToJsonDeleteFile = "doc/sphinx-guides/source/_static/api/dataset-delete-author-no-match.json";
addSubjectViaNative = UtilIT.deleteDatasetMetadataViaNative(datasetPersistentId, pathToJsonDeleteFile, apiToken);
addSubjectViaNative.prettyPrint();
addSubjectViaNative.then().assertThat().body("message", equalTo("Delete metadata failed: Author: Spruce, Sabrina not found."))
.statusCode(400);

publishDataset = UtilIT.publishDatasetViaNativeApi(datasetPersistentId, "major", apiToken);
assertEquals(200, publishDataset.getStatusCode());
//6078
String pathToJsonFileEditPostPub = "doc/sphinx-guides/source/_static/api/dataset-edit-metadata-after-pub.json";
Response editPublishedVersion = UtilIT.updateFieldLevelDatasetMetadataViaNative(datasetPersistentId, pathToJsonFileEditPostPub, apiToken);
editPublishedVersion.prettyPrint();
editPublishedVersion.then().assertThat().statusCode(OK.getStatusCode());

publishDataset = UtilIT.publishDatasetViaNativeApi(datasetPersistentId, "major", apiToken);
//"Delete metadata failed: " + updateField.getDatasetFieldType().getDisplayName() + ": " + displayValue + " not found."

Expand Down Expand Up @@ -665,6 +658,24 @@ public void testAddUpdateDatasetViaNativeAPI() {
updateMetadataRemoveAlternativeTitles.then().assertThat()
.body("data.metadataBlocks.citation.fields[2].typeName", not(equalTo("alternativeTitle")))
.statusCode(OK.getStatusCode());

// Test sourceInternalVersionNumber optional query parameter

Integer internalVersionNumber = updateMetadataRemoveAlternativeTitles.then().extract().path("data.internalVersionNumber");
assertNotNull(internalVersionNumber);

// Case 1 - Pass outdated internal version number

Response updateMetadataWithOutdatedInternalVersionNumber = UtilIT.editVersionMetadataFromJsonStr(datasetPersistentId, jsonString, apiToken, internalVersionNumber - 1);
updateMetadataWithOutdatedInternalVersionNumber.then().assertThat()
.body("message", equalTo(BundleUtil.getStringFromBundle("abstractApiBean.error.datasetInternalVersionNumberIsOutdated", Collections.singletonList(Integer.toString(internalVersionNumber - 1)))))
.statusCode(BAD_REQUEST.getStatusCode());

// Case 2 - Pass latest internal version number

Response updateMetadataWithLatestInternalVersionNumber = UtilIT.editVersionMetadataFromJsonStr(datasetPersistentId, jsonString, apiToken, internalVersionNumber);
updateMetadataWithLatestInternalVersionNumber.then().assertThat()
.statusCode(OK.getStatusCode());
}

@Test
Expand Down
14 changes: 10 additions & 4 deletions src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -764,16 +764,22 @@ static Response deleteDatasetMetadataViaNative(String persistentId, String pathT

static Response updateFieldLevelDatasetMetadataViaNative(String persistentId, String pathToJsonFile, String apiToken) {
String jsonIn = getDatasetJson(pathToJsonFile);
return editVersionMetadataFromJsonStr(persistentId, jsonIn, apiToken);
return editVersionMetadataFromJsonStr(persistentId, jsonIn, apiToken, null);
}

static Response editVersionMetadataFromJsonStr(String persistentId, String jsonString, String apiToken) {
Response response = given()
return editVersionMetadataFromJsonStr(persistentId, jsonString, apiToken, null);
}

static Response editVersionMetadataFromJsonStr(String persistentId, String jsonString, String apiToken, Integer sourceInternalVersionNumber) {
return given()
.header(API_TOKEN_HTTP_HEADER, apiToken)
.body(jsonString)
.contentType("application/json")
.put("/api/datasets/:persistentId/editMetadata/?persistentId=" + persistentId + "&replace=true");
return response;
.put("/api/datasets/:persistentId/editMetadata/?persistentId="
+ persistentId
+ "&replace=true"
+ (sourceInternalVersionNumber != null ? "&sourceInternalVersionNumber=" + sourceInternalVersionNumber : ""));
}

static Response updateDatasetPIDMetadata(String persistentId, String apiToken) {
Expand Down

0 comments on commit 3902ef0

Please sign in to comment.