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