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  	// ----------------------------------------------------------- SetUp Method
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  	// ----------------------------------------------------------- Test Methods
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 }