Skip to content

Commit

Permalink
Added: canDataFileBeDownloaded API endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
GPortas committed Jul 7, 2023
1 parent 886a508 commit 6ead834
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 2 deletions.
15 changes: 13 additions & 2 deletions src/main/java/edu/harvard/iq/dataverse/api/Files.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import edu.harvard.iq.dataverse.DataverseRequestServiceBean;
import edu.harvard.iq.dataverse.DataverseServiceBean;
import edu.harvard.iq.dataverse.EjbDataverseEngine;
import edu.harvard.iq.dataverse.FileDownloadServiceBean;
import edu.harvard.iq.dataverse.FileMetadata;
import edu.harvard.iq.dataverse.GuestbookResponseServiceBean;
import edu.harvard.iq.dataverse.TermsOfUseAndAccessValidator;
Expand Down Expand Up @@ -106,6 +107,9 @@ public class Files extends AbstractApiBean {
@Inject
GuestbookResponseServiceBean guestbookResponseService;

@Inject
FileDownloadServiceBean fileDownloadServiceBean;

private static final Logger logger = Logger.getLogger(Files.class.getName());


Expand Down Expand Up @@ -824,11 +828,18 @@ public Response getFixityAlgorithm() {

@GET
@Path("{id}/guestbookResponses/count")
public Response getCountGuestbookResponsesByDataFileId(@PathParam("id") String dataFileId) {
public Response getCountGuestbookResponsesByDataFileId(@PathParam("id") long dataFileId) {
try {
return ok(guestbookResponseService.getCountGuestbookResponsesByDataFileId(Long.parseLong(dataFileId)).toString());
return ok(guestbookResponseService.getCountGuestbookResponsesByDataFileId(dataFileId).toString());
} catch (NumberFormatException nfe) {
return badRequest("File identifier has to be numeric.");
}
}

@GET
@AuthRequired
@Path("{id}/canBeDownloaded")
public Response canDataFileBeDownloaded(@Context ContainerRequestContext crc, @PathParam("id") long dataFileId) {
return ok(fileDownloadServiceBean.canDownloadFile(getRequestUser(crc), fileSvc.find(dataFileId).getFileMetadata()));
}
}
32 changes: 32 additions & 0 deletions src/test/java/edu/harvard/iq/dataverse/api/FilesIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -2054,4 +2054,36 @@ public void testGetCountGuestbookResponsesByDataFileId() {
.statusCode(OK.getStatusCode())
.body("data.message", equalTo("1"));
}

@Test
public void testCanDataFileBeDownloaded() {
Response createUser = UtilIT.createRandomUser();
createUser.then().assertThat().statusCode(OK.getStatusCode());
String apiToken = UtilIT.getApiTokenFromResponse(createUser);

Response createDataverseResponse = UtilIT.createRandomDataverse(apiToken);
createDataverseResponse.then().assertThat().statusCode(CREATED.getStatusCode());
String dataverseAlias = UtilIT.getAliasFromResponse(createDataverseResponse);

Response createDatasetResponse = UtilIT.createRandomDatasetViaNativeApi(dataverseAlias, apiToken);
createDatasetResponse.then().assertThat().statusCode(CREATED.getStatusCode());
Integer datasetId = JsonPath.from(createDatasetResponse.body().asString()).getInt("data.id");

// Upload test file
String pathToTestFile = "src/main/webapp/resources/images/dataverseproject.png";
Response uploadResponse = UtilIT.uploadFileViaNative(datasetId.toString(), pathToTestFile, Json.createObjectBuilder().build(), apiToken);
uploadResponse.then().assertThat().statusCode(OK.getStatusCode());

// Publish collection and dataset
UtilIT.publishDataverseViaNativeApi(dataverseAlias, apiToken).then().assertThat().statusCode(OK.getStatusCode());
UtilIT.publishDatasetViaNativeApi(datasetId, "major", apiToken).then().assertThat().statusCode(OK.getStatusCode());

// Assert user can download test file
Integer testFileId = JsonPath.from(uploadResponse.body().asString()).getInt("data.files[0].dataFile.id");
Response canDataFileBeDownloadedResponse = UtilIT.canDataFileBeDownloaded(testFileId, apiToken);

canDataFileBeDownloadedResponse.then().assertThat().statusCode(OK.getStatusCode());
boolean canDownloadTestFile = JsonPath.from(canDataFileBeDownloadedResponse.body().asString()).getBoolean("data");
assertTrue(canDownloadTestFile);
}
}
6 changes: 6 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 @@ -3275,4 +3275,10 @@ static Response getCountGuestbookResponsesByDataFileId(Integer dataFileId, Strin
.header(API_TOKEN_HTTP_HEADER, apiToken)
.get("/api/files/" + dataFileId + "/guestbookResponses/count");
}

static Response canDataFileBeDownloaded(Integer dataFileId, String apiToken) {
return given()
.header(API_TOKEN_HTTP_HEADER, apiToken)
.get("/api/files/" + dataFileId + "/canBeDownloaded");
}
}

0 comments on commit 6ead834

Please sign in to comment.