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 }