1 package org.marketchangers.prayer.hibernate;
2
3 import java.util.Collections;
4 import java.util.Hashtable;
5 import java.util.List;
6
7 import junit.framework.TestCase;
8 import net.sf.hibernate.HibernateException;
9 import net.sf.hibernate.Session;
10
11 import org.marketchangers.PortalUserManager;
12 import org.marketchangers.ServiceLocator;
13 import org.marketchangers.prayer.PrayerCategory;
14 import org.marketchangers.prayer.PrayerComment;
15 import org.marketchangers.prayer.PrayerRequest;
16 import org.marketchangers.prayer.PrayerRequestManager;
17 import org.marketchangers.prayer.PrayerRequestQuery;
18 import org.marketchangers.prayer.PrayerRequestSearcher;
19 import org.marketchangers.prayer.UserContract;
20 import org.nanocontainer.hibernate.SessionProvider;
21
22 import com.mockobjects.dynamic.C;
23 import com.mockobjects.dynamic.Mock;
24
25 /***
26 * @author <a href="mailto:mtodd@wc-group.com">Matthew Todd</a>
27 */
28 public class HibernatePrayerRequestManagerTest extends TestCase {
29 private PrayerRequestManager manager;
30
31 private Mock provider;
32 private Mock searcher;
33 private Mock serviceLocator;
34 private Mock session;
35 private Mock userManager;
36
37
38 public void setUp() {
39 provider = new Mock(SessionProvider.class);
40 searcher = new Mock(PrayerRequestSearcher.class);
41 serviceLocator = new Mock(ServiceLocator.class);
42 session = new Mock(Session.class);
43 userManager = new Mock(PortalUserManager.class);
44
45 this.manager =
46 new HibernatePrayerRequestManager(
47 (PrayerRequestSearcher)searcher.proxy(),
48 (SessionProvider)provider.proxy());
49 }
50
51 public void tearDown() {
52 provider.verify();
53 searcher.verify();
54 serviceLocator.verify();
55 session.verify();
56 userManager.verify();
57 }
58
59
60 public void testSubmitsPrayerRequests() {
61 PrayerRequest request = new PrayerRequest();
62
63 provider.expectAndReturn("getSession", (Session)session.proxy());
64 session.expect("save", request);
65 provider.expect("commit");
66
67 searcher.expect("index", request);
68
69 assertTrue(manager.submitPrayerRequest(request));
70 }
71
72 public void testHandlesExceptionsWellOnSubmitPrayerRequest() {
73 PrayerRequest request = new PrayerRequest();
74
75 provider.expectAndReturn("getSession", (Session)session.proxy());
76 session.expectAndThrow("save", request, new HibernateException("Doh"));
77 provider.expect("reset");
78
79 assertFalse(manager.submitPrayerRequest(request));
80
81 System.out.println(
82 "If you see a stack trace above, it's okay -- we're testing that.");
83 }
84
85 public void testCreatesPrayerCategory() {
86 PrayerCategory category = new PrayerCategory();
87
88 provider.expectAndReturn("getSession", (Session)session.proxy());
89 session.expect("save", category);
90 provider.expect("commit");
91
92 assertTrue(manager.createPrayerCategory(category));
93 }
94
95 public void testGetsPrayerCategoriesByName() {
96 PrayerCategory category = new PrayerCategory();
97 category.setName("TEST CATEGORY");
98
99 provider.expectAndReturn("getSession", (Session)session.proxy());
100
101 session.expectAndReturn(
102 "find",
103 C.ANY_ARGS,
104 Collections.singletonList(category));
105
106 provider.expect("close");
107
108 assertEquals(category, manager.getPrayerCategory(category.getName()));
109 }
110
111 public void testGetsPrayerRequestById() {
112 PrayerRequest request = new PrayerRequest();
113 request.setRequestorUserId("bob");
114 request.setId(new Integer(0));
115
116 provider.expectAndReturn("getSession", (Session)session.proxy());
117 session.expectAndReturn("get", C.ANY_ARGS, request);
118 provider.expect("close");
119
120 assertEquals(
121 request,
122 manager.getPrayerRequestById("bob", new Integer(0)));
123 }
124
125 public void testGetCategoriesForRequestor() {
126 String userid = "JETHRO";
127 PrayerCategory category = new PrayerCategory();
128 category.setRequestorUserId(userid);
129 category.setName("Get me");
130
131 provider.expectAndReturn("getSession", (Session)session.proxy());
132
133 session.expectAndReturn(
134 "find",
135 C.ANY_ARGS,
136 Collections.singletonList(category));
137
138 provider.expect("close");
139
140 assertEquals(
141 Collections.singletonList(category),
142 manager.getCategoriesForRequestor(userid));
143 }
144
145 public void testGetRequestsForRequestor() {
146 String userid = "JOE BOB";
147 PrayerRequest request = new PrayerRequest();
148 request.setRequestorUserId(userid);
149
150 provider.expectAndReturn("getSession", (Session)session.proxy());
151
152 session.expectAndReturn(
153 "find",
154 C.ANY_ARGS,
155 Collections.singletonList(request));
156
157 provider.expect("close");
158
159 List requests = manager.getPrayerRequestList(userid, "requestor");
160 assertEquals(request, requests.get(0));
161 }
162
163 public void testGetCurrentIntercessors() {
164 String userid = "JETHRO";
165 UserContract contract = new UserContract();
166 contract.setRequestorUserId(userid);
167 contract.setRequesteeUserId("THELMA");
168
169 provider.expectAndReturn("getSession", (Session)session.proxy());
170
171 session.expectAndReturn(
172 "find",
173 C.ANY_ARGS,
174 Collections.singletonList(contract));
175
176 provider.expect("close");
177
178 List contracts = manager.getCurrentIntercessors(userid);
179 assertEquals(contract, contracts.get(0));
180 }
181
182 public void testGetCurrentRequestors() {
183 String userid = "JETHRO";
184 UserContract contract = new UserContract();
185 contract.setRequestorUserId("THELMA");
186 contract.setRequesteeUserId(userid);
187
188 provider.expectAndReturn("getSession", (Session)session.proxy());
189
190 session.expectAndReturn(
191 "find",
192 C.ANY_ARGS,
193 Collections.singletonList(contract));
194
195 provider.expect("close");
196
197 List contracts = manager.getCurrentRequestors(userid);
198 assertEquals(contract, contracts.get(0));
199 }
200
201 public void testAddContract() {
202 UserContract contract = new UserContract();
203 contract.setRequesteeUserId("JOE BOB");
204 contract.setRequestorUserId("THELMA");
205
206 provider.expectAndReturn("getSession", (Session)session.proxy());
207 session.expectAndReturn("find", C.ANY_ARGS, Collections.EMPTY_LIST);
208 session.expect("save", contract);
209 provider.expect("commit");
210
211 assertTrue(manager.addContract(contract));
212 }
213
214 public void testAddNullContract() {
215 UserContract contract = null;
216 assertFalse(manager.addContract(contract));
217 }
218
219 public void testAddBadContract() {
220 UserContract contract = new UserContract();
221 contract.setRequesteeUserId(null);
222 contract.setRequestorUserId(null);
223 assertFalse(manager.addContract(contract));
224 }
225
226 public void testAddContractFailsWhenAddingDuplicateContract() {
227 UserContract contract = new UserContract();
228 contract.setRequesteeUserId("JOE BOB");
229 contract.setRequestorUserId("THELMA");
230
231 provider.expectAndReturn("getSession", (Session)session.proxy());
232 session.expectAndReturn("find", C.ANY_ARGS, Collections.EMPTY_LIST);
233 session.expect("save", contract);
234 provider.expect("commit");
235
236 assertTrue(manager.addContract(contract));
237
238 provider.expectAndReturn("getSession", (Session)session.proxy());
239 session.expectAndReturn(
240 "find",
241 C.ANY_ARGS,
242 Collections.singletonList(contract));
243 provider.expect("close");
244
245 assertFalse(manager.addContract(contract));
246 }
247
248 public void testUpdateContractStatus() {
249 UserContract contract = new UserContract();
250 contract.setId(new Integer(0));
251
252 provider.expectAndReturn("getSession", (Session)session.proxy());
253 session.expectAndReturn(
254 "get",
255 C.args(C.eq(UserContract.class), C.eq(contract.getId())),
256 contract);
257 session.expect("update", contract);
258 provider.expect("commit");
259
260 assertTrue(manager.updateContractStatus(contract));
261 }
262
263 public void testUpdateContractStatusIfContractDoesntExist() {
264 UserContract contract = new UserContract();
265 contract.setId(new Integer(0));
266
267 provider.expectAndReturn("getSession", (Session)session.proxy());
268 session.expectAndReturn(
269 "get",
270 C.args(C.eq(UserContract.class), C.eq(contract.getId())),
271 null);
272
273 assertFalse(manager.updateContractStatus(contract));
274 }
275
276 public void testUpdateContractStatusIfContractIsNull() {
277 assertFalse(manager.updateContractStatus(null));
278 }
279
280 public void testRemoveContractIfIdSet() {
281 UserContract contract = new UserContract();
282 contract.setId(new Integer(0));
283
284 provider.expectAndReturn("getSession", (Session)session.proxy());
285 session.expectAndReturn("delete", C.ANY_ARGS, 1);
286 provider.expect("commit");
287
288 assertTrue(manager.removeContract(contract));
289 }
290
291 public void testRemoveContractFailsIfIdNotSet() {
292 UserContract contract = new UserContract();
293
294 provider.expectAndReturn("getSession", (Session)session.proxy());
295 session.expectAndReturn("delete", C.ANY_ARGS, 0);
296 provider.expect("close");
297
298 assertFalse(manager.removeContract(contract));
299 System.out.println(
300 "If you see a stack trace above, it's okay -- we're testing that.");
301 }
302
303 public void testRemoveContractFailsContractDoesntExist() {
304 UserContract contract = new UserContract();
305
306 provider.expectAndReturn("getSession", (Session)session.proxy());
307 session.expectAndReturn("delete", C.ANY_ARGS, 0);
308 provider.expect("close");
309
310 assertFalse(manager.removeContract(contract));
311 System.out.println(
312 "If you see a stack trace above, it's okay -- we're testing that.");
313 }
314
315 public void testGetRequestorsForIntercessor() {
316 UserContract contract = new UserContract();
317 contract.setRequestorUserId("THELMA LOU REQUESTOR");
318 contract.setRequesteeUserId("JOE BOB INTERCESSOR");
319 List contracts = Collections.singletonList(contract);
320
321 provider.expectAndReturn("getSession", (Session)session.proxy());
322 session.expectAndReturn("iterate", C.ANY_ARGS, contracts.iterator());
323 provider.expect("close");
324
325 assertEquals(
326 "THELMA LOU REQUESTOR",
327 manager.getRequestorsForIntercessor("JOE BOB INTERCESSOR").get(0));
328 }
329
330 public void testSearchWhenNoUsersAreSpecified() {
331 PrayerRequestQuery query = new PrayerRequestQuery(new Hashtable());
332
333
334 UserContract contract = new UserContract();
335 contract.setRequestorUserId("THELMA LOU REQUESTOR");
336 contract.setRequesteeUserId("JOE BOB INTERCESSOR");
337 List contracts = Collections.singletonList(contract);
338
339 provider.expectAndReturn("getSession", (Session)session.proxy());
340 session.expectAndReturn("iterate", C.ANY_ARGS, contracts.iterator());
341 provider.expect("close");
342
343
344 PrayerRequestQuery modifiedQuery =
345 new PrayerRequestQuery(new Hashtable());
346 modifiedQuery.getRequestorUserIds().add("THELMA LOU REQUESTOR");
347
348
349 Integer prayerRequestId = new Integer(42);
350 searcher.expectAndReturn(
351 "search",
352 modifiedQuery,
353 Collections.singletonList(prayerRequestId));
354
355
356 PrayerRequest request = new PrayerRequest();
357 request.setRequestorUserId("THELMA LOU REQUESTOR");
358
359 provider.expectAndReturn("getSession", (Session)session.proxy());
360 session.expectAndReturn("get", C.ANY_ARGS, request);
361 session.expectAndReturn(
362 "find",
363 C.ANY_ARGS,
364 Collections.singletonList(new UserContract()));
365 provider.expect("close");
366
367
368 List results = manager.search("JOE BOB INTERCESSOR", query);
369 assertEquals(1, results.size());
370 assertSame(request, results.get(0));
371 }
372
373 public void testSearchWhenUsersAreSpecified() {
374 PrayerRequestQuery query = new PrayerRequestQuery(new Hashtable());
375 query.getRequestorUserIds().add("THELMA LOU REQUESTOR");
376 query.getRequestorUserIds().add("REQUESTOR WE SHOULD NOT SEE");
377
378
379 UserContract contract = new UserContract();
380 contract.setRequestorUserId("THELMA LOU REQUESTOR");
381 contract.setRequesteeUserId("JOE BOB INTERCESSOR");
382 List contracts = Collections.singletonList(contract);
383
384 provider.expectAndReturn("getSession", (Session)session.proxy());
385 session.expectAndReturn("iterate", C.ANY_ARGS, contracts.iterator());
386 provider.expect("close");
387
388
389 PrayerRequestQuery modifiedQuery =
390 new PrayerRequestQuery(new Hashtable());
391 modifiedQuery.getRequestorUserIds().add("THELMA LOU REQUESTOR");
392
393
394 Integer prayerRequestId = new Integer(42);
395 searcher.expectAndReturn(
396 "search",
397 modifiedQuery,
398 Collections.singletonList(prayerRequestId));
399
400
401 PrayerRequest request = new PrayerRequest();
402 request.setRequestorUserId("THELMA LOU REQUESTOR");
403 provider.expectAndReturn("getSession", (Session)session.proxy());
404 session.expectAndReturn("get", C.ANY_ARGS, request);
405 session.expectAndReturn(
406 "find",
407 C.ANY_ARGS,
408 Collections.singletonList(new UserContract()));
409 provider.expect("close");
410
411
412 List results = manager.search("JOE BOB INTERCESSOR", query);
413 assertEquals(1, results.size());
414 assertSame(request, results.get(0));
415 }
416
417 public void testAddComment() {
418 PrayerComment comment = new PrayerComment();
419
420 provider.expectAndReturn("getSession", (Session)session.proxy());
421 session.expect("save", comment);
422 provider.expect("commit");
423
424 assertTrue(manager.addComment(comment));
425 }
426
427 public void testAddCommentHandlesException() {
428 PrayerComment comment = new PrayerComment();
429
430 provider.expectAndReturn("getSession", (Session)session.proxy());
431 session.expectAndThrow(
432 "save",
433 comment,
434 new HibernateException("Bad comment"));
435 provider.expect("reset");
436
437 assertFalse(manager.addComment(comment));
438 }
439
440 public void testGetCommentsByPrayerId() {
441 PrayerRequest request = new PrayerRequest();
442 request.setId(new Integer(0));
443 PrayerComment comment = new PrayerComment();
444 comment.setParentRequest(request);
445 List comments = Collections.singletonList(comment);
446
447 provider.expectAndReturn("getSession", (Session)session.proxy());
448 session.expectAndReturn("find", C.ANY_ARGS, comments);
449 provider.expect("close");
450
451 assertEquals(comments, manager.getCommentsByPrayerId(new Integer(0)));
452 }
453
454 public void testUpdateStatus() {
455 PrayerRequest request = new PrayerRequest();
456 request.setId(new Integer(0));
457 request.setStatus(PrayerRequest.CLOSED);
458
459 provider.expectAndReturn("getSession", (Session)session.proxy());
460 session.expectAndReturn(
461 "get",
462 C.args(C.eq(PrayerRequest.class), C.eq(request.getId())),
463 request);
464 session.expect("update", request);
465 provider.expect("commit");
466 searcher.expect("updateStatus", request);
467 assertTrue(manager.updateStatus(request));
468 }
469 }