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
13
14
15 public abstract class AbstractTestUserManager extends AbstractSpringTest
16 {
17
18
19
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
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
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 }