1   package com.atlassian.user.impl.hibernate.search;
2   
3   import com.atlassian.user.GroupManager;
4   import com.atlassian.user.User;
5   import com.atlassian.user.UserManager;
6   import com.atlassian.user.generic.AbstractEntityQueryParserTest;
7   import com.atlassian.user.impl.hibernate.HibernateGroupManager;
8   import com.atlassian.user.impl.hibernate.HibernateUserManager;
9   import com.atlassian.user.impl.hibernate.repository.HibernateRepository;
10  import com.atlassian.user.impl.hibernate.search.query.HibernateEntityQueryParser;
11  import com.atlassian.user.repository.RepositoryIdentifier;
12  import com.atlassian.user.search.SearchResult;
13  import com.atlassian.user.search.page.Pager;
14  import com.atlassian.user.search.page.PagerUtils;
15  import com.atlassian.user.search.query.*;
16  
17  import java.util.List;
18  
19  public class TestHibernateEntityQueryParser extends AbstractEntityQueryParserTest
20  {
21      protected HibernateGroupManager hibernateGroupManager;
22      protected HibernateUserManager hibernateUserManager;
23      private EntityQueryParser entityQueryParser;
24      private HibernateRepository hibernateRepository;
25      private RepositoryIdentifier hibernateIdentifier;
26  
27      protected String[] getConfigLocations()
28      {
29          return new String[]{
30              "classpath:com/atlassian/user/dataSourceTestContext.xml",
31              "classpath:com/atlassian/user/impl/hibernate/hibernateTestContext.xml",
32          };
33      }
34  
35      protected void onSetUp() throws Exception
36      {
37          super.onSetUp();
38          entityQueryParser = new HibernateEntityQueryParser(hibernateIdentifier, hibernateRepository);
39      }
40  
41      public void setHibernateRepository(HibernateRepository hibernateRepository)
42      {
43          this.hibernateRepository = hibernateRepository;
44      }
45  
46      public void setHibernateGroupManager(HibernateGroupManager hibernateGroupManager)
47      {
48          this.hibernateGroupManager = hibernateGroupManager;
49      }
50  
51      public void setHibernateUserManager(HibernateUserManager hibernateUserManager)
52      {
53          this.hibernateUserManager = hibernateUserManager;
54      }
55  
56      public void setHibernateIdentifier(RepositoryIdentifier repositoryIdentifier)
57      {
58          this.hibernateIdentifier = repositoryIdentifier;
59      }
60  
61      protected RepositoryIdentifier getRepositoryIdentifier()
62      {
63          return hibernateIdentifier;
64      }
65  
66      protected UserManager getUserManager()
67      {
68          return hibernateUserManager;
69      }
70  
71      protected GroupManager getGroupManager()
72      {
73          return hibernateGroupManager;
74      }
75  
76      protected EntityQueryParser getEntityQueryParser()
77      {
78          return entityQueryParser;
79      }
80  
81      public void testBooleanQuery() throws Exception
82      {
83          User user = getUserManager().createUser("fred");
84          user.setFullName("fred smithers");
85          user.setEmail("fred.smithers@test");
86          getUserManager().saveUser(user);
87  
88          User user1 = getUserManager().createUser("mary");
89          user1.setFullName("mary unpoppinthis");
90          user1.setEmail("mary.unpoppinthis@test");
91          getUserManager().saveUser(user1);
92  
93          User user2 = getUserManager().createUser("peter");
94          user2.setFullName("peter puker");
95          user2.setEmail("peter.puker@test");
96          getUserManager().saveUser(user2);
97  
98          User user3 = getUserManager().createUser("chronos");
99          user3.setFullName("chronos iatealotofgods");
100         user3.setEmail("chronos.iatealotofgods@test");
101         getUserManager().saveUser(user3);
102 
103         UserNameTermQuery nameQuery = new UserNameTermQuery("e", TermQuery.SUBSTRING_CONTAINS);
104         EmailTermQuery emailQuery = new EmailTermQuery("@tes", TermQuery.SUBSTRING_CONTAINS);
105         BooleanQuery query = new MultiTermBooleanQuery(new Query[]{nameQuery, emailQuery}, true);
106 
107         SearchResult result = getEntityQueryParser().findUsers(query);
108         Pager pager = result.pager();
109 
110         assertEquals(2, PagerUtils.count(pager));
111 
112         nameQuery = new UserNameTermQuery("r", TermQuery.SUBSTRING_CONTAINS);
113         emailQuery = new EmailTermQuery("unpoppinthis", TermQuery.SUBSTRING_CONTAINS);
114         query = new MultiTermBooleanQuery(new Query[]{nameQuery, emailQuery}, true);
115 
116         result = getEntityQueryParser().findUsers(query);
117         pager = result.pager();
118 
119         assertEquals(1, PagerUtils.count(pager));
120         assertTrue(pager.getCurrentPage().contains(user1));
121 
122         query = new MultiTermBooleanQuery(new Query[]{nameQuery, emailQuery}, false);
123 
124         result = getEntityQueryParser().findUsers(query);
125         pager = result.pager();
126 
127         assertEquals(4, PagerUtils.count(pager));
128         assertTrue(pager.getCurrentPage().contains(user));
129         assertTrue(pager.getCurrentPage().contains(user1));
130         assertTrue(pager.getCurrentPage().contains(user2));
131         assertTrue(pager.getCurrentPage().contains(user3));
132 
133         UserNameTermQuery nameQuery2 = new UserNameTermQuery("mary");
134         FullNameTermQuery fnQuery = new FullNameTermQuery("smithers", TermQuery.SUBSTRING_CONTAINS);
135         BooleanQuery query2 = new TwoTermBooleanQuery(nameQuery2, fnQuery, false);
136 
137         result = getEntityQueryParser().findUsers(query2);
138         pager = result.pager();
139         List currentPage = pager.getCurrentPage();
140 
141         assertEquals(2, currentPage.size());
142         assertTrue(currentPage.contains(user));
143         assertTrue(currentPage.contains(user1));
144     }
145 }