/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.security.userstore;
import java.util.HashSet;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import com.google.common.collect.Sets;
import com.enonic.cms.core.security.group.GroupEntity;
import com.enonic.cms.core.security.group.GroupKey;
import static org.junit.Assert.*;
public class GroupMembershipDiffResolverTest
{
private GroupEntity userGroup;
@Before
public void setUp()
{
userGroup = createGroup( "userGroup1", "group for user 1" );
}
@Test
public void testResolveGroupsToJoin()
{
// setup
userGroup.addMembership( createGroup( "group100" ) );
// exercise
GroupMembershipDiffResolver resolver = new GroupMembershipDiffResolver( userGroup );
Set<GroupKey> requestedGroups =
Sets.newHashSet( new GroupKey( "group100" ), new GroupKey( "group700" ), new GroupKey( "group888" ) );
Set<GroupKey> groupsToJoin = resolver.resolveGroupsToJoin( requestedGroups );
// verify
Set<GroupKey> expectedGroupsToJoin = new HashSet<GroupKey>();
expectedGroupsToJoin.add( new GroupKey( "group700" ) );
expectedGroupsToJoin.add( new GroupKey( "group888" ) );
assertEquals( expectedGroupsToJoin, groupsToJoin );
}
@Test
public void testResolveGroupsToLeave()
{
// setup
userGroup.addMembership( createGroup( "group100" ) );
userGroup.addMembership( createGroup( "group700" ) );
userGroup.addMembership( createGroup( "group888" ) );
// exercise
GroupMembershipDiffResolver resolver = new GroupMembershipDiffResolver( userGroup );
Set<GroupKey> requestedGroups = Sets.newHashSet( new GroupKey( "group100" ) );
Set<GroupKey> groupsToLeave = resolver.resolveGroupsToLeave( requestedGroups );
// verify
Set<GroupKey> expectedGroupsToLeave = Sets.newHashSet( new GroupKey( "group700" ), new GroupKey( "group888" ) );
assertEquals( expectedGroupsToLeave, groupsToLeave );
}
@Test
public void testResolveGroupsDiff()
{
// setup
userGroup.addMembership( createGroup( "group100" ) );
userGroup.addMembership( createGroup( "group700" ) );
// exercise
GroupMembershipDiffResolver resolver = new GroupMembershipDiffResolver( userGroup );
Set<GroupKey> requestedGroups = Sets.newHashSet( new GroupKey( "group700" ), new GroupKey( "group800" ), new GroupKey( "group888" ),
new GroupKey( "group999" ) );
Set<GroupKey> groupsToJoin = resolver.resolveGroupsToJoin( requestedGroups );
Set<GroupKey> groupsToLeave = resolver.resolveGroupsToLeave( requestedGroups );
// verify
Set<GroupKey> expectedGroupsToJoin =
Sets.newHashSet( new GroupKey( "group800" ), new GroupKey( "group888" ), new GroupKey( "group999" ) );
Set<GroupKey> expectedGroupsToLeave = Sets.newHashSet( new GroupKey( "group100" ) );
assertEquals( expectedGroupsToJoin, groupsToJoin );
assertEquals( expectedGroupsToLeave, groupsToLeave );
}
@Test
public void testResolveGroupsDiffWithEmptyValues()
{
// exercise
GroupMembershipDiffResolver resolver = new GroupMembershipDiffResolver( userGroup );
Set<GroupKey> requestedGroups = new HashSet<GroupKey>();
Set<GroupKey> groupsToJoin = resolver.resolveGroupsToJoin( requestedGroups );
Set<GroupKey> groupsToLeave = resolver.resolveGroupsToLeave( requestedGroups );
// verify
assertEquals( new HashSet<GroupKey>(), groupsToJoin );
assertEquals( new HashSet<GroupKey>(), groupsToLeave );
}
@Test
public void resolveGroupsToJoin_returns_empty_set_when_existing_memberships_are_the_same_as_requested_memberships()
{
// setup
GroupEntity existingMembership1 = createGroup( "EX1", "Existing membership 1" );
GroupEntity existingMembership2 = createGroup( "EX2", "Existing membership 2" );
userGroup.addMembership( existingMembership1 );
userGroup.addMembership( existingMembership2 );
// exercise
GroupMembershipDiffResolver resolver = new GroupMembershipDiffResolver( userGroup );
Set<GroupKey> requestedGroups = Sets.newHashSet( existingMembership1.getGroupKey(), existingMembership2.getGroupKey() );
// verify
assertEquals( "groupsToJoin", new HashSet<GroupKey>(), resolver.resolveGroupsToJoin( requestedGroups ) );
}
@Test
public void resolveGroupsToLeave_returns_empty_set_when_existing_memberships_are_the_same_as_requested_memberships()
{
// setup
GroupEntity existingMembership1 = createGroup( "EX1", "Existing membership 1" );
GroupEntity existingMembership2 = createGroup( "EX2", "Existing membership 2" );
userGroup.addMembership( existingMembership1 );
userGroup.addMembership( existingMembership2 );
// exercise
GroupMembershipDiffResolver resolver = new GroupMembershipDiffResolver( userGroup );
Set<GroupKey> requestedGroups = Sets.newHashSet( existingMembership1.getGroupKey(), existingMembership2.getGroupKey() );
// verify
assertEquals( "groupsToLeave", new HashSet<GroupKey>(), resolver.resolveGroupsToLeave( requestedGroups ) );
}
@Test
public void resolveGroupsToLeave_returns_empty_set_when_existing_memberships_are_the_same_as_requested_memberships_and_existing_membership_have_other_membership()
{
// setup
GroupEntity existingMembership1 = createGroup( "EX1", "Existing membership 1" );
GroupEntity existingMembership2 = createGroup( "EX2", "Existing membership 2" );
GroupEntity indirectlyExistingMembership1 = createGroup( "IEX2", "Indirectly existing membership 1" );
existingMembership1.addMembership( indirectlyExistingMembership1 );
userGroup.addMembership( existingMembership1 );
userGroup.addMembership( existingMembership2 );
Set<GroupKey> requestedGroups = Sets.newHashSet( existingMembership1.getGroupKey(), existingMembership2.getGroupKey() );
// exercise
GroupMembershipDiffResolver resolver = new GroupMembershipDiffResolver( userGroup );
// verify
assertEquals( "groupsToLeave", new HashSet<GroupKey>(), resolver.resolveGroupsToLeave( requestedGroups ) );
}
@Test
public void resolveGroupsToJoin_returns_empty_set_when_existing_memberships_are_the_same_as_requested_memberships_and_existing_membership_have_other_membership()
{
// setup
GroupEntity existingMembership1 = createGroup( "EX1", "Existing membership 1" );
GroupEntity existingMembership2 = createGroup( "EX2", "Existing membership 2" );
GroupEntity indirectlyExistingMembership1 = createGroup( "IEX2", "Indirectly existing membership 1" );
existingMembership1.addMembership( indirectlyExistingMembership1 );
userGroup.addMembership( existingMembership1 );
userGroup.addMembership( existingMembership2 );
Set<GroupKey> requestedGroups = Sets.newHashSet( existingMembership1.getGroupKey(), existingMembership2.getGroupKey() );
// exercise
GroupMembershipDiffResolver resolver = new GroupMembershipDiffResolver( userGroup );
// verify
assertEquals( "groupsToJoin", new HashSet<GroupKey>(), resolver.resolveGroupsToJoin( requestedGroups ) );
}
private GroupEntity createGroup( String key, String name )
{
GroupEntity group = new GroupEntity();
group.setKey( new GroupKey( key ) );
group.setDeleted( false );
group.setName( name );
return group;
}
private GroupEntity createGroup( String key )
{
GroupEntity group = new GroupEntity();
group.setKey( new GroupKey( key ) );
group.setDeleted( false );
group.setName( key );
return group;
}
}