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