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