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.DefaultUser;
7 import com.atlassian.user.impl.DuplicateEntityException;
8 import com.atlassian.user.search.page.PagerUtils;
9 import com.atlassian.user.security.password.Credential;
10
11 import java.util.List;
12
13
14
15
16
17 public abstract class AbstractTestUserManager extends AbstractSpringTest
18 {
19
20
21
22
23 protected abstract UserManager getUserManager();
24
25 public final void testCreateUser() throws EntityException
26 {
27 UserManager userManager = getUserManager();
28 User user = userManager.createUser("user");
29
30 assertNotNull(user);
31 assertEquals(user, userManager.getUser("user"));
32 assertEquals("user", user.getName());
33 }
34
35 public final void testGetUser() throws EntityException
36 {
37 assertNull("user manager should return null for non existent user", getUserManager().getUser("nonexistentUser"));
38 }
39
40 public final void testGetAllUsers() throws EntityException
41 {
42 UserManager userManager = getUserManager();
43
44 User[] users = new User[4];
45 for (int i = 0; i < users.length; i++)
46 users[i] = userManager.createUser("user" + i);
47
48 List retrievedUserNames = PagerUtils.toList(userManager.getUserNames());
49
50 assertEquals(users.length, retrievedUserNames.size());
51
52
53 for (int i = 0; i < users.length; i++)
54 {
55 assertTrue(retrievedUserNames.contains(users[i].getName()));
56 }
57 }
58
59 public final void testCannotCreateDuplicateUsers() throws EntityException
60 {
61 UserManager userManager = getUserManager();
62
63 User user = userManager.createUser("user");
64 try
65 {
66 userManager.createUser(user.getName());
67 fail("The usermanager [" + userManager.getClass() + "] is creating identical users.");
68 }
69 catch (DuplicateEntityException expected)
70 {
71 }
72
73 assertEquals(1, PagerUtils.count(userManager.getUserNames()));
74 }
75
76 public final void testGetNonExistentUser() throws EntityException
77 {
78 UserManager userManager = getUserManager();
79
80 assertNull(userManager.getUser("nemo"));
81 }
82
83 public final void testGetIdenticalUserEachTime() throws EntityException
84 {
85 UserManager userManager = getUserManager();
86
87 userManager.createUser("user");
88 assertEquals("Users returned by getUser() should be equal",
89 userManager.getUser("user"), userManager.getUser("user"));
90 }
91
92 public final void testSaveUser() throws EntityException
93 {
94 UserManager userManager = getUserManager();
95
96 assertTrue(userManager.isCreative());
97
98 User user = userManager.createUser(new DefaultUser("zorro", "zorro", "zorro@mexican.rebellion.org"), Credential.NONE);
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 testUpdateUser() throws Exception
118 {
119 User createdUser = getUserManager().createUser(new DefaultUser("test", "", ""), Credential.NONE);
120
121 DefaultUser updatedUser = new DefaultUser(createdUser);
122 updatedUser.setFullName("Test User");
123 updatedUser.setEmail("testuser@example.org");
124 getUserManager().saveUser(updatedUser);
125
126 User foundUser = getUserManager().getUser("test");
127 assertEquals("test", foundUser.getName());
128 assertEquals("Test User", foundUser.getFullName());
129 assertEquals("testuser@example.org", foundUser.getEmail());
130 }
131
132 public final void testRemoveUser() throws EntityException
133 {
134 UserManager userManager = getUserManager();
135
136 User user = userManager.createUser("user");
137 assertNotNull(user);
138 userManager.removeUser(user);
139 assertNull(userManager.getUser("user"));
140
141 try
142 {
143 userManager.removeUser(user);
144 fail("removing unknown user should throw IllegalArgumentException");
145 }
146 catch (IllegalArgumentException e)
147 {
148
149 }
150 }
151
152 public final void testCreateUserWithProperties() throws Exception
153 {
154 DefaultUser user = new DefaultUser("user", "testing 1 23", "spamOverload@somewhere");
155
156 User createdUser = getUserManager().createUser(user, Credential.NONE);
157 assertEquals(user.getName(), createdUser.getName());
158 assertEquals(user.getFullName(), createdUser.getFullName());
159 assertEquals(user.getEmail(), createdUser.getEmail());
160
161 User retrievedUser = getUserManager().getUser(user.getName());
162 assertEquals(user.getName(), retrievedUser.getName());
163 assertEquals(user.getFullName(), retrievedUser.getFullName());
164 assertEquals(user.getEmail(), retrievedUser.getEmail());
165 }
166
167 public void testEquals() throws EntityException
168 {
169 UserManager userManager = getUserManager();
170
171 User user1 = userManager.createUser("user1");
172 User user2 = userManager.createUser("user2");
173
174 User retrievedUser1 = userManager.getUser("user1");
175
176 assertEquals(user1, user1);
177 assertEquals(user1, retrievedUser1);
178 assertEquals(retrievedUser1, user1);
179 assertEquals(user2, user2);
180 assertNotSame("The userManager [" + userManager.getClass().getName() + "] is creating identical users instead of distinct users", user1, user2);
181 assertFalse("The userManager [" + userManager.getClass().getName() + "] is creating identical users instead of distinct users", user1.equals(user2));
182 }
183
184 public void testHashingOnUser() throws EntityException
185 {
186 UserManager userManager = getUserManager();
187
188 int hash1 = userManager.createUser("user1").hashCode();
189 int hash2 = userManager.getUser("user1").hashCode();
190 int hash3 = userManager.createUser("user2").hashCode();
191
192 assertEquals("User object's hashcode is incorrect", hash1, hash2);
193 assertFalse("User object's hashcode is incorrect", hash2 == hash3);
194 }
195
196 public void testChangeFullName() throws EntityException
197 {
198 DefaultUser user = new DefaultUser("user", "original name", "");
199 User createdUser = getUserManager().createUser(user, Credential.NONE);
200
201 DefaultUser updatedUser = new DefaultUser(createdUser);
202 updatedUser.setFullName("another name");
203 getUserManager().saveUser(updatedUser);
204
205 User retrievedUser = getUserManager().getUser("user");
206 assertNotNull(retrievedUser);
207 assertEquals("another name", retrievedUser.getFullName());
208 }
209 }