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         //   assertTrue(((Profile)parameters.get(0)).getId().intValue() == 3000);
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  */