package com.box.sdk; import java.text.ParseException; import java.util.Date; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.delete; import static com.github.tomakehurst.wiremock.client.WireMock.deleteRequestedFor; import static com.github.tomakehurst.wiremock.client.WireMock.get; import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import static com.github.tomakehurst.wiremock.client.WireMock.verify; import com.box.sdk.BoxGroupMembership.Role; import com.eclipsesource.json.JsonObject; import com.github.tomakehurst.wiremock.client.WireMock; import com.github.tomakehurst.wiremock.junit.WireMockRule; /** * {@link BoxGroupMembership} related tests. */ public class BoxGroupMembershipTest { /** * Wiremock */ @Rule public WireMockRule wireMockRule = new WireMockRule(8080); /** * Unit test for {@link BoxGroupMembership#getInfo()}. */ @Test @Category(UnitTest.class) public void getInfoSendsCorrectRequestAndParsesResponseCorrectly() throws ParseException { BoxAPIConnection api = new BoxAPIConnection(""); api.setBaseURL("http://localhost:8080/"); final String membershipID = "1"; final String membershipsURL = "/group_memberships/" + membershipID; final String userID = "user id"; final String userName = "user name"; final String userLogin = "user login"; final String groupID = "group id"; final String groupName = "group name"; final Role role = Role.MEMBER; final String roleName = "member"; JsonObject mockJSON = new JsonObject() .add("type", "group_membership") .add("id", membershipID) .add("user", new JsonObject() .add("type", "user") .add("id", userID) .add("name", userName) .add("login", userLogin)) .add("group", new JsonObject() .add("type", "group") .add("id", groupID) .add("name", groupName)) .add("role", roleName) .add("created_at", "2015-01-05T16:08:27-08:00") .add("modified_at", "2015-01-05T16:08:27-08:00"); stubFor(get(urlEqualTo(membershipsURL)) .willReturn(aResponse() .withHeader("Content-Type", "application/json") .withBody(mockJSON.toString()))); BoxGroupMembership membership = new BoxGroupMembership(api, membershipID); BoxGroupMembership.Info membershipInfo = membership.getInfo(); assertThat(membershipInfo.getID(), is(equalTo(membershipID))); assertThat(membershipInfo.getUser().getID(), is(equalTo(userID))); assertThat(membershipInfo.getUser().getName(), is(equalTo(userName))); assertThat(membershipInfo.getUser().getLogin(), is(equalTo(userLogin))); assertThat(membershipInfo.getGroup().getID(), is(equalTo(groupID))); assertThat(membershipInfo.getGroup().getName(), is(equalTo(groupName))); assertThat(membershipInfo.getRole(), is(equalTo(role))); assertThat(membershipInfo.getCreatedAt(), is(equalTo(BoxDateFormat.parse(mockJSON.get("created_at").asString())))); assertThat(membershipInfo.getModifiedAt(), is(equalTo(BoxDateFormat.parse(mockJSON.get("modified_at").asString())))); verify(getRequestedFor(urlEqualTo(membershipsURL)) .withRequestBody(WireMock.equalTo(""))); } /** * Unit test for {@link BoxGroupMembership#delete()}. */ @Test @Category(UnitTest.class) public void deleteMembershipSendsCorrectRequest() { BoxAPIConnection api = new BoxAPIConnection(""); api.setBaseURL("http://localhost:8080/"); final String membershipID = "1"; final String membershipsURL = "/group_memberships/" + membershipID; stubFor(delete(urlEqualTo(membershipsURL)) .willReturn(aResponse() .withStatus(204))); BoxGroupMembership membership = new BoxGroupMembership(api, membershipID); membership.delete(); verify(deleteRequestedFor(urlEqualTo(membershipsURL)) .withRequestBody(WireMock.equalTo(""))); } /** * Unit test for {@link BoxGroupMembership#updateInfo(BoxGroupMembership.Info)}. */ @Test @Category(UnitTest.class) public void testUpdateInfoSendsCorrectJson() { final String role = "submaster"; BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(new JSONRequestInterceptor() { @Override protected BoxAPIResponse onJSONRequest(BoxJSONRequest request, JsonObject json) { Assert.assertEquals("https://api.box.com/2.0/group_memberships/0", request.getUrl().toString()); Assert.assertEquals(role, json.get("role").asString()); return new BoxJSONResponse() { @Override public String getJSON() { return "{}"; } }; } }); BoxGroupMembership membership = new BoxGroupMembership(api, "0"); BoxGroupMembership.Info info = membership.new Info(); info.addPendingChange("role", role); membership.updateInfo(info); } /** * Unit test for {@link BoxGroupMembership#updateInfo(BoxGroupMembership.Info)}. */ @Test @Category(UnitTest.class) public void testUpdateInfoParseAllFieldsCorrectly() throws ParseException { final String id = "1560354"; final String userID = "13130406"; final String userName = "Alison Wonderland"; final String userLogin = "alice@gmail.com"; final String groupID = "119720"; final String groupName = "family"; final Role role = Role.SUBMASTER; final Date createdAt = BoxDateFormat.parse("2013-05-16T15:27:57-07:00"); final Date modifiedAt = BoxDateFormat.parse("2013-05-16T15:27:57-07:00"); final JsonObject fakeJSONResponse = JsonObject.readFrom("{\n" + " \"type\": \"group_membership\",\n" + " \"id\": \"1560354\",\n" + " \"user\": {\n" + " \"type\": \"user\",\n" + " \"id\": \"13130406\",\n" + " \"name\": \"Alison Wonderland\",\n" + " \"login\": \"alice@gmail.com\"\n" + " },\n" + " \"group\": {\n" + " \"type\": \"group\",\n" + " \"id\": \"119720\",\n" + " \"name\": \"family\"\n" + " },\n" + " \"role\": \"submaster\",\n" + " \"created_at\": \"2013-05-16T15:27:57-07:00\",\n" + " \"modified_at\": \"2013-05-16T15:27:57-07:00\"\n" + "}"); BoxAPIConnection api = new BoxAPIConnection(""); api.setRequestInterceptor(JSONRequestInterceptor.respondWith(fakeJSONResponse)); BoxGroupMembership membership = new BoxGroupMembership(api, id); BoxGroupMembership.Info info = membership.new Info(); info.addPendingChange("role", "non-empty"); membership.updateInfo(info); Assert.assertEquals(id, info.getID()); Assert.assertEquals(userID, info.getUser().getID()); Assert.assertEquals(userName, info.getUser().getName()); Assert.assertEquals(userLogin, info.getUser().getLogin()); Assert.assertEquals(groupID, info.getGroup().getID()); Assert.assertEquals(groupName, info.getGroup().getName()); Assert.assertEquals(role, info.getRole()); Assert.assertEquals(createdAt, info.getCreatedAt()); Assert.assertEquals(modifiedAt, info.getModifiedAt()); } @Test @Category(IntegrationTest.class) public void getInfoSucceeds() { final String groupName = "[getGroupMembershipInfoSucceeds] Test Group"; BoxAPIConnection api = new BoxAPIConnection(TestConfig.getAccessToken()); BoxUser user = BoxUser.getCurrentUser(api); BoxGroupMembership.Role role = BoxGroupMembership.Role.MEMBER; BoxGroup.Info groupInfo = BoxGroup.createGroup(api, groupName); BoxUser.Info userInfo = user.getInfo(); BoxGroup group = groupInfo.getResource(); BoxGroupMembership membership = group.addMembership(user, role).getResource(); BoxGroupMembership.Info membershipInfo = membership.getInfo(); assertThat(membershipInfo.getUser().getID(), is(equalTo(user.getID()))); assertThat(membershipInfo.getUser().getName(), is(equalTo(userInfo.getName()))); assertThat(membershipInfo.getUser().getLogin(), is(equalTo(userInfo.getLogin()))); assertThat(membershipInfo.getGroup().getID(), is(equalTo(group.getID()))); assertThat(membershipInfo.getGroup().getName(), is(equalTo(groupInfo.getName()))); assertThat(membershipInfo.getRole(), is(equalTo(role))); group.delete(); } @Test @Category(IntegrationTest.class) public void updateInfoSucceeds() { BoxAPIConnection api = new BoxAPIConnection(TestConfig.getAccessToken()); String groupName = "[updateGroupMembershipInfoSucceeds] Test Group"; BoxUser user = BoxUser.getCurrentUser(api); BoxGroupMembership.Role originalRole = BoxGroupMembership.Role.MEMBER; BoxGroupMembership.Role newRole = BoxGroupMembership.Role.ADMIN; BoxGroup group = BoxGroup.createGroup(api, groupName).getResource(); BoxGroupMembership.Info membershipInfo = group.addMembership(user, originalRole); assertThat(membershipInfo.getRole(), is(equalTo(originalRole))); BoxGroupMembership membership = membershipInfo.getResource(); membershipInfo.setRole(newRole); membership.updateInfo(membershipInfo); assertThat(membershipInfo.getRole(), is(equalTo(newRole))); group.delete(); } @Test @Category(IntegrationTest.class) public void deleteSucceeds() { BoxAPIConnection api = new BoxAPIConnection(TestConfig.getAccessToken()); String groupName = "[deleteGroupMembershipSucceeds] Test Group"; BoxUser user = BoxUser.getCurrentUser(api); BoxGroupMembership.Role originalRole = BoxGroupMembership.Role.MEMBER; BoxGroup group = BoxGroup.createGroup(api, groupName).getResource(); BoxGroupMembership.Info membershipInfo = group.addMembership(user, originalRole); BoxGroupMembership membership = membershipInfo.getResource(); membership.delete(); group.delete(); } }