1 package org.marketchangers.prayer.hibernate;
2
3 import java.util.Date;
4 import java.util.Iterator;
5 import java.util.List;
6 import java.util.Properties;
7
8 import junit.framework.TestCase;
9 import net.sf.hibernate.HibernateException;
10 import net.sf.hibernate.cfg.Configuration;
11 import net.sf.hibernate.cfg.Environment;
12 import net.sf.hibernate.dialect.HSQLDialect;
13
14 import org.marketchangers.prayer.PrayerCategory;
15 import org.marketchangers.prayer.PrayerComment;
16 import org.marketchangers.prayer.PrayerRequest;
17 import org.marketchangers.prayer.PrayerRequestManager;
18 import org.marketchangers.prayer.PrayerRequestSearcher;
19 import org.marketchangers.prayer.UserContract;
20 import org.nanocontainer.hibernate.LifecycleSessionProvider;
21
22 /***
23 * @author <a href="mailto:jwilliams@wc-group.com">Jason Williams</a>
24 */
25 public class HibernatePrayerRequestManagerIntegrationTest extends TestCase {
26 private PrayerRequestManager manager;
27
28
29 protected void setUp() throws Exception {
30 Configuration configuration = new Configuration();
31
32 Properties p = new Properties();
33 p.setProperty(Environment.DRIVER, "org.hsqldb.jdbcDriver");
34 p.setProperty(Environment.URL, "jdbc:hsqldb:.");
35 p.setProperty(Environment.USER, "sa");
36 p.setProperty(Environment.PASS, "");
37 p.setProperty(Environment.HBM2DDL_AUTO, "create-drop");
38 p.setProperty(Environment.DIALECT, HSQLDialect.class.getName());
39 configuration.setProperties(p);
40
41 configuration.addClass(PrayerRequest.class);
42 configuration.addClass(PrayerComment.class);
43 configuration.addClass(PrayerCategory.class);
44 configuration.addClass(UserContract.class);
45
46 manager =
47 new HibernatePrayerRequestManager(
48 PrayerRequestSearcher.NULL_OBJECT,
49 new LifecycleSessionProvider(
50 configuration.buildSessionFactory()));
51 }
52
53
54 public void testCanTalkAllTheWayThroughToHypersonic()
55 throws HibernateException {
56
57 PrayerRequest request = new PrayerRequest();
58 request.setContent("Pray for me");
59 assertTrue(manager.submitPrayerRequest(request));
60 }
61
62 public void testFailsWhenNewCategoryInRequest() {
63 PrayerRequest request = new PrayerRequest();
64 PrayerCategory category = new PrayerCategory();
65 category.setName("new category");
66 request.setCategory(category);
67 assertFalse(manager.submitPrayerRequest(request));
68 }
69
70 public void testSucceedsWhenExistingCategoryInRequest() {
71 PrayerRequest request = new PrayerRequest();
72 PrayerCategory category = new PrayerCategory();
73 category.setName("new category");
74 manager.createPrayerCategory(category);
75 request.setCategory(category);
76 assertTrue(manager.submitPrayerRequest(request));
77 }
78
79 public void testHibernateSetsAnObjectsIdInPlaceOnSave() {
80 PrayerCategory category = new PrayerCategory();
81 category.setName("foo");
82
83 assertNull(category.getId());
84 manager.createPrayerCategory(category);
85 assertNotNull(category.getId());
86 }
87
88 public void testQueriesWithNoResultsComeAsEmptyLists() {
89 assertNull(manager.getPrayerCategory("foo"));
90 }
91
92 public void testFindsCategoryByName() {
93 String categoryName = "My Category";
94 PrayerCategory prayerCategory = new PrayerCategory();
95 prayerCategory.setName(categoryName);
96 prayerCategory.setRequestorUserId("JETHRO");
97
98 manager.createPrayerCategory(prayerCategory);
99
100 PrayerCategory retrievedCategory =
101 manager.getPrayerCategory(categoryName);
102
103 assertEquals(retrievedCategory, prayerCategory);
104 }
105
106 public void testFindsCategoriesByRequestorReturnsEmptyListForNoCategories() {
107 String userid = "JOE BOB HOWDY";
108 Iterator categories =
109 manager.getCategoriesForRequestor(userid).iterator();
110 assertFalse(categories.hasNext());
111 }
112
113 public void testFindsCategoriesByRequestor() {
114 String userid = "JOE BOB HOWDY";
115 PrayerCategory category = new PrayerCategory();
116 category.setName("category 1");
117 category.setRequestorUserId(userid);
118 manager.createPrayerCategory(category);
119
120 PrayerCategory category2 = new PrayerCategory();
121 category.setName("category 2");
122 category.setRequestorUserId(userid);
123 manager.createPrayerCategory(category2);
124
125 Iterator categories =
126 manager.getCategoriesForRequestor(userid).iterator();
127 assertTrue(categories.hasNext());
128 }
129
130 public void testCanRetrieveMoreThanOneIntercessorForARequestor() {
131 UserContract nateRequestorContract = new UserContract();
132 nateRequestorContract.setDate(new Date());
133 nateRequestorContract.setRequesteeUserId("Joe the Intercessor");
134 nateRequestorContract.setRequestorUserId("Nate the Requestor");
135 nateRequestorContract.setStatus(UserContract.ACCEPTED);
136 manager.addContract(nateRequestorContract);
137
138 UserContract noabRequestorContract = new UserContract();
139 noabRequestorContract.setDate(new Date());
140 noabRequestorContract.setRequesteeUserId("Joe the Intercessor");
141 noabRequestorContract.setRequestorUserId("Noab the Requestor");
142 noabRequestorContract.setStatus(UserContract.ACCEPTED);
143 manager.addContract(noabRequestorContract);
144
145 List requestorUserIds =
146 manager.getRequestorsForIntercessor("Joe the Intercessor");
147
148 assertEquals(2, requestorUserIds.size());
149 }
150
151 public void testRequestorCanGetPrayerRequestById() {
152 PrayerRequest request = new PrayerRequest();
153 request.setRequestorUserId("Matthew");
154 request.setStatus(PrayerRequest.OPEN);
155
156 assertNull(request.getId());
157 manager.submitPrayerRequest(request);
158 assertNotNull(request.getId());
159
160 assertEquals(
161 request,
162 manager.getPrayerRequestById("Matthew", request.getId()));
163 }
164
165 public void testIntercessorCanGetPrayerRequestById() {
166 UserContract contract = new UserContract();
167 contract.setRequestorUserId("Matthew");
168 contract.setRequesteeUserId("Noab");
169 contract.setStatus(UserContract.ACCEPTED);
170
171 PrayerRequest request = new PrayerRequest();
172 request.setRequestorUserId("Matthew");
173 request.setStatus(PrayerRequest.OPEN);
174
175 manager.addContract(contract);
176 manager.submitPrayerRequest(request);
177
178 assertEquals(
179 request,
180 manager.getPrayerRequestById("Noab", request.getId()));
181 }
182
183 public void testCannotGetPrayerRequestWithoutUser() {
184 PrayerRequest request = new PrayerRequest();
185 request.setRequestorUserId("Matthew");
186 request.setStatus(PrayerRequest.OPEN);
187
188 manager.submitPrayerRequest(request);
189
190 assertNull(manager.getPrayerRequestById(null, request.getId()));
191 }
192
193 public void testCannotGetPrayerRequestWithUnassociatedUser() {
194 PrayerRequest request = new PrayerRequest();
195 request.setRequestorUserId("Matthew");
196 request.setStatus(PrayerRequest.OPEN);
197
198 manager.submitPrayerRequest(request);
199
200 assertNull(manager.getPrayerRequestById("Noab", request.getId()));
201 }
202
203 public void testCannotGetRequestWithUnacceptedUser() {
204 UserContract contract = new UserContract();
205 contract.setRequestorUserId("Matthew");
206 contract.setRequesteeUserId("Noab");
207 contract.setStatus(UserContract.INITIATED);
208
209 PrayerRequest request = new PrayerRequest();
210 request.setRequestorUserId("Matthew");
211 request.setStatus(PrayerRequest.OPEN);
212
213 manager.addContract(contract);
214 manager.submitPrayerRequest(request);
215
216 assertNull(manager.getPrayerRequestById("Noab", request.getId()));
217 }
218 }