1   package com.atlassian.user.generic;
2   
3   import com.atlassian.user.EntityException;
4   import com.atlassian.user.Group;
5   import com.atlassian.user.GroupManager;
6   import com.atlassian.user.User;
7   import com.atlassian.user.impl.DefaultUser;
8   import com.atlassian.user.search.page.Pager;
9   import com.atlassian.user.search.page.PagerUtils;
10  import net.sf.hibernate.HibernateException;
11  
12  import java.util.List;
13  
14  /**
15   * Extend this class and implement the abstract methods to run tests against your GroupManager
16   * implemention that supports external membership.
17   */
18  public abstract class AbstractTestExternalGroupManager extends AbstractTestGroupManager
19  {
20      /**
21       * Override to return the group manager responsible for managing external groups.
22       * By default, this is the same as the group manager returned by {@link #getGroupManager()}.
23       * <p/>
24       * This is required because the delegating manager will create a group in the first writeable
25       * repository, even if it cannot store external membership.
26       */
27      protected GroupManager getExternalGroupManager()
28      {
29          return getGroupManager();
30      }
31  
32      public void testSupportsExternalMembership() throws Exception
33      {
34          assertTrue(getGroupManager().supportsExternalMembership());
35          assertTrue(getExternalGroupManager().supportsExternalMembership());
36      }
37  
38      public void testAddExternalMembership() throws Exception
39      {
40          User externalUser = new DefaultUser("externalUser");
41          Group group = getExternalGroupManager().createGroup("group");
42          getGroupManager().addMembership(group, externalUser);
43          boolean result = getExternalGroupManager().hasMembership(group, externalUser);
44          assertTrue(result);
45      }
46  
47      public void testRemoveExternalMembership() throws Exception
48      {
49          User externalUser = new DefaultUser("externalUser");
50          Group group = getExternalGroupManager().createGroup("group");
51          getGroupManager().addMembership(group, externalUser);
52  
53          assertTrue(getExternalGroupManager().getLocalMemberNames(group).isEmpty());
54          assertFalse(getExternalGroupManager().getExternalMemberNames(group).isEmpty());
55  
56          getExternalGroupManager().removeMembership(group, externalUser);
57          assertTrue(getExternalGroupManager().getLocalMemberNames(group).isEmpty());
58          assertTrue(getExternalGroupManager().getExternalMemberNames(group).isEmpty());
59      }
60  
61      public void testGetExternalMemberNames() throws EntityException
62      {
63          User externalUser1 = new DefaultUser("externalUser1");
64          Group group = getExternalGroupManager().createGroup("group");
65          getGroupManager().addMembership(group, externalUser1);
66  
67          Pager<String> pager = getExternalGroupManager().getMemberNames(group);
68          List<String> results = PagerUtils.toList(pager);
69  
70          assertEquals(1, results.size());
71          assertEquals("externalUser1", results.get(0));
72      }
73  
74      public void testGetExternalMemberNamesIsOrdered() throws EntityException
75      {
76          User externalUser1 = new DefaultUser("externalUser1");
77          User externalUser2 = new DefaultUser("externalUser2");
78          Group group = getExternalGroupManager().createGroup("group");
79          getGroupManager().addMembership(group, externalUser2);
80          getGroupManager().addMembership(group, externalUser1);
81          Pager<String> pager = getExternalGroupManager().getMemberNames(group);
82          List<String> results = PagerUtils.toList(pager);
83  
84          assertEquals(2, results.size());
85          assertEquals("externalUser1", results.get(0));
86          assertEquals("externalUser2", results.get(1));
87      }
88  
89      public void testGetMemberNamesIncludesExternalMembers() throws EntityException, HibernateException
90      {
91          User externalUser = new DefaultUser("externalUser");
92          Group group = getExternalGroupManager().createGroup("group");
93          getGroupManager().addMembership(group, externalUser);
94  
95          User user = getUserManager().createUser("user");
96          this.getExternalGroupManager().addMembership(group, user);
97          Pager<String> pager = getExternalGroupManager().getMemberNames(group);
98          List<String> results = PagerUtils.toList(pager);
99  
100         assertEquals(2, results.size());
101         assertEquals("externalUser", results.get(0));
102         assertEquals("user", results.get(1));
103     }
104 
105     public void testGetGroupsForExternalEntity() throws EntityException
106     {
107         User externalUser = new DefaultUser("externalUser");
108         Group group = getExternalGroupManager().createGroup("group");
109         getGroupManager().addMembership(group, externalUser);
110 
111         Pager<Group> pager = getExternalGroupManager().getGroups(new DefaultUser("externalUser"));
112         List<Group> results = PagerUtils.toList(pager);
113 
114         assertEquals(1, results.size());
115         assertEquals(group, results.get(0));
116     }
117 }