/*
* *****************************************************************************
* Cloud Foundry
* Copyright (c) [2009-2016] Pivotal Software, Inc. All Rights Reserved.
* This product is licensed to you under the Apache License, Version 2.0 (the "License").
* You may not use this product except in compliance with the License.
*
* This product includes a number of subcomponents with
* separate copyright notices and license terms. Your use of these
* subcomponents is subject to the terms and conditions of the
* subcomponent's license, as noted in the LICENSE file.
* *****************************************************************************
*/
package org.cloudfoundry.identity.uaa.scim;
import org.cloudfoundry.identity.uaa.util.JsonUtils;
import org.junit.Before;
import org.junit.Test;
import java.util.Arrays;
import static java.util.Collections.emptyList;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class ScimGroupTests {
private static final String GROUP_BEFORE_DESCRIPTION = "{\"meta\":{\"version\":0,\"created\":\"2016-01-13T09:01:33.909Z\"},\"zoneId\":\"zoneId\",\"displayName\":\"name\",\"schemas\":[\"urn:scim:schemas:core:1.0\"],\"id\":\"id\"}";
ScimGroup group;
private ScimGroup patch;
private ScimGroupMember member1;
private ScimGroupMember member2;
private ScimGroupMember member3;
@Before
public void setUp() {
group = new ScimGroup("id","name","zoneId");
group.setDescription("description");
patch = new ScimGroup();
patch.setId(group.getId());
patch.setDisplayName("NewName");
patch.setDescription("NewDescription");
member1 = new ScimGroupMember("id1");
member2 = new ScimGroupMember("id2");
member3 = new ScimGroupMember("id3");
}
@Test
public void testDeSerializeWithoutDescription() {
group = JsonUtils.readValue(GROUP_BEFORE_DESCRIPTION, ScimGroup.class);
assertEquals("id", group.getId());
assertEquals("name", group.getDisplayName());
assertEquals("zoneId", group.getZoneId());
assertNull(group.getDescription());
}
@Test
public void testSerializeWithDescription() {
group.setDescription("description");
String json = JsonUtils.writeValueAsString(group);
group = JsonUtils.readValue(json, ScimGroup.class);
assertEquals("id", group.getId());
assertEquals("name", group.getDisplayName());
assertEquals("zoneId", group.getZoneId());
assertEquals("description", group.getDescription());
}
@Test
public void testPatch(){
group.patch(patch);
assertEquals(patch.getId(), group.getId());
assertEquals("NewName",group.getDisplayName());
assertEquals("NewDescription", group.getDescription());
}
@Test
public void testPatchZoneIdFails(){
group.setZoneId("uaa");
patch.setZoneId("zoneid");
assertTrue(group.getZoneId().equals("uaa"));
assertTrue(patch.getZoneId().equals("zoneid"));
group.patch(patch);
assertTrue(group.getZoneId().equals("uaa"));
assertTrue(patch.getZoneId().equals("zoneid"));
}
@Test
public void testPatchDeleteMetaAttributes(){
assertEquals("description", group.getDescription());
String[] attributes = new String[]{"description"};
patch.getMeta().setAttributes(attributes);
group.patch(patch);
assertEquals("NewDescription", group.getDescription());
patch.setDescription(null);
group.patch(patch);
assertNull(group.getDescription());
}
@Test
public void testDropDisplayName(){
patch.setDisplayName("NewDisplayName");
group.setDisplayName("display");
assertEquals("display", group.getDisplayName());
String[] attributes = new String[]{"displayname"};
patch.getMeta().setAttributes(attributes);
group.patch(patch);
assertEquals("NewDisplayName", group.getDisplayName());
patch.setDisplayName(null);
group.patch(patch);
assertNull(group.getDisplayName());
}
@Test(expected = IllegalArgumentException.class)
public void cant_drop_zone_id() {
patch.getMeta().setAttributes(new String[] {"zoneID"});
group.patch(patch);
}
@Test(expected = IllegalArgumentException.class)
public void cant_drop_id() {
patch.getMeta().setAttributes(new String[] {"id"});
group.patch(patch);
}
@Test
public void testDropAllMembers(){
group.setMembers(Arrays.asList(member1, member2, member3));
assertEquals(3, group.getMembers().size());
patch.getMeta().setAttributes(new String[] {"members"});
group.patch(patch);
assertEquals(0, group.getMembers().size());
}
@Test
public void testDropOneMembers(){
group.setMembers(Arrays.asList(member1, member2, member3));
ScimGroupMember member = new ScimGroupMember(member1.getMemberId());
member.setOperation("DELETE");
patch.setMembers(Arrays.asList(
member
));
group.patch(patch);
assertEquals(2, group.getMembers().size());
}
@Test
public void testDropAllMembersUsingOperation() {
member1.setOperation("delete");
member2.setOperation("delete");
member3.setOperation("delete");
group.setMembers(Arrays.asList(member1, member2, member3));
patch.setMembers(group.getMembers());
assertEquals(3, group.getMembers().size());
group.patch(patch);
assertEquals(0, group.getMembers().size());
}
@Test
public void testAddAllMembers() {
patch.setMembers(Arrays.asList(member1, member2, member3));
group.setMembers(emptyList());
assertEquals(0, group.getMembers().size());
group.patch(patch);
assertEquals(3, group.getMembers().size());
}
@Test
public void testAddOneMember() {
patch.setMembers(Arrays.asList(member1));
group.setMembers(Arrays.asList(member2, member3));
assertEquals(2, group.getMembers().size());
group.patch(patch);
assertEquals(3, group.getMembers().size());
}
@Test
public void test_toString() {
group.toString();
}
}