1 package org.marketchangers.prayer;
2
3 import java.text.ParseException;
4 import java.text.SimpleDateFormat;
5 import java.util.Collections;
6 import java.util.Date;
7 import java.util.Hashtable;
8 import java.util.Map;
9
10 import junit.framework.TestCase;
11
12 /***
13 * @author <a href="mailto:mtodd@wc-group.com">Matthew Todd</a>
14 * @author <a href="mailto:jniu@wc-group.com">Jianshuo Niu</a>
15 */
16 public class PrayerRequestQueryTest extends TestCase {
17 public void testHasAMapBasedConstructor() {
18 new PrayerRequestQuery(new Hashtable());
19 }
20
21 public void testProvidesBeanViewOfParametersInTheMap() throws Exception {
22 Map parameters = new Hashtable();
23 parameters.put("categoryName", array("pigs feet"));
24 parameters.put("endDate", array("08-04-2004"));
25 parameters.put("organizationName", array("wcg"));
26 parameters.put("requestorUserId", array("jniu@wc-group.com"));
27 parameters.put("searchTerms", array("pickled"));
28 parameters.put("startDate", array("04-03-1978"));
29 parameters.put("status", array(PrayerRequest.OPEN));
30
31 PrayerRequestQuery query = new PrayerRequestQuery(parameters);
32
33 assertEquals("pigs feet", query.getCategoryName());
34 assertEquals(date("08-04-2004"), query.getEndDate());
35 assertEquals("wcg", query.getOrganizationName());
36 assertEquals(1, query.getRequestorUserIds().size());
37 assertEquals("pickled", query.getSearchTerms());
38 assertEquals(date("04-03-1978"), query.getStartDate());
39 assertEquals(PrayerRequest.OPEN, query.getStatus());
40
41 assertTrue(query.getRequestorUserIds().contains("jniu@wc-group.com"));
42
43 assertTrue(query.hasCategoryName());
44 assertTrue(query.hasEndDate());
45 assertTrue(query.hasOrganizationName());
46 assertTrue(query.hasRequestorUserIds());
47 assertTrue(query.hasSearchTerms());
48 assertTrue(query.hasStartDate());
49 assertTrue(query.hasStatus());
50 assertTrue(query.hasValidDate());
51 }
52
53 public void testDoesNotHaveInvalidDates() {
54 Map parameters = new Hashtable();
55 parameters.put("startDate", array("wibble"));
56 parameters.put("endDate", array("wobble"));
57
58 PrayerRequestQuery query = new PrayerRequestQuery(parameters);
59
60 assertFalse(query.hasStartDate());
61 assertNull(query.getStartDate());
62 assertFalse(query.hasValidDate());
63
64 assertFalse(query.hasEndDate());
65 assertNull(query.getEndDate());
66 }
67
68 public void testDoesNotHaveMissingValues() {
69 PrayerRequestQuery query = new PrayerRequestQuery(new Hashtable());
70
71 assertFalse(query.hasCategoryName());
72 assertFalse(query.hasEndDate());
73 assertFalse(query.hasOrganizationName());
74 assertFalse(query.hasRequestorUserIds());
75 assertFalse(query.hasSearchTerms());
76 assertFalse(query.hasStartDate());
77 assertFalse(query.hasStatus());
78
79 assertNull(query.getCategoryName());
80 assertNull(query.getEndDate());
81 assertNull(query.getOrganizationName());
82 assertNull(query.getSearchTerms());
83 assertNull(query.getStartDate());
84 assertNull(query.getStatus());
85
86 assertTrue(query.getRequestorUserIds().isEmpty());
87 }
88
89 public void testDoesNotHaveEmptyValues() {
90 Map parameters = new Hashtable();
91 parameters.put("categoryName", array(""));
92 parameters.put("endDate", array(""));
93 parameters.put("organizationName", array(""));
94 parameters.put("requestorUserId", array(""));
95 parameters.put("searchTerms", array(""));
96 parameters.put("startDate", array(""));
97 parameters.put("status", array(""));
98
99 PrayerRequestQuery query = new PrayerRequestQuery(parameters);
100
101 assertFalse(query.hasCategoryName());
102 assertFalse(query.hasEndDate());
103 assertFalse(query.hasOrganizationName());
104 assertFalse(query.hasRequestorUserIds());
105 assertFalse(query.hasSearchTerms());
106 assertFalse(query.hasStartDate());
107 assertFalse(query.hasStatus());
108
109 assertNull(query.getCategoryName());
110 assertNull(query.getEndDate());
111 assertNull(query.getOrganizationName());
112 assertNull(query.getSearchTerms());
113 assertNull(query.getStartDate());
114 assertNull(query.getStatus());
115
116 assertTrue(query.getRequestorUserIds().isEmpty());
117 }
118
119 public void testCanAddAdditionalRequestorUserIds() {
120 PrayerRequestQuery query = new PrayerRequestQuery(new Hashtable());
121
122 assertFalse(query.hasRequestorUserIds());
123
124 query.getRequestorUserIds().addAll(
125 Collections.singletonList("JOE BOB"));
126
127 assertTrue(query.hasRequestorUserIds());
128
129 assertEquals(1, query.getRequestorUserIds().size());
130 assertTrue(query.getRequestorUserIds().contains("JOE BOB"));
131 }
132
133 public void testCanRetainCertainRequestorUserIds() {
134 PrayerRequestQuery query = new PrayerRequestQuery(new Hashtable());
135
136 query.getRequestorUserIds().add("JOE BOB");
137 query.getRequestorUserIds().add("THELMA LOU");
138 query.getRequestorUserIds().add("MATTHEW");
139 query.getRequestorUserIds().add("JIANSHUO");
140
141 assertEquals(4, query.getRequestorUserIds().size());
142
143 query.getRequestorUserIds().retainAll(
144 Collections.singleton("JIANSHUO"));
145
146 assertEquals(1, query.getRequestorUserIds().size());
147 }
148
149 public void testImplementsEqualsAndHashCode() {
150 PrayerRequestQuery one = new PrayerRequestQuery(new Hashtable());
151 PrayerRequestQuery another = new PrayerRequestQuery(new Hashtable());
152
153 assertEquals(one, another);
154 assertEquals(one.hashCode(), another.hashCode());
155 }
156
157
158 private String[] array(String value) {
159 return new String[] { value };
160 }
161
162 private Date date(String value) throws ParseException {
163 return new SimpleDateFormat("MM-dd-yyyy").parse(value);
164 }
165 }