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 }