Skip to content

Commit 353e279

Browse files
committed
Added integration tests for RestrictFileCommand #3776
1 parent 8c8e3b0 commit 353e279

6 files changed

Lines changed: 139 additions & 12 deletions

File tree

doc/sphinx-guides/source/installation/config.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -792,7 +792,7 @@ Setting an installation to public indicates the admin will not be able to restri
792792
This is useful for specific cases where files are stored in public access, therefore removing the need for restrictions.
793793

794794
``curl -X PUT -d true http://localhost:8080/api/admin/settings/:PublicInstall``
795-
=======
795+
796796
:DataCaptureModuleUrl
797797
+++++++++++++++++++++
798798

src/main/java/edu/harvard/iq/dataverse/datasetutility/AddReplaceFileHelper.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
2020
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
2121
import edu.harvard.iq.dataverse.engine.command.impl.CreateDatasetCommand;
22+
import edu.harvard.iq.dataverse.engine.command.impl.RestrictFileCommand;
2223
import edu.harvard.iq.dataverse.engine.command.impl.UpdateDatasetCommand;
2324
import edu.harvard.iq.dataverse.ingest.IngestServiceBean;
2425
import edu.harvard.iq.dataverse.util.BundleUtil;
@@ -1378,10 +1379,19 @@ private boolean step_055_loadOptionalFileParams(OptionalFileParams optionalFileP
13781379
for (DataFile df : finalFileList){
13791380
try {
13801381
optionalFileParams.addOptionalParams(df);
1382+
1383+
// call restriction command here
1384+
boolean restrict = optionalFileParams.getRestriction();
1385+
if (restrict != df.getFileMetadata().isRestricted()) {
1386+
commandEngine.submit(new RestrictFileCommand(df, dvRequest, restrict));
1387+
}
1388+
13811389
} catch (DataFileTagException ex) {
13821390
Logger.getLogger(AddReplaceFileHelper.class.getName()).log(Level.SEVERE, null, ex);
13831391
addError(ex.getMessage());
13841392
return false;
1393+
} catch (CommandException ex) {
1394+
addError(ex.getMessage());
13851395
}
13861396
}
13871397

src/main/java/edu/harvard/iq/dataverse/datasetutility/OptionalFileParams.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -294,14 +294,6 @@ public void addOptionalParams(DataFile df) throws DataFileTagException{
294294
fm.setDescription(this.getDescription());
295295
}
296296

297-
// ---------------------------
298-
// Add restriction
299-
// ---------------------------
300-
if (restrict != fm.isRestricted()) {
301-
fm.setRestricted(restrict);
302-
//since this is a new file, we must also set the restriction on the datafile
303-
fm.getDataFile().setRestricted(restrict);
304-
}
305297

306298
// ---------------------------
307299
// Add categories

src/main/java/edu/harvard/iq/dataverse/engine/command/impl/RestrictFileCommand.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
@RequiredPermissions(Permission.EditDataset)
3232
public class RestrictFileCommand extends AbstractVoidCommand {
33-
//private static final Logger logger = Logger.getLogger(RestrictFileCommand.class.getCanonicalName());
33+
private static final Logger logger = Logger.getLogger(RestrictFileCommand.class.getCanonicalName());
3434

3535
private final DataFile file;
3636
private final boolean restrict;
@@ -47,10 +47,11 @@ protected void executeImpl(CommandContext ctxt) throws CommandException {
4747
boolean defaultValue = false;
4848
boolean publicInstall = ctxt.settings().isTrueForKey(SettingsServiceBean.Key.PublicInstall, defaultValue);
4949

50+
logger.info("Using restrict file command");
51+
5052
if (publicInstall) {
5153
throw new CommandExecutionException("Restricting files is not permitted on a public installation.", this);
5254
}
53-
5455
if (file.getOwner() == null){
5556
// this is a new file through upload, restrict
5657
file.getFileMetadata().setRestricted(restrict);

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

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.junit.BeforeClass;
77
import org.junit.Test;
88
import com.jayway.restassured.path.json.JsonPath;
9+
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
910
import edu.harvard.iq.dataverse.util.BundleUtil;
1011
import static java.lang.Thread.sleep;
1112
import java.util.Arrays;
@@ -846,6 +847,121 @@ public void testAddTinyFile() {
846847
.statusCode(OK.getStatusCode());
847848
}
848849

850+
@Test
851+
public void testRestrictFile() {
852+
msgt("testRestrictFile");
853+
854+
//get publicInstall setting so we can change it back
855+
Response publicInstallResponse = UtilIT.getSetting(SettingsServiceBean.Key.PublicInstall);
856+
//TODO: fix this its a little hacky
857+
String publicInstall = String.valueOf(publicInstallResponse.getBody().asString().contains("true"));
858+
859+
// make sure this is not a public installation
860+
UtilIT.setSetting(SettingsServiceBean.Key.PublicInstall, "false");
861+
862+
// Set restrict to true
863+
boolean restrict = true;
864+
// Create user
865+
String apiToken = createUserGetToken();
866+
867+
// Create Dataverse
868+
String dataverseAlias = createDataverseGetAlias(apiToken);
869+
870+
// Create Dataset
871+
Integer datasetId = createDatasetGetId(dataverseAlias, apiToken);
872+
873+
// -------------------------
874+
// Add initial file
875+
// -------------------------
876+
msg("Add initial file");
877+
String pathToFile = "src/main/webapp/resources/images/favicondataverse.png";
878+
Response addResponse = UtilIT.uploadFileViaNative(datasetId.toString(), pathToFile, apiToken);
879+
880+
String successMsgAdd = ResourceBundle.getBundle("Bundle").getString("file.addreplace.success.add");
881+
882+
addResponse.then().assertThat()
883+
.body("data.files[0].dataFile.contentType", equalTo("image/png"))
884+
.body("data.files[0].label", equalTo("favicondataverse.png"))
885+
.statusCode(OK.getStatusCode());
886+
887+
long origFileId = JsonPath.from(addResponse.body().asString()).getLong("data.files[0].dataFile.id");
888+
889+
msg("Orig file id: " + origFileId);
890+
assertNotNull(origFileId); // If checkOut fails, display message
891+
892+
//restrict file good
893+
Response restrictResponse = UtilIT.restrictFile(origFileId, restrict, apiToken);
894+
895+
restrictResponse.then().assertThat()
896+
.statusCode(OK.getStatusCode());
897+
898+
//restrict already restricted file bad
899+
Response restrictResponseBad = UtilIT.restrictFile(origFileId, restrict, apiToken);
900+
901+
restrictResponseBad.then().assertThat()
902+
.statusCode(BAD_REQUEST.getStatusCode());
903+
904+
//unrestrict file
905+
restrict = false;
906+
Response unrestrictResponse = UtilIT.restrictFile(origFileId, restrict, apiToken);
907+
908+
unrestrictResponse.then().assertThat()
909+
.statusCode(OK.getStatusCode());
910+
911+
//reset public install
912+
UtilIT.setSetting(SettingsServiceBean.Key.PublicInstall, publicInstall);
913+
914+
915+
}
916+
917+
@Test
918+
public void testRestrictAddedFile() {
919+
msgt("testRestrictAddedFile");
920+
921+
//get publicInstall setting so we can change it back
922+
Response publicInstallResponse = UtilIT.getSetting(SettingsServiceBean.Key.PublicInstall);
923+
String publicInstall = String.valueOf(publicInstallResponse.getBody().asString().contains("true"));
924+
925+
// make sure this is not a public installation
926+
UtilIT.setSetting(SettingsServiceBean.Key.PublicInstall, "false");
927+
928+
// Create user
929+
String apiToken = createUserGetToken();
930+
931+
// Create Dataverse
932+
String dataverseAlias = createDataverseGetAlias(apiToken);
933+
934+
// Create Dataset
935+
Integer datasetId = createDatasetGetId(dataverseAlias, apiToken);
936+
937+
// -------------------------
938+
// Add initial file
939+
// -------------------------
940+
msg("Add initial file");
941+
String pathToFile = "src/main/webapp/resources/images/favicondataverse.png";
942+
943+
JsonObjectBuilder json = Json.createObjectBuilder()
944+
.add("description", "my description")
945+
.add("categories", Json.createArrayBuilder()
946+
.add("Data")
947+
)
948+
.add("restrict", "true");
949+
950+
Response addResponse = UtilIT.uploadFileViaNative(datasetId.toString(), pathToFile, json.build(), apiToken);
951+
952+
//addResponse.prettyPrint();
953+
msgt("Here it is: " + addResponse.prettyPrint());
954+
String successMsg = ResourceBundle.getBundle("Bundle").getString("file.addreplace.success.add");
955+
956+
addResponse.then().assertThat()
957+
.body("data.files[0].dataFile.contentType", equalTo("image/png"))
958+
.body("data.files[0].label", equalTo("favicondataverse.png"))
959+
.statusCode(OK.getStatusCode());
960+
961+
//reset public install
962+
UtilIT.setSetting(SettingsServiceBean.Key.PublicInstall, publicInstall);
963+
964+
}
849965

850966
private void msg(String m){
851967
System.out.println(m);

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ static public Response grantRoleOnDataverse(String definitionPoint, String role,
483483
.contentType(ContentType.JSON)
484484
.post("api/dataverses/" + definitionPoint + "/assignments?key=" + apiToken);
485485
}
486-
486+
487487
public static Response deleteUser(String username) {
488488
Response deleteUserResponse = given()
489489
.delete("/api/admin/authenticatedUsers/" + username + "/");
@@ -645,6 +645,14 @@ static Response migrateBuiltinToOAuth(String data, String apiToken) {
645645
.put("/api/admin/authenticatedUsers/convert/builtin2oauth");
646646
return response;
647647
}
648+
649+
static Response restrictFile(Long datafileId, boolean restrict, String apiToken){
650+
Response response = given()
651+
.header(API_TOKEN_HTTP_HEADER, apiToken)
652+
.body(restrict)
653+
.put("/api/files/" + datafileId + "/restrict");
654+
return response;
655+
}
648656

649657
static Response nativeGet(Integer datasetId, String apiToken) {
650658
Response response = given()

0 commit comments

Comments
 (0)