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