package com.box.sdk; import java.text.ParseException; import java.util.Date; import java.util.Iterator; import org.junit.Assert; import org.junit.Test; import org.junit.experimental.categories.Category; import com.eclipsesource.json.JsonObject; /** * {@link BoxLegalHoldPolicy} related unit tests. */ public class BoxLegalHoldPolicyTest { /** * Unit test for {@link BoxLegalHoldPolicy#getInfo(String...)} */ @Test @Category(UnitTest.class) public void testGetInfoSendsCorrectRequest() { BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(new RequestInterceptor() { @Override public BoxAPIResponse onRequest(BoxAPIRequest request) { Assert.assertEquals("https://api.box.com/2.0/legal_hold_policies/0?fields=description%2Cstatus", request.getUrl().toString()); return new BoxJSONResponse() { @Override public String getJSON() { return "{\"id\": \"0\"}"; } }; } }); BoxLegalHoldPolicy policy = new BoxLegalHoldPolicy(api, "0"); policy.getInfo("description", "status"); } /** * Unit test for {@link BoxLegalHoldPolicy#getInfo(String...)} */ @Test @Category(UnitTest.class) public void testGetInfoParseAllFieldsCorrectly() throws ParseException { final String id = "166757"; final String name = "Policy 4"; final String description = "Postman created policy"; final String status = "active"; final int assignmentsUser = 1; final int assignmentsFolder = 2; final int assignmentsFile = 3; final int assignmentsFileVersion = 4; final String userID = "2030388321"; final String userName = "Steve Boxuser"; final String userLogin = "steve@box.com"; final Date createdAt = BoxDateFormat.parse("2016-05-18T10:28:45-07:00"); final Date modifiedAt = BoxDateFormat.parse("2016-05-18T11:25:59-07:00"); final Date deletedAt = null; final Date filterStartedAt = BoxDateFormat.parse("2016-05-17T01:00:00-07:00"); final Date filterEndedAt = BoxDateFormat.parse("2016-05-21T01:00:00-07:00"); final String releaseNote = "non-empty note"; final JsonObject fakeJSONResponse = JsonObject.readFrom("{\n" + " \"type\": \"legal_hold_policy\",\n" + " \"id\": \"166757\",\n" + " \"policy_name\": \"Policy 4\",\n" + " \"description\": \"Postman created policy\",\n" + " \"status\": \"active\",\n" + " \"assignment_counts\": {\n" + " \"user\": 1,\n" + " \"folder\": 2,\n" + " \"file\": 3,\n" + " \"file_version\": 4\n" + " },\n" + " \"created_by\": {\n" + " \"type\": \"user\",\n" + " \"id\": \"2030388321\",\n" + " \"name\": \"Steve Boxuser\",\n" + " \"login\": \"steve@box.com\"\n" + " },\n" + " \"created_at\": \"2016-05-18T10:28:45-07:00\",\n" + " \"modified_at\": \"2016-05-18T11:25:59-07:00\",\n" + " \"deleted_at\": null,\n" + " \"filter_started_at\": \"2016-05-17T01:00:00-07:00\",\n" + " \"filter_ended_at\": \"2016-05-21T01:00:00-07:00\",\n" + " \"release_notes\": \"non-empty note\"\n" + "}"); BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(JSONRequestInterceptor.respondWith(fakeJSONResponse)); BoxLegalHoldPolicy policy = new BoxLegalHoldPolicy(api, id); BoxLegalHoldPolicy.Info info = policy.getInfo(); Assert.assertEquals(id, info.getID()); Assert.assertEquals(name, info.getPolicyName()); Assert.assertEquals(description, info.getDescription()); Assert.assertEquals(status, info.getStatus()); Assert.assertEquals(assignmentsUser, info.getAssignmentCountUser()); Assert.assertEquals(assignmentsFolder, info.getAssignmentCountFolder()); Assert.assertEquals(assignmentsFile, info.getAssignmentCountFile()); Assert.assertEquals(assignmentsFileVersion, info.getAssignmentCountFileVersion()); Assert.assertEquals(userID, info.getCreatedBy().getID()); Assert.assertEquals(userName, info.getCreatedBy().getName()); Assert.assertEquals(userLogin, info.getCreatedBy().getLogin()); Assert.assertEquals(createdAt, info.getCreatedAt()); Assert.assertEquals(modifiedAt, info.getModifiedAt()); Assert.assertEquals(deletedAt, info.getDeletedAt()); Assert.assertEquals(filterStartedAt, info.getFilterStartedAt()); Assert.assertEquals(filterEndedAt, info.getFilterEndedAt()); Assert.assertEquals(releaseNote, info.getReleaseNotes()); } /** * Unit test for {@link BoxLegalHoldPolicy#create(BoxAPIConnection, String, String, Date, Date)} */ @Test @Category(UnitTest.class) public void testCreateSendsCorrectJSON() throws ParseException { final String name = "policy"; final String description = "some description"; final Date startedAt = BoxDateFormat.parse("2014-05-11T00:00:00+0000"); final Date endedAt = BoxDateFormat.parse("2016-05-11T00:00:00+0000"); BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(new JSONRequestInterceptor() { @Override protected BoxAPIResponse onJSONRequest(BoxJSONRequest request, JsonObject json) { Assert.assertEquals("https://api.box.com/2.0/legal_hold_policies", request.getUrl().toString()); Assert.assertEquals(name, json.get("policy_name").asString()); Assert.assertEquals(description, json.get("description").asString()); try { Assert.assertEquals(startedAt, BoxDateFormat.parse(json.get("filter_started_at").asString())); Assert.assertEquals(endedAt, BoxDateFormat.parse(json.get("filter_ended_at").asString())); } catch (ParseException e) { assert false; } return new BoxJSONResponse() { @Override public String getJSON() { return "{\"id\": \"0\"}"; } }; } }); BoxLegalHoldPolicy.create(api, name, description, startedAt, endedAt); } /** * Unit test for {@link BoxLegalHoldPolicy#create(BoxAPIConnection, String)} */ @Test @Category(UnitTest.class) public void testCreateParseAllFieldsCorrectly() throws ParseException { final String id = "166921"; final String name = "Policy 3"; final String description = "postman created policy"; final String userID = "2030388321"; final String userName = "Ryan Churchill"; final String userLogin = "rchurchill+deventerprise@box.com"; final Date createdAt = BoxDateFormat.parse("2016-05-18T16:18:49-07:00"); final Date modifiedAt = BoxDateFormat.parse("2016-05-18T16:18:49-07:00"); final Date deletedAt = null; final Date filterStartedAt = BoxDateFormat.parse("2016-05-11T01:00:00-07:00"); final Date filterEndedAt = BoxDateFormat.parse("2016-05-13T01:00:00-07:00"); final JsonObject fakeJSONResponse = JsonObject.readFrom("{\n" + " \"type\": \"legal_hold_policy\",\n" + " \"id\": \"166921\",\n" + " \"policy_name\": \"Policy 3\",\n" + " \"description\": \"postman created policy\",\n" + " \"created_by\": {\n" + " \"type\": \"user\",\n" + " \"id\": \"2030388321\",\n" + " \"name\": \"Ryan Churchill\",\n" + " \"login\": \"rchurchill+deventerprise@box.com\"\n" + " },\n" + " \"created_at\": \"2016-05-18T16:18:49-07:00\",\n" + " \"modified_at\": \"2016-05-18T16:18:49-07:00\",\n" + " \"deleted_at\": null,\n" + " \"filter_started_at\": \"2016-05-11T01:00:00-07:00\",\n" + " \"filter_ended_at\": \"2016-05-13T01:00:00-07:00\"\n" + "}"); BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(JSONRequestInterceptor.respondWith(fakeJSONResponse)); BoxLegalHoldPolicy.Info info = BoxLegalHoldPolicy.create(api, name); Assert.assertEquals(id, info.getID()); Assert.assertEquals(name, info.getPolicyName()); Assert.assertEquals(description, info.getDescription()); Assert.assertEquals(userID, info.getCreatedBy().getID()); Assert.assertEquals(userName, info.getCreatedBy().getName()); Assert.assertEquals(userLogin, info.getCreatedBy().getLogin()); Assert.assertEquals(createdAt, info.getCreatedAt()); Assert.assertEquals(modifiedAt, info.getModifiedAt()); Assert.assertEquals(deletedAt, info.getDeletedAt()); Assert.assertEquals(filterStartedAt, info.getFilterStartedAt()); Assert.assertEquals(filterEndedAt, info.getFilterEndedAt()); } /** * Unit test for {@link BoxLegalHoldPolicy#delete()} */ @Test @Category(UnitTest.class) public void testDeleteSendsCorrectRequest() { BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(new RequestInterceptor() { @Override public BoxAPIResponse onRequest(BoxAPIRequest request) { Assert.assertEquals("https://api.box.com/2.0/legal_hold_policies/0", request.getUrl().toString()); return new BoxJSONResponse() { @Override public String getJSON() { return ""; } }; } }); BoxLegalHoldPolicy policy = new BoxLegalHoldPolicy(api, "0"); policy.delete(); } /** * Unit test for {@link BoxLegalHoldPolicy#updateInfo(BoxLegalHoldPolicy.Info)} */ @Test @Category(UnitTest.class) public void testUpdateSendsCorrectJSON() { final String name = "new name"; final String description = "new description"; final String note = "new note"; BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(new JSONRequestInterceptor() { @Override protected BoxAPIResponse onJSONRequest(BoxJSONRequest request, JsonObject json) { Assert.assertEquals("https://api.box.com/2.0/legal_hold_policies/0", request.getUrl().toString()); Assert.assertEquals(name, json.get("policy_name").asString()); Assert.assertEquals(description, json.get("description").asString()); Assert.assertEquals(note, json.get("release_note").asString()); return new BoxJSONResponse() { @Override public String getJSON() { return "{\"id\": \"0\"}"; } }; } }); BoxLegalHoldPolicy policy = new BoxLegalHoldPolicy(api, "0"); BoxLegalHoldPolicy.Info info = policy.new Info(); info.addPendingChange("policy_name", name); info.addPendingChange("description", description); info.addPendingChange("release_note", note); policy.updateInfo(info); } /** * Unit test for {@link BoxLegalHoldPolicy#updateInfo(BoxLegalHoldPolicy.Info)} */ @Test @Category(UnitTest.class) public void testUpdateParseAllFieldsCorrectly() throws ParseException { final String id = "166921"; final String name = "New Policy 3"; final String description = "Policy 3 New Description"; final String userID = "2030388321"; final String userName = "Ryan Churchill"; final String userLogin = "rchurchill+deventerprise@box.com"; final Date createdAt = BoxDateFormat.parse("2016-05-18T16:18:49-07:00"); final Date modifiedAt = BoxDateFormat.parse("2016-05-18T16:20:47-07:00"); final Date deletedAt = null; final Date filterStartedAt = BoxDateFormat.parse("2016-05-11T01:00:00-07:00"); final Date filterEndedAt = BoxDateFormat.parse("2016-05-13T01:00:00-07:00"); final JsonObject fakeJSONResponse = JsonObject.readFrom("{\n" + " \"type\": \"legal_hold_policy\",\n" + " \"id\": \"166921\",\n" + " \"policy_name\": \"New Policy 3\",\n" + " \"description\": \"Policy 3 New Description\",\n" + " \"created_by\": {\n" + " \"type\": \"user\",\n" + " \"id\": \"2030388321\",\n" + " \"name\": \"Ryan Churchill\",\n" + " \"login\": \"rchurchill+deventerprise@box.com\"\n" + " },\n" + " \"created_at\": \"2016-05-18T16:18:49-07:00\",\n" + " \"modified_at\": \"2016-05-18T16:20:47-07:00\",\n" + " \"deleted_at\": null,\n" + " \"filter_started_at\": \"2016-05-11T01:00:00-07:00\",\n" + " \"filter_ended_at\": \"2016-05-13T01:00:00-07:00\"\n" + "}"); BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(JSONRequestInterceptor.respondWith(fakeJSONResponse)); BoxLegalHoldPolicy policy = new BoxLegalHoldPolicy(api, id); BoxLegalHoldPolicy.Info info = policy.new Info(); info.addPendingChange("policy_name", name); policy.updateInfo(info); Assert.assertEquals(id, info.getID()); Assert.assertEquals(name, info.getPolicyName()); Assert.assertEquals(description, info.getDescription()); Assert.assertEquals(userID, info.getCreatedBy().getID()); Assert.assertEquals(userName, info.getCreatedBy().getName()); Assert.assertEquals(userLogin, info.getCreatedBy().getLogin()); Assert.assertEquals(createdAt, info.getCreatedAt()); Assert.assertEquals(modifiedAt, info.getModifiedAt()); Assert.assertEquals(deletedAt, info.getDeletedAt()); Assert.assertEquals(filterStartedAt, info.getFilterStartedAt()); Assert.assertEquals(filterEndedAt, info.getFilterEndedAt()); } /** * Unit test for {@link BoxLegalHoldPolicy#getAll(BoxAPIConnection)} */ @Test @Category(UnitTest.class) public void testGetAllSendsCorrectRequestWithoutParams() { BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(new RequestInterceptor() { @Override public BoxAPIResponse onRequest(BoxAPIRequest request) { Assert.assertEquals("https://api.box.com/2.0/legal_hold_policies?limit=100", request.getUrl().toString()); return new BoxJSONResponse() { @Override public String getJSON() { return "{\"entries\": []}"; } }; } }); Iterator<BoxLegalHoldPolicy.Info> iterator = BoxLegalHoldPolicy.getAll(api).iterator(); iterator.hasNext(); } /** * Unit test for {@link BoxLegalHoldPolicy#getAll(BoxAPIConnection, String, int, String...)} */ @Test @Category(UnitTest.class) public void testGetAllSendsCorrectRequest() { BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(new RequestInterceptor() { @Override public BoxAPIResponse onRequest(BoxAPIRequest request) { Assert.assertEquals( "https://api.box.com/2.0/legal_hold_policies" + "?policy_name=pol&fields=description%2Cstatus&limit=100", request.getUrl().toString()); return new BoxJSONResponse() { @Override public String getJSON() { return "{\"entries\": []}"; } }; } }); Iterator<BoxLegalHoldPolicy.Info> iterator = BoxLegalHoldPolicy.getAll(api, "pol", 100, "description", "status").iterator(); iterator.hasNext(); } /** * Unit test for {@link BoxLegalHoldPolicy#getAll(BoxAPIConnection)} */ @Test @Category(UnitTest.class) public void testGetAllParseAllFieldsCorrectly() { final String firstPolicyID = "166877"; final String firstPolicyName = "Policy 1"; final String secondPolicyID = "166881"; final String secondPolicyName = "Policy 2"; final JsonObject fakeJSONResponse = JsonObject.readFrom("{\n" + " \"entries\": [\n" + " {\n" + " \"type\": \"legal_hold_policy\",\n" + " \"id\": \"166877\",\n" + " \"policy_name\": \"Policy 1\"\n" + " },\n" + " {\n" + " \"type\": \"legal_hold_policy\",\n" + " \"id\": \"166881\",\n" + " \"policy_name\": \"Policy 2\"\n" + " }\n" + " ],\n" + " \"limit\": 3,\n" + " \"order\": [\n" + " {\n" + " \"by\": \"policy_name\",\n" + " \"direction\": \"ASC\"\n" + " }\n" + " ]\n" + "}"); BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(JSONRequestInterceptor.respondWith(fakeJSONResponse)); Iterator<BoxLegalHoldPolicy.Info> iterator = BoxLegalHoldPolicy.getAll(api).iterator(); BoxLegalHoldPolicy.Info info = iterator.next(); Assert.assertEquals(firstPolicyID, info.getID()); Assert.assertEquals(firstPolicyName, info.getPolicyName()); info = iterator.next(); Assert.assertEquals(secondPolicyID, info.getID()); Assert.assertEquals(secondPolicyName, info.getPolicyName()); Assert.assertEquals(false, iterator.hasNext()); } /** * Unit test for {@link BoxLegalHoldPolicy#assignTo(BoxResource)} */ @Test @Category(UnitTest.class) public void testAssignToSendsCorrectJSON() { final String policyID = "0"; final String resourceType = BoxLegalHoldAssignment.TYPE_FILE_VERSION; final String resourceID = "1"; BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(new JSONRequestInterceptor() { @Override protected BoxAPIResponse onJSONRequest(BoxJSONRequest request, JsonObject json) { Assert.assertEquals("https://api.box.com/2.0/legal_hold_policy_assignments", request.getUrl().toString()); Assert.assertEquals(policyID, json.get("policy_id").asString()); Assert.assertEquals(resourceType, json.get("assign_to").asObject().get("type").asString()); Assert.assertEquals(resourceID, json.get("assign_to").asObject().get("id").asString()); return new BoxJSONResponse() { @Override public String getJSON() { return "{\"id\": \"0\"}"; } }; } }); BoxLegalHoldPolicy policy = new BoxLegalHoldPolicy(api, "0"); BoxFileVersion version = new BoxFileVersion(api, "{\"id\": \"1\"}", "2"); policy.assignTo(version); } /** * Unit test for {@link BoxLegalHoldPolicy#getAssignments(String...)} */ @Test @Category(UnitTest.class) public void testGetAssignmentsSendsCorrectRequestWithFields() { BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(new RequestInterceptor() { @Override public BoxAPIResponse onRequest(BoxAPIRequest request) { Assert.assertEquals( "https://api.box.com/2.0/legal_hold_policies/0/assignments?fields=assigned_at&limit=100", request.getUrl().toString()); return new BoxJSONResponse() { @Override public String getJSON() { return "{\"entries\": []}"; } }; } }); BoxLegalHoldPolicy policy = new BoxLegalHoldPolicy(api, "0"); Iterator<BoxLegalHoldAssignment.Info> iterator = policy.getAssignments("assigned_at").iterator(); iterator.hasNext(); } /** * Unit test for {@link BoxLegalHoldPolicy#getAssignments(String, String, int, String...)} */ @Test @Category(UnitTest.class) public void testGetAssignmentsSendsCorrectRequestWithOptionalParams() { BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(new RequestInterceptor() { @Override public BoxAPIResponse onRequest(BoxAPIRequest request) { Assert.assertEquals( "https://api.box.com/2.0/legal_hold_policies/0/assignments" + "?assign_to_type=folder&assign_to_id=1&limit=99", request.getUrl().toString()); return new BoxJSONResponse() { @Override public String getJSON() { return "{\"entries\": []}"; } }; } }); BoxLegalHoldPolicy policy = new BoxLegalHoldPolicy(api, "0"); Iterator<BoxLegalHoldAssignment.Info> iterator = policy.getAssignments(BoxResource.getResourceType(BoxFolder.class), "1", 99).iterator(); iterator.hasNext(); } /** * Unit test for {@link BoxLegalHoldPolicy#getAssignments(String...)} */ @Test @Category(UnitTest.class) public void testGetAssignmentsParseAllFieldsCorrectly() { final String firstEntryID = "255473"; final String secondEntryID = "123432"; final JsonObject fakeJSONResponse = JsonObject.readFrom("{\n" + " \"entries\": [\n" + " {\n" + " \"type\": \"legal_hold_policy_assignment\",\n" + " \"id\": \"255473\"\n" + " },\n" + " {\n" + " \"type\": \"legal_hold_policy_assignment\",\n" + " \"id\": \"123432\"\n" + " }\n" + " ],\n" + " \"limit\": 100,\n" + " \"order\": [\n" + " {\n" + " \"by\": \"retention_policy_id, retention_policy_object_id\",\n" + " \"direction\": \"ASC\"\n" + " }\n" + " ]\n" + "}"); BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(JSONRequestInterceptor.respondWith(fakeJSONResponse)); BoxLegalHoldPolicy policy = new BoxLegalHoldPolicy(api, "0"); Iterator<BoxLegalHoldAssignment.Info> iterator = policy.getAssignments().iterator(); BoxLegalHoldAssignment.Info info = iterator.next(); Assert.assertEquals(firstEntryID, info.getID()); info = iterator.next(); Assert.assertEquals(secondEntryID, info.getID()); Assert.assertEquals(false, iterator.hasNext()); } /** * Unit test for {@link BoxLegalHoldPolicy#getFileVersionHolds(String...)} */ @Test @Category(UnitTest.class) public void testGetFileVersionHoldsSendsCorrectRequest() { BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(new RequestInterceptor() { @Override public BoxAPIResponse onRequest(BoxAPIRequest request) { Assert.assertEquals("https://api.box.com/2.0/file_version_legal_holds?policy_id=0&limit=100", request.getUrl().toString()); return new BoxJSONResponse() { @Override public String getJSON() { return "{\"entries\": []}"; } }; } }); BoxLegalHoldPolicy policy = new BoxLegalHoldPolicy(api, "0"); Iterator<BoxFileVersionLegalHold.Info> iterator = policy.getFileVersionHolds().iterator(); iterator.hasNext(); } /** * Unit test for {@link BoxLegalHoldPolicy#getFileVersionHolds(String...)} */ @Test @Category(UnitTest.class) public void testGetFileVersionHoldsParseAllFieldsCorrectly() { final String firstID = "241001"; final String secondID = "241005"; final String thirdID = "241009"; final JsonObject fakeJSONResponse = JsonObject.readFrom("{\n" + " \"entries\": [\n" + " {\n" + " \"type\": \"legal_hold\",\n" + " \"id\": \"241001\"\n" + " },\n" + " {\n" + " \"type\": \"legal_hold\",\n" + " \"id\": \"241005\"\n" + " },\n" + " {\n" + " \"type\": \"legal_hold\",\n" + " \"id\": \"241009\"\n" + " }\n" + " ],\n" + " \"limit\": 100,\n" + " \"order\": [\n" + " {\n" + " \"by\": \"retention_policy_set_id, file_version_id\",\n" + " \"direction\": \"ASC\"\n" + " }\n" + " ]\n" + "}"); BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(JSONRequestInterceptor.respondWith(fakeJSONResponse)); BoxLegalHoldPolicy policy = new BoxLegalHoldPolicy(api, "0"); Iterator<BoxFileVersionLegalHold.Info> iterator = policy.getFileVersionHolds().iterator(); Assert.assertEquals(firstID, iterator.next().getID()); Assert.assertEquals(secondID, iterator.next().getID()); Assert.assertEquals(thirdID, iterator.next().getID()); Assert.assertEquals(false, iterator.hasNext()); } }