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 }