1   package com.atlassian.user.generic;
2   
3   import com.atlassian.user.EntityException;
4   import com.atlassian.user.User;
5   import com.atlassian.user.UserManager;
6   import com.atlassian.user.impl.DuplicateEntityException;
7   import com.atlassian.user.search.page.PagerUtils;
8   
9   import java.util.List;
10  
11  /**
12   * Extend this class and implement the {@link #getUserManager} method
13   * to run these test over other implementions.
14   */
15  public abstract class AbstractTestUserManager extends AbstractSpringTest
16  {
17  
18      /**
19       * Override to return a specific implementation for testing
20       */
21      protected abstract UserManager getUserManager();
22  
23      public final void testCreateUser() throws EntityException
24      {
25          UserManager userManager = getUserManager();
26          User user = userManager.createUser("user");
27  
28          assertNotNull(user);
29          assertEquals(user, userManager.getUser("user"));
30          assertEquals("user", user.getName());
31      }
32  
33      public final void testGetUser() throws EntityException
34      {
35          assertNull("user manager should return null for non existent user", getUserManager().getUser("nonexistentUser"));
36      }
37  
38      public final void testGetAllUsers() throws EntityException
39      {
40          UserManager userManager = getUserManager();
41  
42          User[] users = new User[4];
43          for (int i = 0; i < users.length; i++)
44              users[i] = userManager.createUser("user" + i);
45  
46          List retrievedUserNames = PagerUtils.toList(userManager.getUserNames());
47  
48          assertEquals(users.length, retrievedUserNames.size());
49  
50          // order not checked here, just that the user is in the result
51          for (int i = 0; i < users.length; i++)
52          {
53              assertTrue(retrievedUserNames.contains(users[i].getName()));
54          }
55      }
56  
57      public final void testCannotCreateDuplicateUsers() throws EntityException
58      {
59          UserManager userManager = getUserManager();
60  
61          User user = userManager.createUser("user");
62          try
63          {
64              userManager.createUser(user.getName());
65              fail("The usermanager [" + userManager.getClass() + "] is creating identical users.");
66          }
67          catch (DuplicateEntityException expected)
68          {
69          }
70  
71          assertEquals(1, PagerUtils.count(userManager.getUserNames()));
72      }
73  
74      public final void testGetNonExistentUser() throws EntityException
75      {
76          UserManager userManager = getUserManager();
77  
78          assertNull(userManager.getUser("nemo"));
79      }
80  
81      public final void testGetIdenticalUserEachTime() throws EntityException
82      {
83          UserManager userManager = getUserManager();
84  
85          userManager.createUser("user");
86          assertEquals("Users returned by getUser() should be equal",
87              userManager.getUser("user"), userManager.getUser("user"));
88      }
89  
90      public final void testSaveUser() throws EntityException
91      {
92          UserManager userManager = getUserManager();
93  
94          assertTrue(userManager.isCreative());
95  
96          User user = userManager.createUser("zorro");
97          user.setEmail("zorro@mexican.rebellion.org");
98          userManager.saveUser(user);
99  
100         User retrievedUser = userManager.getUser("zorro");
101         assertEquals("userManager.saveUser(user) is not recording info: [" + userManager.getRepository(user).toString() + "]",
102             "zorro@mexican.rebellion.org", retrievedUser.getEmail());
103     }
104 
105     public final void testSaveNullUser() throws Exception
106     {
107         try
108         {
109             getUserManager().saveUser(null);
110             fail("Expected IllegalArgumentException trying to save null user");
111         }
112         catch (IllegalArgumentException expected)
113         {
114         }
115     }
116 
117     public final void testRemoveUser() throws EntityException
118     {
119         UserManager userManager = getUserManager();
120 
121         User user = userManager.createUser("user");
122         assertNotNull(user);
123         userManager.removeUser(user);
124         assertNull(userManager.getUser("user"));
125 
126         try
127         {
128             userManager.removeUser(user);
129             fail("removing unknown user should throw IllegalArgumentException");
130         }
131         catch (IllegalArgumentException e)
132         {
133             // expected
134         }
135     }
136 
137     public final void testCreateUserWithProperties() throws Exception
138     {
139         User user = getUserManager().createUser("user");
140         user.setEmail("spamOverlord@somewhere");
141         user.setFullName("testing 1 23");
142 
143         getUserManager().saveUser(user);
144 
145         User retrievedUser = getUserManager().getUser("user");
146         assertEquals("spamOverlord@somewhere", retrievedUser.getEmail());
147         assertEquals("testing 1 23", retrievedUser.getFullName());
148     }
149 
150     public void testEquals() throws EntityException
151     {
152         UserManager userManager = getUserManager();
153 
154         User user1 = userManager.createUser("user1");
155         User user2 = userManager.createUser("user2");
156 
157         User retrievedUser1 = userManager.getUser("user1");
158 
159         assertEquals(user1, user1);
160         assertEquals(user1, retrievedUser1);
161         assertEquals(retrievedUser1, user1);
162         assertEquals(user2, user2);
163         assertNotSame("The userManager [" + userManager.getClass().getName() + "] is creating identical users instead of distinct users", user1, user2);
164         assertFalse("The userManager [" + userManager.getClass().getName() + "] is creating identical users instead of distinct users", user1.equals(user2));
165     }
166 
167     public void testHashingOnUser() throws EntityException
168     {
169         UserManager userManager = getUserManager();
170 
171         int hash1 = userManager.createUser("user1").hashCode();
172         int hash2 = userManager.getUser("user1").hashCode();
173         int hash3 = userManager.createUser("user2").hashCode();
174 
175         assertEquals("User object's hashcode is incorrect", hash1, hash2);
176         assertFalse("User object's hashcode is incorrect", hash2 == hash3);
177     }
178 
179     public void testChangeFullName() throws EntityException
180     {
181         UserManager userManager = getUserManager();
182 
183         User user = userManager.createUser("user");
184         user.setFullName("original name");
185         userManager.saveUser(user);
186 
187         user.setFullName("another name");
188 
189         User retrievedUser = userManager.getUser("user");
190         assertNotNull(retrievedUser);
191         assertEquals("another name", retrievedUser.getFullName());
192     }
193 }