1 /***
2 Copyright (C) 2005 The Java Community
3
4 This program is free software; you can redistribute it and/or modify it under
5 the terms of the GNU General Public License as published by the Free Software
6 Foundation; either version 2 of the License, or (at your option) any later
7 version.
8
9 This program is distributed in the hope that it will be useful, but WITHOUT
10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License along with
14 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
15 Place, Suite 330, Boston, MA 02111-1307 USA.
16
17 */
18 package org.bejug.javacareers.jobs.dao.hibernate.common;
19
20 import java.sql.Timestamp;
21 import java.util.ArrayList;
22 import java.util.Calendar;
23 import java.util.GregorianCalendar;
24 import java.util.ListIterator;
25
26 import org.apache.commons.logging.Log;
27 import org.apache.commons.logging.LogFactory;
28 import org.bejug.javacareers.acceptance.WelcomePageTests;
29 import org.bejug.javacareers.common.search.Criterium;
30 import org.bejug.javacareers.common.search.SearchCriteria;
31 import org.bejug.javacareers.common.search.SearchCriteriaFactory;
32 import org.bejug.javacareers.common.search.SearchCriteriaService;
33 import org.bejug.javacareers.jobs.common.AbstractSpringContextDBUnitTests;
34 import org.bejug.javacareers.jobs.model.AbstractPersistableObject;
35 import org.bejug.javacareers.jobs.model.JobOffer;
36 import org.bejug.javacareers.jobs.model.Offer;
37 import org.bejug.javacareers.jobs.model.OfferType;
38 import org.bejug.javacareers.jobs.model.Organisation;
39 import org.bejug.javacareers.jobs.model.Profile;
40 import org.springframework.dao.DataAccessException;
41
42
43 /***
44 * @author Bart Meyers (last modified by $Author: bme_jcs $)
45 * @version $Revision: 1.9 $ $Date: 2005/08/31 12:16:43 $
46 */
47 public class SearchCriteriaServiceHibernateTests extends
48 AbstractSpringContextDBUnitTests {
49
50 /***
51 * the logger.
52 */
53 private static final Log LOG = LogFactory.getLog(WelcomePageTests.class);
54
55 /***
56 * the needed tablenames.
57 */
58 private static final String[] TABLE_NAMES = {"Resume", "Parameter", "Country",
59 "Region", "Address", "Organisation", "Contact", "Person", "User",
60 "Offer", "JobOffer", "Offer_OfferType", "Offer_Profile"};
61
62 /***
63 * the needed service.
64 */
65 protected SearchCriteriaService searchCriteriaService;
66
67 /***
68 * the factory for the searchCriteria
69 */
70 protected SearchCriteriaFactory searchCriteriaFactory;
71
72 /***
73 * @return searchCriteriaServiceHibernate SearchCriteriaService
74 */
75 public SearchCriteriaService getSearchCriteriaService() {
76 return searchCriteriaService;
77 }
78
79 /***
80 * test the services
81 */
82 public void xtestServices() {
83 assertNotNull(getSearchCriteriaService());
84 }
85
86 /***
87 * testLikeQuery
88 *
89 * @throws DataAccessException if something goes wrong
90 */
91 public void testLikeQuery() throws DataAccessException {
92 SearchCriteria searchCriteria =
93 searchCriteriaFactory.createSearchCriteria(Profile.class);
94 searchCriteria.addLikeCriterium("description", "Persoon%");
95 ArrayList parameters =
96 (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
97 assertNotNull(parameters);
98 assertTrue(parameters.size() + " parameters found expected 5",
99 parameters.size() == 5);
100
101 }
102
103 /***
104 * testAbstractQuery
105 *
106 * @throws DataAccessException if something goes wrong
107 */
108 public void testAbstractQuery() throws DataAccessException {
109 AbstractPersistableObject persistableObject = null;
110 SearchCriteria searchCriteria =
111 searchCriteriaFactory.createSearchCriteria(AbstractPersistableObject.class);
112 ArrayList parameters =
113 (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
114 assertNotNull(parameters);
115 for (ListIterator lit = parameters.listIterator(); lit.hasNext(); ) {
116 persistableObject = (AbstractPersistableObject) lit.next();
117 LOG.debug(persistableObject.getCreationDate());
118 }
119 }
120
121 /***
122 * testPaginationQuery
123 *
124 * @throws DataAccessException if something goes wrong
125 */
126 public void testPaginationQuery() throws DataAccessException {
127 SearchCriteria searchCriteria =
128 searchCriteriaFactory.createSearchCriteria(Profile.class);
129 searchCriteria.setResultsPerPage(2);
130 searchCriteria.setPageNumber(1);
131 ArrayList parameters =
132 (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
133 assertNotNull(parameters);
134 assertEquals(parameters.size(), 2);
135 searchCriteria.setPageNumber(2);
136 parameters =
137 (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
138 assertNotNull(parameters);
139 assertEquals(parameters.size(), 2);
140 searchCriteria.setPageNumber(3);
141 parameters =
142 (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
143 assertNotNull(parameters);
144 assertEquals(parameters.size(), 2);
145 searchCriteria.setPageNumber(4);
146 parameters =
147 (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
148 assertNotNull(parameters);
149 assertEquals(parameters.size(), 0);
150 searchCriteria.setPageNumber(1000);
151 parameters =
152 (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
153 assertNotNull(parameters);
154 assertEquals(parameters.size(), 0);
155 }
156
157 /***
158 * testPaginationQuery
159 *
160 * @throws DataAccessException if something goes wrong
161 */
162 public void testOrderQuery() throws DataAccessException {
163 SearchCriteria searchCriteria =
164 searchCriteriaFactory.createSearchCriteria(Profile.class);
165 searchCriteria.addAscendingOrder("name");
166 ArrayList parameters =
167 (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
168 assertNotNull(parameters);
169 Profile profile = (Profile) parameters.get(0);
170 assertEquals(profile.getName(), "Freelancer");
171 searchCriteria =
172 searchCriteriaFactory.createSearchCriteria(Profile.class);
173 searchCriteria.addDescendingOrder("name");
174 parameters =
175 (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
176 assertNotNull(parameters);
177 profile = (Profile) parameters.get(0);
178 assertEquals(profile.getName(), "Werkzoekende");
179 searchCriteria = searchCriteriaFactory.createSearchCriteria(JobOffer.class);
180 searchCriteria.addDescendingOrder("creationDate");
181 parameters = (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
182 assertNotNull(parameters);
183
184 }
185
186 /***
187 * testEqualsParameterQuery
188 *
189 * @throws DataAccessException if something goes wrong
190 */
191 public void testEqualsParameterQuery() throws DataAccessException {
192 SearchCriteria searchCriteria =
193 searchCriteriaFactory.createSearchCriteria(Profile.class);
194 searchCriteria.addEqualsCriterium("name", "Senior");
195 ArrayList parameters =
196 (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
197 assertNotNull(parameters);
198 assertTrue(parameters.size() + " parameters found expected 1",
199 parameters.size() == 1);
200 assertTrue(((Profile) parameters.get(0)).getId().intValue() == 3000);
201 }
202
203 /***
204 * testLikeAndEqualsParameterQuery
205 *
206 * @throws DataAccessException if something goes wrong
207 */
208 public void testLikeAndEqualsParameterQuery() throws DataAccessException {
209 SearchCriteria searchCriteria =
210 searchCriteriaFactory.createSearchCriteria(OfferType.class);
211 searchCriteria.addLikeCriterium("description", "J2EE%");
212 searchCriteria.addEqualsCriterium("name", "Programmeur");
213 ArrayList parameters =
214 (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
215 assertNotNull(parameters);
216 assertTrue(parameters.size() + " parameters found expected 1",
217 parameters.size() == 1);
218 assertTrue(((OfferType) parameters.get(0)).getId().intValue() == 1002);
219 }
220
221 /***
222 * testequalsOrParameterQuery
223 *
224 * @throws DataAccessException if something goes wrong
225 */
226 public void testequalsOrParameterQuery() throws DataAccessException {
227 SearchCriteria searchCriteria =
228 searchCriteriaFactory.createSearchCriteria(OfferType.class);
229 searchCriteria.addEqualsCriterium("name", "Architect");
230 searchCriteria.addEqualsCriterium("name", "Projectmanager",
231 Criterium.LOGICAL_OR);
232 ArrayList parameters =
233 (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
234 assertNotNull(parameters);
235 assertTrue(parameters.size() + " parameters found expected 2",
236 parameters.size() == 2);
237 }
238
239 /***
240 * testBetweenParameterQuery
241 *
242 * @throws DataAccessException if something goes wrong
243 */
244 public void testBetweenParameterQuery() throws DataAccessException {
245 SearchCriteria searchCriteria =
246 searchCriteriaFactory.createSearchCriteria(Profile.class);
247 searchCriteria.addBetweenCriterium("id", new Integer(3000),
248 new Integer(3004));
249 ArrayList parameters =
250 (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
251 assertNotNull(parameters);
252 assertTrue(parameters.size() + " parameters found expected 5",
253 parameters.size() == 5);
254 }
255
256 /***
257 * testGreaterThenParameterQuery
258 *
259 * @throws DataAccessException if something goes wrong
260 */
261 public void testGreaterThenParameterQuery() throws DataAccessException {
262 SearchCriteria searchCriteria =
263 searchCriteriaFactory.createSearchCriteria(Profile.class);
264 searchCriteria.addGreaterThanCriterium("id", new Integer(3000));
265 ArrayList parameters =
266 (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
267 assertNotNull(parameters);
268 assertTrue(parameters.size() + " parameters found expected 6",
269 parameters.size() == 5);
270 }
271
272 /***
273 * testInParameterQuery
274 *
275 * @throws DataAccessException if something goes wrong
276 */
277 public void testInParameterQuery() throws DataAccessException {
278 SearchCriteria searchCriteria =
279 searchCriteriaFactory.createSearchCriteria(Profile.class);
280 Integer[] ids = new Integer[3];
281 ids[0] = new Integer(3001);
282 ids[1] = new Integer(3002);
283 ids[2] = new Integer(10000);
284 searchCriteria.addInCriterium("id", ids);
285 ArrayList parameters =
286 (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
287 assertNotNull(parameters);
288 assertTrue(parameters.size() + " parameters found expected 2",
289 parameters.size() == 2);
290 }
291
292
293 /***
294 * testMore criteris in one ParameterQuery
295 *
296 * @throws DataAccessException if something goes wrong
297 */
298 public void testMoreCriteriaParameterQuery() throws DataAccessException {
299 SearchCriteria searchCriteria =
300 searchCriteriaFactory.createSearchCriteria(OfferType.class);
301 searchCriteria.addLikeCriterium("description", "J2EE%");
302 searchCriteria.addEqualsCriterium("name", "Programmeur");
303 searchCriteria.addGreaterThanCriterium("id", new Integer(1000));
304 searchCriteria.addGreaterThanCriterium("creationDate", new Timestamp(0L));
305 searchCriteria.addBetweenCriterium("creationDate",
306 new GregorianCalendar(2005, Calendar.FEBRUARY, 9).getTime(),
307 new GregorianCalendar().getTime());
308 ArrayList parameters =
309 (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
310 assertNotNull(parameters);
311 assertTrue(parameters.size() + " parameters found expected 1",
312 parameters.size() == 1);
313 assertTrue(((OfferType) parameters.get(0)).getId().intValue() == 1002);
314 }
315
316
317 /***
318 * test search on associated classes.
319 *
320 * @throws DataAccessException if something goes wrong
321 */
322 public void testAssociatedClassesUserQuery() throws DataAccessException {
323 SearchCriteria searchCriteria =
324 searchCriteriaFactory.createSearchCriteria(Organisation.class);
325 searchCriteria.addEqualsCriterium("address.name", "Kontich");
326 ArrayList parameters =
327 (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
328 assertNotNull(parameters);
329 assertTrue(((org.bejug.javacareers.jobs.model.Organisation) parameters.get(0)).
330 getId().intValue() == 1000);
331 searchCriteria =
332 searchCriteriaFactory.createSearchCriteria(JobOffer.class);
333 searchCriteria.addEqualsCriterium("profiles.name", "Senior");
334 ArrayList jobOffers = (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
335 assertNotNull(jobOffers);
336 searchCriteria =
337 searchCriteriaFactory.createSearchCriteria(Offer.class);
338 searchCriteria.addEqualsCriterium("user.organisation.name", "Real Software");
339 jobOffers = (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
340 assertEquals(jobOffers.size(), 5);
341 searchCriteria =
342 searchCriteriaFactory.createSearchCriteria(Offer.class);
343 searchCriteria.addEqualsCriterium("user.organisation.address.name", "Kontich");
344 parameters = (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
345 assertNotNull(parameters);
346 searchCriteria =
347 searchCriteriaFactory.createSearchCriteria(Offer.class);
348 searchCriteria.addLikeCriterium("location", "Loppem");
349 searchCriteria.addEqualsCriterium("user.userName", "sven");
350 parameters = (ArrayList) getSearchCriteriaService().executeQuery(searchCriteria);
351 assertEquals(parameters.size(), 1);
352
353
354 }
355
356
357 /***
358 * tests whether the count-functionality works in the SearchCriteria.
359 *
360 * @throws DataAccessException when something went wrong when accessing the
361 * database.
362 */
363 public void testCountQuery() throws DataAccessException {
364 SearchCriteria searchCriteria =
365 searchCriteriaFactory.createSearchCriteria(OfferType.class);
366 int numberOfOfferTypes = getSearchCriteriaService().
367 executeCountQuery(searchCriteria);
368 if (numberOfOfferTypes == 0) {
369 assertTrue(false);
370 }
371 }
372
373
374 /***
375 * {@inheritDoc}
376 */
377 public void onSetUpInTransaction() throws Exception {
378 init(TABLE_NAMES);
379
380 }
381
382 }
383
384 /***
385 * $Log: SearchCriteriaServiceHibernateTests.java,v $
386 * Revision 1.9 2005/08/31 12:16:43 bme_jcs
387 * refactoring of the abstract base-classes
388 *
389 * Revision 1.8 2005/08/24 08:47:08 ge0ffrey
390 * fix for added resume fix
391 *
392 * Revision 1.7 2005/08/23 09:32:04 bme_jcs
393 * introduction of ItemService-classes
394 *
395 * Revision 1.6 2005/08/17 10:39:37 bme_jcs
396 * little change for test for ordering the searchcriteria-results
397 *
398 * Revision 1.5 2005/08/11 13:04:30 bme_jcs
399 * update searchCriteria to support ordering and paging
400 *
401 * Revision 1.4 2005/08/03 09:10:58 ge0ffrey
402 * JAVACAREERS-247
403 *
404 * Revision 1.3 2005/06/29 09:00:26 psong09
405 * comment component updated
406 *
407 * Revision 1.2 2005/06/09 08:19:04 bejug_cc
408 * Fix initial import
409 *
410 * Revision 1.8 2005/06/01 09:12:25 bme
411 * introduction of a factory for the searchCriteria
412 *
413 * Revision 1.7 2005/05/31 14:10:18 bme
414 * introducing aliasses for use of the dotnotation
415 *
416 * Revision 1.6 2005/05/31 07:36:08 bme
417 * introduced count-functionality
418 *
419 * Revision 1.5 2005/05/26 14:59:31 ssc
420 * added Searchcriteria tests
421 *
422 * Revision 1.4 2005/05/25 15:38:45 ssc
423 * Optimized tests for search criteria
424 *
425 * Revision 1.3 2005/05/17 14:22:17 ssc
426 * checkstyle
427 *
428 * Revision 1.2 2005/05/13 14:08:21 bme
429 * added some tests
430 *
431 * Revision 1.1 2005/05/12 14:27:23 bme
432 * First Draft
433 *
434 */