package edu.harvard.iq.dataverse.api;
import com.jayway.restassured.RestAssured;
import static com.jayway.restassured.RestAssured.given;
import com.jayway.restassured.response.Response;
import java.util.logging.Logger;
import org.junit.BeforeClass;
import org.junit.Test;
import com.jayway.restassured.path.json.JsonPath;
import java.util.List;
import java.util.Map;
import javax.json.JsonObject;
import static javax.ws.rs.core.Response.Status.CREATED;
import static javax.ws.rs.core.Response.Status.FORBIDDEN;
import static javax.ws.rs.core.Response.Status.OK;
import static javax.ws.rs.core.Response.Status.UNAUTHORIZED;
import static javax.ws.rs.core.Response.Status.NOT_FOUND;
import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
import static com.jayway.restassured.path.json.JsonPath.with;
import edu.harvard.iq.dataverse.DataFile;
import static edu.harvard.iq.dataverse.api.UtilIT.API_TOKEN_HTTP_HEADER;
import edu.harvard.iq.dataverse.authorization.DataverseRole;
import edu.harvard.iq.dataverse.authorization.users.PrivateUrlUser;
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
import java.util.UUID;
import static javax.ws.rs.core.Response.Status.NO_CONTENT;
import static junit.framework.Assert.assertEquals;
import org.hamcrest.CoreMatchers;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.nullValue;
public class DatasetsIT {
private static final Logger logger = Logger.getLogger(DatasetsIT.class.getCanonicalName());
@BeforeClass
public static void setUpClass() {
RestAssured.baseURI = UtilIT.getRestAssuredBaseUri();
}
@Test
public void testCreateDataset() {
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);
Response createDatasetResponse = UtilIT.createRandomDatasetViaNativeApi(dataverseAlias, apiToken);
createDatasetResponse.prettyPrint();
Integer datasetId = UtilIT.getDatasetIdFromResponse(createDatasetResponse);
Response deleteDatasetResponse = UtilIT.deleteDatasetViaNativeApi(datasetId, apiToken);
deleteDatasetResponse.prettyPrint();
assertEquals(200, deleteDatasetResponse.getStatusCode());
Response deleteDataverseResponse = UtilIT.deleteDataverse(dataverseAlias, apiToken);
deleteDataverseResponse.prettyPrint();
assertEquals(200, deleteDataverseResponse.getStatusCode());
Response deleteUserResponse = UtilIT.deleteUser(username);
deleteUserResponse.prettyPrint();
assertEquals(200, deleteUserResponse.getStatusCode());
}
/**
* This test requires the root dataverse to be published to pass.
*/
@Test
public void testCreatePublishDestroyDataset() {
Response createUser = UtilIT.createRandomUser();
createUser.prettyPrint();
assertEquals(200, createUser.getStatusCode());
String username = UtilIT.getUsernameFromResponse(createUser);
String apiToken = UtilIT.getApiTokenFromResponse(createUser);
Response makeSuperUser = UtilIT.makeSuperUser(username);
assertEquals(200, makeSuperUser.getStatusCode());
Response createDataverseResponse = UtilIT.createRandomDataverse(apiToken);
createDataverseResponse.prettyPrint();
String dataverseAlias = UtilIT.getAliasFromResponse(createDataverseResponse);
Response createDatasetResponse = UtilIT.createRandomDatasetViaNativeApi(dataverseAlias, apiToken);
createDatasetResponse.prettyPrint();
Integer datasetId = JsonPath.from(createDatasetResponse.body().asString()).getInt("data.id");
Response publishDataverse = UtilIT.publishDataverseViaSword(dataverseAlias, apiToken);
assertEquals(200, publishDataverse.getStatusCode());
Response publishDataset = UtilIT.publishDatasetViaNativeApi(datasetId, "major", apiToken);
assertEquals(200, publishDataset.getStatusCode());
Response deleteDatasetResponse = UtilIT.destroyDataset(datasetId, apiToken);
deleteDatasetResponse.prettyPrint();
assertEquals(200, deleteDatasetResponse.getStatusCode());
Response deleteDataverseResponse = UtilIT.deleteDataverse(dataverseAlias, apiToken);
deleteDataverseResponse.prettyPrint();
assertEquals(200, deleteDataverseResponse.getStatusCode());
Response deleteUserResponse = UtilIT.deleteUser(username);
deleteUserResponse.prettyPrint();
assertEquals(200, deleteUserResponse.getStatusCode());
}
@Test
public void testGetDdi() {
String persistentIdentifier = "FIXME";
String apiToken = "FIXME";
Response nonDto = getDatasetAsDdiNonDto(persistentIdentifier, apiToken);
nonDto.prettyPrint();
assertEquals(403, nonDto.getStatusCode());
Response dto = getDatasetAsDdiDto(persistentIdentifier, apiToken);
dto.prettyPrint();
assertEquals(403, dto.getStatusCode());
}
private Response getDatasetAsDdiNonDto(String persistentIdentifier, String apiToken) {
Response response = given()
.header(UtilIT.API_TOKEN_HTTP_HEADER, apiToken)
.get("/api/datasets/ddi?persistentId=" + persistentIdentifier);
return response;
}
private Response getDatasetAsDdiDto(String persistentIdentifier, String apiToken) {
Response response = given()
.header(UtilIT.API_TOKEN_HTTP_HEADER, apiToken)
.get("/api/datasets/ddi?persistentId=" + persistentIdentifier + "&dto=true");
return response;
}
/**
* This test requires the root dataverse to be published to pass.
*/
@Test
public void testPrivateUrl() {
Response createUser = UtilIT.createRandomUser();
// createUser.prettyPrint();
String username = UtilIT.getUsernameFromResponse(createUser);
String apiToken = UtilIT.getApiTokenFromResponse(createUser);
Response failToCreateWhenDatasetIdNotFound = UtilIT.privateUrlCreate(Integer.MAX_VALUE, apiToken);
failToCreateWhenDatasetIdNotFound.prettyPrint();
assertEquals(NOT_FOUND.getStatusCode(), failToCreateWhenDatasetIdNotFound.getStatusCode());
Response createDataverseResponse = UtilIT.createRandomDataverse(apiToken);
createDataverseResponse.prettyPrint();
String dataverseAlias = UtilIT.getAliasFromResponse(createDataverseResponse);
Response createDatasetResponse = UtilIT.createRandomDatasetViaNativeApi(dataverseAlias, apiToken);
createDatasetResponse.prettyPrint();
Integer datasetId = JsonPath.from(createDatasetResponse.body().asString()).getInt("data.id");
System.out.println("dataset id: " + datasetId);
Response createContributorResponse = UtilIT.createRandomUser();
String contributorUsername = UtilIT.getUsernameFromResponse(createContributorResponse);
String contributorApiToken = UtilIT.getApiTokenFromResponse(createContributorResponse);
UtilIT.getRoleAssignmentsOnDataverse(dataverseAlias, apiToken).prettyPrint();
Response grantRoleShouldFail = UtilIT.grantRoleOnDataverse(dataverseAlias, DataverseRole.EDITOR.toString(), "doesNotExist", apiToken);
grantRoleShouldFail.then().assertThat()
.statusCode(BAD_REQUEST.getStatusCode())
.body("message", equalTo("Assignee not found"));
/**
* editor (a.k.a. Contributor) has "ViewUnpublishedDataset",
* "EditDataset", "DownloadFile", and "DeleteDatasetDraft" per
* scripts/api/data/role-editor.json
*/
Response grantRole = UtilIT.grantRoleOnDataverse(dataverseAlias, DataverseRole.EDITOR.toString(), "@" + contributorUsername, apiToken);
grantRole.prettyPrint();
assertEquals(OK.getStatusCode(), grantRole.getStatusCode());
UtilIT.getRoleAssignmentsOnDataverse(dataverseAlias, apiToken).prettyPrint();
Response contributorDoesNotHavePermissionToCreatePrivateUrl = UtilIT.privateUrlCreate(datasetId, contributorApiToken);
contributorDoesNotHavePermissionToCreatePrivateUrl.prettyPrint();
assertEquals(UNAUTHORIZED.getStatusCode(), contributorDoesNotHavePermissionToCreatePrivateUrl.getStatusCode());
Response getDatasetJson = UtilIT.nativeGet(datasetId, apiToken);
getDatasetJson.prettyPrint();
String protocol1 = JsonPath.from(getDatasetJson.getBody().asString()).getString("data.protocol");
String authority1 = JsonPath.from(getDatasetJson.getBody().asString()).getString("data.authority");
String identifier1 = JsonPath.from(getDatasetJson.getBody().asString()).getString("data.identifier");
String dataset1PersistentId = protocol1 + ":" + authority1 + "/" + identifier1;
Response uploadFileResponse = UtilIT.uploadRandomFile(dataset1PersistentId, apiToken);
uploadFileResponse.prettyPrint();
assertEquals(CREATED.getStatusCode(), uploadFileResponse.getStatusCode());
Response badApiKeyEmptyString = UtilIT.privateUrlGet(datasetId, "");
badApiKeyEmptyString.prettyPrint();
assertEquals(UNAUTHORIZED.getStatusCode(), badApiKeyEmptyString.getStatusCode());
Response badApiKeyDoesNotExist = UtilIT.privateUrlGet(datasetId, "junk");
badApiKeyDoesNotExist.prettyPrint();
assertEquals(UNAUTHORIZED.getStatusCode(), badApiKeyDoesNotExist.getStatusCode());
Response badDatasetId = UtilIT.privateUrlGet(Integer.MAX_VALUE, apiToken);
badDatasetId.prettyPrint();
assertEquals(NOT_FOUND.getStatusCode(), badDatasetId.getStatusCode());
Response pristine = UtilIT.privateUrlGet(datasetId, apiToken);
pristine.prettyPrint();
assertEquals(NOT_FOUND.getStatusCode(), pristine.getStatusCode());
Response createPrivateUrl = UtilIT.privateUrlCreate(datasetId, apiToken);
createPrivateUrl.prettyPrint();
assertEquals(OK.getStatusCode(), createPrivateUrl.getStatusCode());
Response userWithNoRoles = UtilIT.createRandomUser();
String userWithNoRolesApiToken = UtilIT.getApiTokenFromResponse(userWithNoRoles);
Response unAuth = UtilIT.privateUrlGet(datasetId, userWithNoRolesApiToken);
unAuth.prettyPrint();
assertEquals(UNAUTHORIZED.getStatusCode(), unAuth.getStatusCode());
Response shouldExist = UtilIT.privateUrlGet(datasetId, apiToken);
shouldExist.prettyPrint();
assertEquals(OK.getStatusCode(), shouldExist.getStatusCode());
String tokenForPrivateUrlUser = JsonPath.from(shouldExist.body().asString()).getString("data.token");
logger.info("privateUrlToken: " + tokenForPrivateUrlUser);
String urlWithToken = JsonPath.from(shouldExist.body().asString()).getString("data.link");
logger.info("URL with token: " + urlWithToken);
assertEquals(tokenForPrivateUrlUser, urlWithToken.substring(urlWithToken.length() - UUID.randomUUID().toString().length()));
Response getDatasetAsUserWhoClicksPrivateUrl = given()
.header(API_TOKEN_HTTP_HEADER, apiToken)
.get(urlWithToken);
String title = getDatasetAsUserWhoClicksPrivateUrl.getBody().htmlPath().getString("html.head.title");
assertEquals("Darwin's Finches - " + dataverseAlias + " Dataverse", title);
assertEquals(OK.getStatusCode(), getDatasetAsUserWhoClicksPrivateUrl.getStatusCode());
Response junkPrivateUrlToken = given()
.header(API_TOKEN_HTTP_HEADER, apiToken)
.get("/privateurl.xhtml?token=" + "junk");
assertEquals("404 Not Found", junkPrivateUrlToken.getBody().htmlPath().getString("html.head.title").substring(0, 13));
long roleAssignmentIdFromCreate = JsonPath.from(createPrivateUrl.body().asString()).getLong("data.roleAssignment.id");
logger.info("roleAssignmentIdFromCreate: " + roleAssignmentIdFromCreate);
Response badAnonLinkTokenEmptyString = UtilIT.nativeGet(datasetId, "");
badAnonLinkTokenEmptyString.prettyPrint();
assertEquals(UNAUTHORIZED.getStatusCode(), badAnonLinkTokenEmptyString.getStatusCode());
Response getWithPrivateUrlToken = UtilIT.nativeGet(datasetId, tokenForPrivateUrlUser);
assertEquals(OK.getStatusCode(), getWithPrivateUrlToken.getStatusCode());
// getWithPrivateUrlToken.prettyPrint();
logger.info("http://localhost:8080/privateurl.xhtml?token=" + tokenForPrivateUrlUser);
Response swordStatement = UtilIT.getSwordStatement(dataset1PersistentId, apiToken);
assertEquals(OK.getStatusCode(), swordStatement.getStatusCode());
Integer fileId = UtilIT.getFileIdFromSwordStatementResponse(swordStatement);
Response downloadFile = UtilIT.downloadFile(fileId, tokenForPrivateUrlUser);
assertEquals(OK.getStatusCode(), downloadFile.getStatusCode());
Response downloadFileBadToken = UtilIT.downloadFile(fileId, "junk");
assertEquals(FORBIDDEN.getStatusCode(), downloadFileBadToken.getStatusCode());
Response notPermittedToListRoleAssignment = UtilIT.getRoleAssignmentsOnDataset(datasetId.toString(), null, userWithNoRolesApiToken);
assertEquals(UNAUTHORIZED.getStatusCode(), notPermittedToListRoleAssignment.getStatusCode());
Response roleAssignments = UtilIT.getRoleAssignmentsOnDataset(datasetId.toString(), null, apiToken);
roleAssignments.prettyPrint();
assertEquals(OK.getStatusCode(), roleAssignments.getStatusCode());
List<JsonObject> assignments = with(roleAssignments.body().asString()).param("member", "member").getJsonObject("data.findAll { data -> data._roleAlias == member }");
assertEquals(1, assignments.size());
PrivateUrlUser privateUrlUser = new PrivateUrlUser(datasetId);
assertEquals("Private URL Enabled", privateUrlUser.getDisplayInfo().getTitle());
List<JsonObject> assigneeShouldExistForPrivateUrlUser = with(roleAssignments.body().asString()).param("assigneeString", privateUrlUser.getIdentifier()).getJsonObject("data.findAll { data -> data.assignee == assigneeString }");
logger.info(assigneeShouldExistForPrivateUrlUser + " found for " + privateUrlUser.getIdentifier());
assertEquals(1, assigneeShouldExistForPrivateUrlUser.size());
Map roleAssignment = assignments.get(0);
int roleAssignmentId = (int) roleAssignment.get("id");
logger.info("role assignment id: " + roleAssignmentId);
assertEquals(roleAssignmentIdFromCreate, roleAssignmentId);
Response revoke = UtilIT.revokeRole(dataverseAlias, roleAssignmentId, apiToken);
revoke.prettyPrint();
assertEquals(OK.getStatusCode(), revoke.getStatusCode());
Response shouldNoLongerExist = UtilIT.privateUrlGet(datasetId, apiToken);
shouldNoLongerExist.prettyPrint();
assertEquals(NOT_FOUND.getStatusCode(), shouldNoLongerExist.getStatusCode());
Response createPrivateUrlUnauth = UtilIT.privateUrlCreate(datasetId, userWithNoRolesApiToken);
createPrivateUrlUnauth.prettyPrint();
assertEquals(UNAUTHORIZED.getStatusCode(), createPrivateUrlUnauth.getStatusCode());
Response createPrivateUrlAgain = UtilIT.privateUrlCreate(datasetId, apiToken);
createPrivateUrlAgain.prettyPrint();
assertEquals(OK.getStatusCode(), createPrivateUrlAgain.getStatusCode());
Response shouldNotDeletePrivateUrl = UtilIT.privateUrlDelete(datasetId, userWithNoRolesApiToken);
shouldNotDeletePrivateUrl.prettyPrint();
assertEquals(UNAUTHORIZED.getStatusCode(), shouldNotDeletePrivateUrl.getStatusCode());
Response deletePrivateUrlResponse = UtilIT.privateUrlDelete(datasetId, apiToken);
deletePrivateUrlResponse.prettyPrint();
assertEquals(OK.getStatusCode(), deletePrivateUrlResponse.getStatusCode());
Response tryToDeleteAlreadyDeletedPrivateUrl = UtilIT.privateUrlDelete(datasetId, apiToken);
tryToDeleteAlreadyDeletedPrivateUrl.prettyPrint();
assertEquals(NOT_FOUND.getStatusCode(), tryToDeleteAlreadyDeletedPrivateUrl.getStatusCode());
Response createPrivateUrlOnceAgain = UtilIT.privateUrlCreate(datasetId, apiToken);
createPrivateUrlOnceAgain.prettyPrint();
assertEquals(OK.getStatusCode(), createPrivateUrlOnceAgain.getStatusCode());
Response tryToCreatePrivateUrlWhenExisting = UtilIT.privateUrlCreate(datasetId, apiToken);
tryToCreatePrivateUrlWhenExisting.prettyPrint();
assertEquals(FORBIDDEN.getStatusCode(), tryToCreatePrivateUrlWhenExisting.getStatusCode());
Response publishDataverse = UtilIT.publishDataverseViaSword(dataverseAlias, apiToken);
assertEquals(OK.getStatusCode(), publishDataverse.getStatusCode());
Response publishDataset = UtilIT.publishDatasetViaSword(dataset1PersistentId, apiToken);
assertEquals(OK.getStatusCode(), publishDataset.getStatusCode());
Response privateUrlTokenShouldBeDeletedOnPublish = UtilIT.privateUrlGet(datasetId, apiToken);
privateUrlTokenShouldBeDeletedOnPublish.prettyPrint();
assertEquals(NOT_FOUND.getStatusCode(), privateUrlTokenShouldBeDeletedOnPublish.getStatusCode());
Response getRoleAssignmentsOnDatasetShouldFailUnauthorized = UtilIT.getRoleAssignmentsOnDataset(datasetId.toString(), null, userWithNoRolesApiToken);
assertEquals(UNAUTHORIZED.getStatusCode(), getRoleAssignmentsOnDatasetShouldFailUnauthorized.getStatusCode());
Response publishingShouldHaveRemovedRoleAssignmentForPrivateUrlUser = UtilIT.getRoleAssignmentsOnDataset(datasetId.toString(), null, apiToken);
publishingShouldHaveRemovedRoleAssignmentForPrivateUrlUser.prettyPrint();
List<JsonObject> noAssignmentsForPrivateUrlUser = with(publishingShouldHaveRemovedRoleAssignmentForPrivateUrlUser.body().asString()).param("member", "member").getJsonObject("data.findAll { data -> data._roleAlias == member }");
assertEquals(0, noAssignmentsForPrivateUrlUser.size());
Response tryToCreatePrivateUrlToPublishedVersion = UtilIT.privateUrlCreate(datasetId, apiToken);
tryToCreatePrivateUrlToPublishedVersion.prettyPrint();
assertEquals(FORBIDDEN.getStatusCode(), tryToCreatePrivateUrlToPublishedVersion.getStatusCode());
String newTitle = "I am changing the title";
Response updatedMetadataResponse = UtilIT.updateDatasetTitleViaSword(dataset1PersistentId, newTitle, apiToken);
updatedMetadataResponse.prettyPrint();
assertEquals(OK.getStatusCode(), updatedMetadataResponse.getStatusCode());
Response createPrivateUrlForPostVersionOneDraft = UtilIT.privateUrlCreate(datasetId, apiToken);
createPrivateUrlForPostVersionOneDraft.prettyPrint();
assertEquals(OK.getStatusCode(), createPrivateUrlForPostVersionOneDraft.getStatusCode());
// A Contributor has DeleteDatasetDraft
Response deleteDraftVersionAsContributor = UtilIT.deleteDatasetVersionViaNativeApi(datasetId, ":draft", contributorApiToken);
deleteDraftVersionAsContributor.prettyPrint();
deleteDraftVersionAsContributor.then().assertThat()
.statusCode(OK.getStatusCode())
.body("data.message", equalTo("Draft version of dataset " + datasetId + " deleted"));
Response privateUrlRoleAssignmentShouldBeGoneAfterDraftDeleted = UtilIT.getRoleAssignmentsOnDataset(datasetId.toString(), null, apiToken);
privateUrlRoleAssignmentShouldBeGoneAfterDraftDeleted.prettyPrint();
assertEquals(false, privateUrlRoleAssignmentShouldBeGoneAfterDraftDeleted.body().asString().contains(privateUrlUser.getIdentifier()));
String newTitleAgain = "I am changing the title again";
Response draftCreatedAgainPostPub = UtilIT.updateDatasetTitleViaSword(dataset1PersistentId, newTitleAgain, apiToken);
draftCreatedAgainPostPub.prettyPrint();
assertEquals(OK.getStatusCode(), draftCreatedAgainPostPub.getStatusCode());
/**
* Making sure the Private URL is deleted when a dataset is destroyed is
* less of an issue now that a Private URL is now effectively only a
* specialized role assignment which is already known to be deleted when
* a dataset is destroy. Still, we'll keep this test in here in case we
* switch Private URL back to being its own table in the future.
*/
Response createPrivateUrlToMakeSureItIsDeletedWithDestructionOfDataset = UtilIT.privateUrlCreate(datasetId, apiToken);
createPrivateUrlToMakeSureItIsDeletedWithDestructionOfDataset.prettyPrint();
assertEquals(OK.getStatusCode(), createPrivateUrlToMakeSureItIsDeletedWithDestructionOfDataset.getStatusCode());
/**
* @todo What about deaccessioning? We can't test deaccessioning via API
* until https://github.com/IQSS/dataverse/issues/778 is worked on. If
* you deaccession a dataset, is the Private URL deleted? Probably not
* because in order to create a Private URL the dataset version must be
* a draft and for that draft to be deaccessioned it must be published
* first and publishing a version will delete the Private URL. So, we
* shouldn't need to worry about cleaning up Private URLs in the case of
* deaccessioning.
*/
Response makeSuperUser = UtilIT.makeSuperUser(username);
assertEquals(200, makeSuperUser.getStatusCode());
Response destroyDatasetResponse = UtilIT.destroyDataset(datasetId, apiToken);
destroyDatasetResponse.prettyPrint();
assertEquals(200, destroyDatasetResponse.getStatusCode());
Response deleteDataverseResponse = UtilIT.deleteDataverse(dataverseAlias, apiToken);
deleteDataverseResponse.prettyPrint();
assertEquals(200, deleteDataverseResponse.getStatusCode());
Response deleteUserResponse = UtilIT.deleteUser(username);
deleteUserResponse.prettyPrint();
assertEquals(200, deleteUserResponse.getStatusCode());
/**
* @todo Should the Search API work with the Private URL token?
*/
}
@Test
public void testFileChecksum() {
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);
Response createDatasetResponse = UtilIT.createRandomDatasetViaNativeApi(dataverseAlias, apiToken);
createDatasetResponse.prettyPrint();
Integer datasetId = JsonPath.from(createDatasetResponse.body().asString()).getInt("data.id");
System.out.println("dataset id: " + datasetId);
Response getDatasetJsonNoFiles = UtilIT.nativeGet(datasetId, apiToken);
getDatasetJsonNoFiles.prettyPrint();
String protocol1 = JsonPath.from(getDatasetJsonNoFiles.getBody().asString()).getString("data.protocol");
String authority1 = JsonPath.from(getDatasetJsonNoFiles.getBody().asString()).getString("data.authority");
String identifier1 = JsonPath.from(getDatasetJsonNoFiles.getBody().asString()).getString("data.identifier");
String dataset1PersistentId = protocol1 + ":" + authority1 + "/" + identifier1;
Response makeSureSettingIsDefault = UtilIT.deleteSetting(SettingsServiceBean.Key.FileFixityChecksumAlgorithm);
makeSureSettingIsDefault.prettyPrint();
makeSureSettingIsDefault.then().assertThat()
.statusCode(OK.getStatusCode())
.body("data.message", equalTo("Setting :FileFixityChecksumAlgorithm deleted."));
Response getDefaultSetting = UtilIT.getSetting(SettingsServiceBean.Key.FileFixityChecksumAlgorithm);
getDefaultSetting.prettyPrint();
getDefaultSetting.then().assertThat()
.body("message", equalTo("Setting :FileFixityChecksumAlgorithm not found"));
Response uploadMd5File = UtilIT.uploadRandomFile(dataset1PersistentId, apiToken);
uploadMd5File.prettyPrint();
assertEquals(CREATED.getStatusCode(), uploadMd5File.getStatusCode());
Response getDatasetJsonAfterMd5File = UtilIT.nativeGet(datasetId, apiToken);
getDatasetJsonAfterMd5File.prettyPrint();
getDatasetJsonAfterMd5File.then().assertThat()
.body("data.latestVersion.files[0].dataFile.md5", equalTo("0386269a5acb2c57b4eade587ff4db64"))
.body("data.latestVersion.files[0].dataFile.checksum.type", equalTo("MD5"))
.body("data.latestVersion.files[0].dataFile.checksum.value", equalTo("0386269a5acb2c57b4eade587ff4db64"));
int fileId = JsonPath.from(getDatasetJsonAfterMd5File.getBody().asString()).getInt("data.latestVersion.files[0].dataFile.id");
Response deleteFile = UtilIT.deleteFile(fileId, apiToken);
deleteFile.prettyPrint();
deleteFile.then().assertThat()
.statusCode(NO_CONTENT.getStatusCode());
Response setToSha1 = UtilIT.setSetting(SettingsServiceBean.Key.FileFixityChecksumAlgorithm, DataFile.ChecksumType.SHA1.toString());
setToSha1.prettyPrint();
setToSha1.then().assertThat()
.statusCode(OK.getStatusCode());
Response getNonDefaultSetting = UtilIT.getSetting(SettingsServiceBean.Key.FileFixityChecksumAlgorithm);
getNonDefaultSetting.prettyPrint();
getNonDefaultSetting.then().assertThat()
.body("data.message", equalTo("SHA-1"))
.statusCode(OK.getStatusCode());
Response uploadSha1File = UtilIT.uploadRandomFile(dataset1PersistentId, apiToken);
uploadSha1File.prettyPrint();
assertEquals(CREATED.getStatusCode(), uploadSha1File.getStatusCode());
Response getDatasetJsonAfterSha1File = UtilIT.nativeGet(datasetId, apiToken);
getDatasetJsonAfterSha1File.prettyPrint();
getDatasetJsonAfterSha1File.then().assertThat()
.body("data.latestVersion.files[0].dataFile.md5", nullValue())
.body("data.latestVersion.files[0].dataFile.checksum.type", equalTo("SHA-1"))
.body("data.latestVersion.files[0].dataFile.checksum.value", equalTo("17ea9225aa0e96ae6ff61c256237d6add6c197d1"))
.statusCode(OK.getStatusCode());
}
}