PageRenderTime 41ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/src/test/java/com/atlassian/confluence/plugins/macros/advanced/SearchMacroTestCase.java

https://bitbucket.org/atlassian/confluence-advanced-macros-plugin
Java | 336 lines | 266 code | 70 blank | 0 comment | 0 complexity | fb71f5a0308dd57b01d2aa9ebf95f97b MD5 | raw file
  1. package com.atlassian.confluence.plugins.macros.advanced;
  2. import bucket.core.persistence.hibernate.HibernateHandle;
  3. import com.atlassian.bonnie.AnyTypeObjectDao;
  4. import com.atlassian.confluence.core.ContentEntityObject;
  5. import com.atlassian.confluence.renderer.PageContext;
  6. import com.atlassian.confluence.search.service.ContentTypeEnum;
  7. import com.atlassian.confluence.search.service.PredefinedSearchBuilder;
  8. import com.atlassian.confluence.search.service.SearchQueryParameters;
  9. import com.atlassian.confluence.search.v2.ISearch;
  10. import com.atlassian.confluence.search.v2.InvalidSearchException;
  11. import com.atlassian.confluence.search.v2.SearchManager;
  12. import com.atlassian.confluence.search.v2.SearchResult;
  13. import com.atlassian.confluence.search.v2.SearchResults;
  14. import com.atlassian.confluence.search.v2.query.DateRangeQuery;
  15. import com.atlassian.confluence.user.ConfluenceUserImpl;
  16. import com.atlassian.confluence.user.UserAccessor;
  17. import com.atlassian.core.util.DateUtils;
  18. import com.atlassian.core.util.InvalidDurationException;
  19. import com.atlassian.renderer.v2.RenderMode;
  20. import com.atlassian.renderer.v2.macro.MacroException;
  21. import com.atlassian.spring.container.ContainerContext;
  22. import com.atlassian.spring.container.ContainerManager;
  23. import junit.framework.TestCase;
  24. import org.mockito.Mock;
  25. import org.mockito.MockitoAnnotations;
  26. import java.util.ArrayList;
  27. import java.util.Arrays;
  28. import java.util.Date;
  29. import java.util.HashMap;
  30. import java.util.HashSet;
  31. import java.util.List;
  32. import java.util.Map;
  33. import static org.mockito.Mockito.mock;
  34. import static org.mockito.Mockito.when;
  35. public class SearchMacroTestCase extends TestCase
  36. {
  37. private SearchMacro searchMacro;
  38. private Map<String, String> params;
  39. @Mock private UserAccessor userAccessor;
  40. @Mock private ContentEntityObject contentEntityObject;
  41. @Mock private SearchResult searchResult;
  42. @Mock private SearchResults searchResults;
  43. @Mock private PageContext pageContext;
  44. @Mock private AnyTypeObjectDao anyTypeObjectDao;
  45. @Mock private PredefinedSearchBuilder predefinedSearchBuilder;
  46. @Mock private SearchManager searchManager;
  47. @Mock private ISearch iSearch;
  48. @Override
  49. protected void setUp() throws Exception {
  50. super.setUp();
  51. MockitoAnnotations.initMocks(this);
  52. params = new HashMap<String, String>();
  53. when(userAccessor.getUserByName("Administrator")).thenReturn(new ConfluenceUserImpl("Administrator", null, null));
  54. ContainerContext containerContext = mock(ContainerContext.class);
  55. when(containerContext.getComponent("userAccessor")).thenReturn(userAccessor);
  56. ContainerManager.getInstance().setContainerContext(containerContext);
  57. }
  58. public void testSearchByQueryWithoutMaxLimit() throws MacroException, InvalidSearchException
  59. {
  60. final String queryString = "Testing Page";
  61. final List<SearchResult> results = new ArrayList<SearchResult>();
  62. final Map<String, Object> contextMap = new HashMap<String, Object>();
  63. searchMacro = new TestSearchMacro()
  64. {
  65. @Override
  66. protected String getRenderedTemplate(Map<String, Object> contextMap)
  67. {
  68. assertEquals(results, contextMap.get("searchResults"));
  69. assertEquals(0, contextMap.get("totalSearchResults"));
  70. assertEquals(10, contextMap.get("maxLimit"));
  71. assertEquals(queryString, contextMap.get("query"));
  72. return "Finish Executing";
  73. }
  74. @Override
  75. protected ISearch buildSiteSearch(
  76. SearchQueryParameters searchQueryParams, Integer maxLimit)
  77. {
  78. assertEquals("(" +queryString+") AND NOT handle: " +new HibernateHandle(contentEntityObject), searchQueryParams.getQuery());
  79. assertEquals((Integer)10, maxLimit);
  80. return iSearch;
  81. }
  82. @Override
  83. protected Map<String, Object> getDefaultVelocityContext()
  84. {
  85. return contextMap;
  86. }
  87. };
  88. params.put("query", queryString);
  89. when(searchManager.search(iSearch)).thenReturn(searchResults);
  90. when(searchResults.getAll()).thenReturn(results);
  91. when(pageContext.getEntity()).thenReturn(contentEntityObject);
  92. assertEquals("Finish Executing", searchMacro.execute(params, "", pageContext));
  93. }
  94. public void testSearchBySpaceKeyWithMaxLimit() throws MacroException, InvalidSearchException
  95. {
  96. final String spaceKey = "tst";
  97. final List<SearchResult> results = new ArrayList<SearchResult>();
  98. final Map<String, Object> contextMap = new HashMap<String, Object>();
  99. searchMacro = new TestSearchMacro()
  100. {
  101. @Override
  102. protected String getRenderedTemplate(Map<String, Object> contextMap)
  103. {
  104. assertEquals(results, contextMap.get("searchResults"));
  105. assertEquals(0, contextMap.get("totalSearchResults"));
  106. assertEquals(2, contextMap.get("maxLimit"));
  107. assertEquals(null, contextMap.get("query"));
  108. return "Finish Executing";
  109. }
  110. @Override
  111. protected ISearch buildSiteSearch(
  112. SearchQueryParameters searchQueryParams, Integer maxLimit)
  113. {
  114. assertTrue(searchQueryParams.getSpaceKeys().contains(spaceKey));
  115. assertEquals((Integer)2, maxLimit);
  116. return iSearch;
  117. }
  118. @Override
  119. protected Map<String, Object> getDefaultVelocityContext()
  120. {
  121. return contextMap;
  122. }
  123. };
  124. params.put("spacekey", spaceKey);
  125. params.put("maxLimit", "2");
  126. when(searchManager.search(iSearch)).thenReturn(searchResults);
  127. when(searchResults.getAll()).thenReturn(results);
  128. assertEquals("Finish Executing", searchMacro.execute(params, "", pageContext));
  129. }
  130. public void testSearchByTypeWithoutMaxLimit() throws MacroException, InvalidSearchException
  131. {
  132. final List<SearchResult> results = new ArrayList<SearchResult>();
  133. final Map<String, Object> contextMap = new HashMap<String, Object>();
  134. searchMacro = new TestSearchMacro()
  135. {
  136. @Override
  137. protected String getRenderedTemplate(Map<String, Object> contextMap)
  138. {
  139. assertEquals(results, contextMap.get("searchResults"));
  140. assertEquals(1, contextMap.get("totalSearchResults"));
  141. assertEquals(10, contextMap.get("maxLimit"));
  142. assertEquals(null, contextMap.get("query"));
  143. return "Finish Executing";
  144. }
  145. @Override
  146. protected ISearch buildSiteSearch(
  147. SearchQueryParameters searchQueryParams, Integer maxLimit)
  148. {
  149. assertEquals(new HashSet<ContentTypeEnum>(Arrays.asList(ContentTypeEnum.PAGE)), searchQueryParams.getContentTypes());
  150. assertEquals((Integer)10, maxLimit);
  151. return iSearch;
  152. }
  153. @Override
  154. protected Map<String, Object> getDefaultVelocityContext()
  155. {
  156. return contextMap;
  157. }
  158. };
  159. results.add(searchResult);
  160. params.put("type", ContentTypeEnum.PAGE.toString());
  161. when(searchManager.search(iSearch)).thenReturn(searchResults);
  162. when(searchResults.getAll()).thenReturn(results);
  163. assertEquals("Finish Executing", searchMacro.execute(params, "", pageContext));
  164. }
  165. public void testSearchByLastModifiedWithMaxLimit() throws MacroException, InvalidDurationException, InvalidSearchException
  166. {
  167. final String lastModified = "600";
  168. final List<SearchResult> results = new ArrayList<SearchResult>();
  169. final Map<String, Object> contextMap = new HashMap<String, Object>();
  170. final long expectedDuration = DateUtils.getDuration(lastModified);
  171. final Date currentDateLessDuration = new Date(System.currentTimeMillis() - (expectedDuration * 1000));
  172. final DateRangeQuery.DateRange dateRange = new DateRangeQuery.DateRange(currentDateLessDuration, null, true, false);
  173. searchMacro = new TestSearchMacro()
  174. {
  175. @Override
  176. protected Date getCurrentDateLessDuration(long duration)
  177. {
  178. assertEquals(expectedDuration, duration);
  179. return currentDateLessDuration;
  180. }
  181. @Override
  182. protected String getRenderedTemplate(Map<String, Object> contextMap)
  183. {
  184. assertEquals(results, contextMap.get("searchResults"));
  185. assertEquals(0, contextMap.get("totalSearchResults"));
  186. assertEquals(3, contextMap.get("maxLimit"));
  187. return "Finish Executing";
  188. }
  189. @Override
  190. protected ISearch buildSiteSearch(
  191. SearchQueryParameters searchQueryParams, Integer maxLimit)
  192. {
  193. assertEquals(dateRange.getFrom(), searchQueryParams.getLastModified().getFrom());
  194. assertEquals((Integer)3, maxLimit);
  195. return iSearch;
  196. }
  197. @Override
  198. protected Map<String, Object> getDefaultVelocityContext()
  199. {
  200. return contextMap;
  201. }
  202. };
  203. params.put("lastModified", lastModified);
  204. params.put("maxLimit", "3");
  205. when(searchManager.search(iSearch)).thenReturn(searchResults);
  206. when(searchResults.getAll()).thenReturn(results);
  207. assertEquals("Finish Executing", searchMacro.execute(params, "", pageContext));
  208. }
  209. public void testSearchByContributorWithoutMaxLimit() throws MacroException, InvalidSearchException
  210. {
  211. final String contributor = "Administrator";
  212. final List<SearchResult> results = new ArrayList<SearchResult>();
  213. final Map<String, Object> contextMap = new HashMap<String, Object>();
  214. searchMacro = new TestSearchMacro()
  215. {
  216. @Override
  217. protected String getRenderedTemplate(Map<String, Object> contextMap)
  218. {
  219. assertEquals(results, contextMap.get("searchResults"));
  220. assertEquals(0, contextMap.get("totalSearchResults"));
  221. assertEquals(10, contextMap.get("maxLimit"));
  222. return "Finish Executing";
  223. }
  224. @Override
  225. protected ISearch buildSiteSearch(
  226. SearchQueryParameters searchQueryParams, Integer maxLimit)
  227. {
  228. assertEquals(contributor, searchQueryParams.getContributor().getName());
  229. assertEquals((Integer)10, maxLimit);
  230. return iSearch;
  231. }
  232. @Override
  233. protected Map<String, Object> getDefaultVelocityContext()
  234. {
  235. return contextMap;
  236. }
  237. };
  238. params.put("contributor", contributor);
  239. when(searchManager.search(iSearch)).thenReturn(searchResults);
  240. when(searchResults.getAll()).thenReturn(results);
  241. assertEquals("Finish Executing", searchMacro.execute(params, "", pageContext));
  242. }
  243. public void testIsInline()
  244. {
  245. searchMacro = new TestSearchMacro();
  246. assertEquals(false, searchMacro.isInline());
  247. }
  248. public void testHasBody()
  249. {
  250. searchMacro = new TestSearchMacro();
  251. assertEquals(false, searchMacro.hasBody());
  252. }
  253. public void testRenderMode()
  254. {
  255. searchMacro = new TestSearchMacro();
  256. assertEquals(RenderMode.NO_RENDER, searchMacro.getBodyRenderMode());
  257. }
  258. private class TestSearchMacro extends SearchMacro
  259. {
  260. public TestSearchMacro()
  261. {
  262. setPredefinedSearchBuilder(predefinedSearchBuilder);
  263. setSearchManager(searchManager);
  264. }
  265. }
  266. }