1 package com.atlassian.user.impl.delegation;
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.search.page.DefaultPager;
8 import com.atlassian.user.search.page.Pager;
9 import com.atlassian.user.search.page.PagerFactory;
10 import com.atlassian.user.search.page.PagerUtils;
11 import com.mockobjects.dynamic.C;
12 import com.mockobjects.dynamic.Mock;
13 import junit.framework.TestCase;
14
15 import java.util.ArrayList;
16 import java.util.Arrays;
17 import java.util.List;
18
19 public class TestDelegatingUserManager extends TestCase
20 {
21 private DelegatingUserManager delegatingUserManager;
22 private Mock mockLeftUserManager;
23 private Mock mockRightUserManager;
24
25 public void setUp() throws Exception
26 {
27 super.setUp();
28 mockLeftUserManager = new Mock(UserManager.class);
29 mockRightUserManager = new Mock(UserManager.class);
30
31 delegatingUserManager = new DelegatingUserManager(Arrays.asList(
32 (UserManager) mockLeftUserManager.proxy(), (UserManager) mockRightUserManager.proxy()));
33 }
34
35 public void testGetUser() throws EntityException
36 {
37 User user = new DefaultUser("testUser");
38
39 mockLeftUserManager.expectAndReturn("getUser", C.args(C.eq("testUser")), null);
40 mockRightUserManager.expectAndReturn("getUser", C.args(C.eq("testUser")), user);
41
42 assertEquals("delegatingUserManager is not delegating calls for getUser(..) correctly",
43 user, delegatingUserManager.getUser("testUser"));
44 }
45
46 public void testGetUserNames() throws EntityException
47 {
48 ArrayList<String> userList1 = new ArrayList<String>();
49 ArrayList<String> userList2 = new ArrayList<String>();
50
51 userList1.add("user1");
52 userList1.add("user2");
53 userList1.add("user3");
54
55 userList2.add("user4");
56 userList2.add("user5");
57 userList2.add("user6");
58
59 Pager<String> pager1 = new DefaultPager<String>(userList1);
60 Pager<String> pager2 = new DefaultPager<String>(userList2);
61
62 mockLeftUserManager.expectAndReturn("getUserNames", new DefaultPager<String>(userList1));
63 mockRightUserManager.expectAndReturn("getUserNames", new DefaultPager<String>(userList2));
64
65 assertPagingIteratorsEqual(
66 "delegatingUserManager is not delegating (and combining) calls for getUsers() correctly",
67 PagerFactory.getPager(pager1, pager2), delegatingUserManager.getUserNames());
68 }
69
70 private static <T> void assertPagingIteratorsEqual(String message, Pager<T> iterator1, Pager<T> iterator2)
71 {
72 List<T> list1 = PagerUtils.toList(iterator1);
73 List<T> list2 = PagerUtils.toList(iterator2);
74
75 assertEquals(message, list1, list2);
76 }
77
78
79 public void testCreateUserUsingMocks() throws EntityException
80 {
81 User user = new DefaultUser("testUser");
82
83 mockLeftUserManager.expectAndReturn("getUser", C.args(C.eq("testUser")), null);
84 mockRightUserManager.expectAndReturn("getUser", C.args(C.eq("testUser")), null);
85 mockLeftUserManager.expectAndReturn("isCreative", true);
86 mockLeftUserManager.expectAndReturn("createUser", C.args(C.eq("testUser")), user);
87
88 assertEquals("delegatingUserManager is not delegating call for createUser(..) to creatingUserManager",
89 user, delegatingUserManager.createUser("testUser"));
90
91 mockLeftUserManager.verify();
92 mockRightUserManager.verify();
93 }
94
95 public void testRemoveUserUsingMocks()
96 {
97 User user = new DefaultUser("testUser");
98
99 mockLeftUserManager.expectAndReturn("getUser", C.args(C.eq("testUser")), null);
100 mockRightUserManager.expectAndReturn("getUser", C.args(C.eq("testUser")), user);
101 mockRightUserManager.expect("removeUser", C.args(C.eq(user)));
102
103 try
104 {
105 delegatingUserManager.removeUser(user);
106 }
107 catch (Exception e)
108 {
109 e.printStackTrace();
110 fail("delegatingUserManager is not delegating call for removeUser(..) to otherUserManager");
111 }
112
113 mockLeftUserManager.verify();
114 mockRightUserManager.verify();
115 }
116
117 public void testSaveUserUsingMocks()
118 {
119 User user = new DefaultUser("testUser");
120
121 mockLeftUserManager.expectAndReturn("getUser", C.args(C.eq("testUser")), null);
122 mockRightUserManager.expectAndReturn("getUser", C.args(C.eq("testUser")), user);
123 mockRightUserManager.expect("saveUser", C.args(C.eq(user)));
124
125 try
126 {
127 delegatingUserManager.saveUser(user);
128 }
129 catch (Exception e)
130 {
131 fail("delegatingUserManager is not delegating call for saveUser(..) to otherUserManager");
132 }
133
134 mockLeftUserManager.verify();
135 mockRightUserManager.verify();
136
137 }
138
139
140 public void testGetConfigurationForUser()
141 {
142 User user = new DefaultUser("testUser");
143
144 mockLeftUserManager.expectAndReturn("getRepository", user, null);
145 mockRightUserManager.expect("getRepository", user);
146
147 try
148 {
149 delegatingUserManager.getRepository(user);
150 }
151 catch (Exception e)
152 {
153 fail("delegatingUserManager is not delegating call for getIdentifier(..) to otherUserManager");
154 }
155
156 mockLeftUserManager.verify();
157 mockRightUserManager.verify();
158 }
159
160 public void testIsWriteable() throws EntityException
161 {
162 User user = new DefaultUser("testUser");
163
164 mockLeftUserManager.expectAndReturn("getUser", C.args(C.eq("testUser")), null);
165 mockRightUserManager.expectAndReturn("getUser", C.args(C.eq("testUser")), user);
166 mockRightUserManager.expectAndReturn("isReadOnly", C.args(C.eq(user)), true);
167
168 assertTrue("delegatingUserManager is not delegating call for saveUser(..) to otherUserManager",
169 delegatingUserManager.isReadOnly(user));
170
171 mockLeftUserManager.verify();
172 mockRightUserManager.verify();
173 }
174
175 public void testIsCreating()
176 {
177 mockLeftUserManager.expectAndReturn("isCreative", true);
178
179 assertTrue("delegatingUserManager is not calling isReadOnly() on the creatingUserManager when handling this" +
180 "behaviour", delegatingUserManager.isCreative());
181 }
182 }