Skip to content

Commit

Permalink
stub out API for uploading and validating prov file #4343
Browse files Browse the repository at this point in the history
  • Loading branch information
pdurbin committed Dec 7, 2017
1 parent 2c2d9c8 commit cc09abf
Show file tree
Hide file tree
Showing 3 changed files with 121 additions and 0 deletions.
34 changes: 34 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/api/ProvApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package edu.harvard.iq.dataverse.api;

import java.io.StringReader;
import javax.json.Json;
import javax.json.JsonException;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;

@Path("files")
public class ProvApi extends AbstractApiBean {

@POST
@Path("{id}/prov")
@Consumes("application/json")
public Response addProvFile(String body, @PathParam("id") Long idSupplied) {
// TODO: Permissions.
// TODO: Save prov file to filesystem/S3.
StringReader rdr = new StringReader(body);
try {
JsonObject jsonObj = Json.createReader(rdr).readObject();
} catch (JsonException ex) {
return error(Response.Status.BAD_REQUEST, "A valid JSON object could not be found.");
}
JsonObjectBuilder response = Json.createObjectBuilder();
response.add("message", "A valid JSON object was uploaded.");
return ok(response);
}

}
68 changes: 68 additions & 0 deletions src/test/java/edu/harvard/iq/dataverse/api/ProvApiIT.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package edu.harvard.iq.dataverse.api;

import com.jayway.restassured.RestAssured;
import com.jayway.restassured.response.Response;
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonObject;
import static javax.ws.rs.core.Response.Status.CREATED;
import static javax.ws.rs.core.Response.Status.OK;
import static org.hamcrest.CoreMatchers.equalTo;
import org.junit.BeforeClass;
import org.junit.Test;

public class ProvApiIT {

@BeforeClass
public static void setUpClass() {
RestAssured.baseURI = UtilIT.getRestAssuredBaseUri();
}

@Test
public void testAddProvFile() {

Response createDepositor = UtilIT.createRandomUser();
createDepositor.prettyPrint();
createDepositor.then().assertThat()
.statusCode(OK.getStatusCode());
String usernameForDepositor = UtilIT.getUsernameFromResponse(createDepositor);
String apiTokenForDepositor = UtilIT.getApiTokenFromResponse(createDepositor);

Response createDataverseResponse = UtilIT.createRandomDataverse(apiTokenForDepositor);
createDataverseResponse.prettyPrint();
createDataverseResponse.then().assertThat()
.statusCode(CREATED.getStatusCode());

String dataverseAlias = UtilIT.getAliasFromResponse(createDataverseResponse);

Response createDataset = UtilIT.createRandomDatasetViaNativeApi(dataverseAlias, apiTokenForDepositor);
createDataset.prettyPrint();
createDataset.then().assertThat()
.statusCode(CREATED.getStatusCode());

Integer datasetId = UtilIT.getDatasetIdFromResponse(createDataset);

String pathToFile = "src/main/webapp/resources/images/dataverseproject.png";
Response authorAddsFile = UtilIT.uploadFileViaNative(datasetId.toString(), pathToFile, apiTokenForDepositor);
authorAddsFile.prettyPrint();
authorAddsFile.then().assertThat()
.body("status", equalTo("OK"))
.body("data.files[0].label", equalTo("dataverseproject.png"))
.statusCode(OK.getStatusCode());

// TODO: Test that an array fails
JsonArray provBadDueToBeingAnArray = Json.createArrayBuilder().add("bad").build();

JsonObject provGood = Json.createObjectBuilder()
.add("prov", true)
.add("foo", "bar")
.build();
Response uploadProv = UtilIT.uploadProv(datasetId.toString(), provGood, apiTokenForDepositor);
uploadProv.prettyPrint();
uploadProv.then().assertThat()
.body("data.message", equalTo("A valid JSON object was uploaded."))
.statusCode(OK.getStatusCode());

}

}
19 changes: 19 additions & 0 deletions src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -890,6 +890,25 @@ static Response removeDatasetThumbnail(String datasetPersistentId, String apiTok
.delete("/api/datasets/:persistentId/thumbnail" + "?persistentId=" + datasetPersistentId);
}

static Response uploadProv(String idOrPersistentId, JsonObject jsonObject, String apiToken) {
String idInPath = idOrPersistentId; // Assume it's a number.
String optionalQueryParam = ""; // If idOrPersistentId is a number we'll just put it in the path.
if (!NumberUtils.isNumber(idOrPersistentId)) {
idInPath = ":persistentId";
optionalQueryParam = "?persistentId=" + idOrPersistentId;
}
RequestSpecification requestSpecification = given();
if (apiToken != null) {
requestSpecification = given()
.header(UtilIT.API_TOKEN_HTTP_HEADER, apiToken)
// This "[]" is here to quickly test that a JSON array is considered invalid.
//.body("[]")
.body(jsonObject.toString())
.contentType("application/json");
}
return requestSpecification.post("/api/files/" + idInPath + "/prov" + optionalQueryParam);
}

static Response exportDataset(String datasetPersistentId, String exporter, String apiToken) {
// http://localhost:8080/api/datasets/export?exporter=dataverse_json&persistentId=doi%3A10.5072/FK2/W6WIMQ
return given()
Expand Down

0 comments on commit cc09abf

Please sign in to comment.