1   package com.atlassian.user.impl.memory.search.query;
2   
3   import com.atlassian.user.GroupManager;
4   import com.atlassian.user.UserManager;
5   import com.atlassian.user.generic.AbstractEntityQueryParserTest;
6   import com.atlassian.user.impl.memory.MemoryGroupManager;
7   import com.atlassian.user.impl.memory.MemoryUserManager;
8   import com.atlassian.user.repository.RepositoryIdentifier;
9   import com.atlassian.user.search.query.*;
10  import com.atlassian.user.search.page.Pager;
11  import com.atlassian.user.search.page.PagerUtils;
12  import com.atlassian.user.search.SearchResult;
13  
14  import java.util.List;
15  import java.util.ArrayList;
16  
17  public class TestDefaultEntityQueryParserWithMemory extends AbstractEntityQueryParserTest
18  {
19      protected MemoryGroupManager memoryGroupManager;
20      protected MemoryUserManager memoryUserManager;
21      private EntityQueryParser entityQueryParser;
22      private RepositoryIdentifier memoryIdentifier;
23  
24      protected String[] getConfigLocations()
25      {
26          return new String[]{
27              "classpath:com/atlassian/user/impl/memory/memoryTestContext.xml",
28          };
29      }
30  
31      protected void onSetUp() throws Exception
32      {
33          super.onSetUp();
34          entityQueryParser = new DefaultEntityQueryParser(memoryIdentifier, getUserManager(), getGroupManager());
35      }
36  
37      protected void onTearDown() throws Exception
38      {
39          setDirty();
40          super.onTearDown();
41      }
42  
43      public void setMemoryGroupManager(MemoryGroupManager memoryGroupManager)
44      {
45          this.memoryGroupManager = memoryGroupManager;
46      }
47  
48      public void setMemoryUserManager(MemoryUserManager memoryUserManager)
49      {
50          this.memoryUserManager = memoryUserManager;
51      }
52  
53      public void setMemoryIdentifier(RepositoryIdentifier memoryIdentifier)
54      {
55          this.memoryIdentifier = memoryIdentifier;
56      }
57  
58      protected RepositoryIdentifier getRepositoryIdentifier()
59      {
60          return memoryIdentifier;
61      }
62  
63      protected UserManager getUserManager()
64      {
65          return memoryUserManager;
66      }
67  
68      protected GroupManager getGroupManager()
69      {
70          return memoryGroupManager;
71      }
72  
73      protected EntityQueryParser getEntityQueryParser()
74      {
75          return entityQueryParser;
76      }
77  
78  
79      public void testWildcardSearch() throws Exception
80      {
81          createTestUsers();
82          UserNameTermQuery query = new UserNameTermQuery("", TermQuery.SUBSTRING_CONTAINS);
83          Pager users = getEntityQueryParser().findUsers(query).pager();
84          assertEquals(4, PagerUtils.count(users));
85      }
86  
87      public void testNestedBooleanOrQuery() throws Exception
88      {
89          createTestUsers();
90  
91          TermQuery q1 = new UserNameTermQuery("r", TermQuery.SUBSTRING_CONTAINS);
92          TermQuery q2 = new EmailTermQuery("org", TermQuery.SUBSTRING_CONTAINS);
93  
94          TermQuery q3 = new UserNameTermQuery("bob", TermQuery.SUBSTRING_CONTAINS);
95          TermQuery q4 = new EmailTermQuery("acme", TermQuery.SUBSTRING_CONTAINS);
96  
97          // construct: q1 AND q2 AND (q3 OR q4)
98          List<Query> queries = new ArrayList<Query>();
99          queries.add(q1);
100         queries.add(q2);
101         BooleanQuery query = new TwoTermBooleanQuery(q3, q4, BooleanQuery.AND);
102         queries.add(query);
103         MultiTermBooleanQuery parentQuery2 = new MultiTermBooleanQuery(queries.toArray(new Query[1]), false);
104         SearchResult result = getEntityQueryParser().findUsers(parentQuery2);
105         Pager pager = result.pager();
106 
107         assertEquals(4, pager.getCurrentPage().size());
108         assertTrue(pagerContainsUsername(pager, "icarus"));
109         assertTrue(pagerContainsUsername(pager, "orpheus"));
110         assertTrue(pagerContainsUsername(pager, "peter"));
111         assertTrue(pagerContainsUsername(pager, "bob"));
112     }
113 
114 }