PageRenderTime 28ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

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

https://bitbucket.org/atlassian/confluence-advanced-macros-plugin
Java | 245 lines | 194 code | 51 blank | 0 comment | 2 complexity | ecbf957b862f7cdf34a2a71b7827a7c9 MD5 | raw file
  1. package com.atlassian.confluence.plugins.macros.advanced;
  2. import com.atlassian.confluence.pages.Page;
  3. import com.atlassian.confluence.pages.PageManager;
  4. import com.atlassian.confluence.plugins.macros.advanced.IndexMacro.AlphabeticPageListing;
  5. import com.atlassian.confluence.renderer.PageContext;
  6. import com.atlassian.confluence.renderer.WikiRendererContextKeys;
  7. import com.atlassian.confluence.security.Permission;
  8. import com.atlassian.confluence.security.PermissionManager;
  9. import com.atlassian.confluence.setup.settings.Settings;
  10. import com.atlassian.confluence.setup.settings.SettingsManager;
  11. import com.atlassian.confluence.spaces.Space;
  12. import com.atlassian.confluence.spaces.SpaceManager;
  13. import com.atlassian.user.User;
  14. import com.opensymphony.webwork.ServletActionContext;
  15. import junit.framework.TestCase;
  16. import static org.mockito.Mockito.anyObject;
  17. import static org.mockito.Mockito.eq;
  18. import static org.mockito.Mockito.never;
  19. import static org.mockito.Mockito.verify;
  20. import static org.mockito.Mockito.when;
  21. import org.mockito.Mock;
  22. import org.mockito.MockitoAnnotations;
  23. import org.mockito.invocation.InvocationOnMock;
  24. import org.mockito.stubbing.Answer;
  25. import org.radeox.api.engine.context.RenderContext;
  26. import org.radeox.macro.parameter.MacroParameter;
  27. import javax.servlet.http.HttpServletRequest;
  28. import java.io.IOException;
  29. import java.util.ArrayList;
  30. import java.util.HashMap;
  31. import java.util.List;
  32. import java.util.Map;
  33. import java.util.Set;
  34. public class IndexMacroTestCase extends TestCase
  35. {
  36. @Mock
  37. private MacroParameter macroParameter;
  38. @Mock
  39. private RenderContext renderContext;
  40. @Mock
  41. private PageContext pageContext;
  42. @Mock
  43. private HttpServletRequest request;
  44. @Mock
  45. private SettingsManager settingsManager;
  46. @Mock
  47. private SpaceManager spaceManager;
  48. @Mock
  49. private PermissionManager permissionManager;
  50. @Mock
  51. private PageManager pageManager;
  52. private Map<String, Object> contextMap, contextParams, expectedMap, actualMap;
  53. private List<Page> pageList;
  54. private Page pageApple, pageBear, pageCat, pageDigit, pageOthers;
  55. private String baseUrl;
  56. private String fakeOutput = "fakeOutput";
  57. private Settings globalSettings;
  58. private Space testSpace;
  59. private IndexMacro indexMacro;
  60. @Override
  61. protected void setUp() throws Exception
  62. {
  63. super.setUp();
  64. MockitoAnnotations.initMocks(this);
  65. actualMap = new HashMap<String, Object>();
  66. expectedMap = new HashMap<String, Object>();
  67. contextMap = new HashMap<String, Object>();
  68. contextParams = new HashMap<String, Object>();
  69. contextParams.put(WikiRendererContextKeys.RENDER_CONTEXT, pageContext);
  70. ServletActionContext.setRequest(request);
  71. pageList = new ArrayList<Page>();
  72. pageApple = new Page();
  73. pageApple.setTitle("Apple");
  74. pageList.add(pageApple);
  75. pageBear = new Page();
  76. pageBear.setTitle("Bear");
  77. pageList.add(pageBear);
  78. pageCat = new Page();
  79. pageCat.setTitle("Cat");
  80. pageList.add(pageCat);
  81. pageDigit = new Page();
  82. pageDigit.setTitle("12345");
  83. pageList.add(pageDigit);
  84. pageOthers = new Page()
  85. {
  86. @Override
  87. public String getTitle()
  88. {
  89. return "!@#";
  90. }
  91. };
  92. pageList.add(pageOthers);
  93. expectedMap.put("A", "Apple");
  94. expectedMap.put("B", "Bear");
  95. expectedMap.put("C", "Cat");
  96. expectedMap.put("0-9", "12345");
  97. expectedMap.put("@", "!@#");
  98. testSpace = new Space("tst");
  99. when(macroParameter.getContext()).thenReturn(renderContext);
  100. when(renderContext.getParameters()).thenReturn(contextParams);
  101. when(pageContext.getSpaceKey()).thenReturn(testSpace.getKey());
  102. baseUrl = "http://localhost:1990/confluence";
  103. globalSettings = new Settings();
  104. globalSettings.setBaseUrl(baseUrl);
  105. when(settingsManager.getGlobalSettings()).thenReturn(globalSettings);
  106. indexMacro = new TestIndexMacro();
  107. when(spaceManager.getSpace(testSpace.getKey())).thenReturn(testSpace);
  108. when(pageManager.getPages(testSpace, true)).thenReturn(pageList);
  109. when(permissionManager.getPermittedEntities((User) anyObject(), eq(Permission.VIEW), (List) anyObject())).thenAnswer(
  110. new Answer<List>()
  111. {
  112. public List answer(InvocationOnMock invocationOnMock) throws Throwable
  113. {
  114. return (List) invocationOnMock.getArguments()[2];
  115. }
  116. }
  117. );
  118. }
  119. @Override
  120. protected void tearDown() throws Exception
  121. {
  122. ServletActionContext.setRequest(null);
  123. super.tearDown();
  124. }
  125. public void testWithoutServletRequest() throws IllegalArgumentException, IOException
  126. {
  127. ServletActionContext.setRequest(null);
  128. indexMacro = new TestIndexMacro()
  129. {
  130. @Override
  131. protected String getVelocityRenderedTemplate(Map<String, Object> contextMap)
  132. {
  133. assertEquals(baseUrl, contextMap.get("baseurl"));
  134. AlphabeticPageListing pageListing = (AlphabeticPageListing) contextMap.get("pages");
  135. actualMap = getPageListing(pageListing, "A", "B", "C", "0-9", "@");
  136. assertEquals(expectedMap, actualMap);
  137. return fakeOutput;
  138. }
  139. };
  140. assertEquals(fakeOutput, indexMacro.getHtml(macroParameter));
  141. }
  142. public void testWithServletRequest() throws IllegalArgumentException, IOException
  143. {
  144. final String contextPath = "/foobar";
  145. when(request.getContextPath()).thenReturn(contextPath);
  146. IndexMacro indexMacro = new TestIndexMacro()
  147. {
  148. protected String getVelocityRenderedTemplate(Map<String, Object> contextMap)
  149. {
  150. assertEquals(contextPath, contextMap.get("baseurl"));
  151. AlphabeticPageListing pageListing = (AlphabeticPageListing) contextMap.get("pages");
  152. actualMap = getPageListing(pageListing, "A", "B", "C", "0-9", "@");
  153. assertEquals(expectedMap, actualMap);
  154. return fakeOutput;
  155. }
  156. };
  157. when(request.getContextPath()).thenReturn(contextPath);
  158. verify(settingsManager, never()).getGlobalSettings();
  159. assertEquals(fakeOutput, indexMacro.getHtml(macroParameter));
  160. }
  161. public void testGetMacroName()
  162. {
  163. IndexMacro indexMacro = new TestIndexMacro();
  164. assertEquals("index", indexMacro.getName());
  165. }
  166. public void testGetDescription()
  167. {
  168. IndexMacro indexMacro = new TestIndexMacro();
  169. assertEquals("1: ignored", indexMacro.getParamDescription()[0]);
  170. }
  171. private Map<String, Object> getPageListing(AlphabeticPageListing pageListing, String... keys)
  172. {
  173. Map<String, Object> map = new HashMap<String, Object>();
  174. for (String key : keys)
  175. for (Page page : (Set<Page>) pageListing.getPages(key))
  176. map.put(key, page.getTitle());
  177. return map;
  178. }
  179. private class TestIndexMacro extends IndexMacro
  180. {
  181. private TestIndexMacro()
  182. {
  183. setSettingsManager(settingsManager);
  184. setSpaceManager(spaceManager);
  185. setPermissionManager(permissionManager);
  186. setPageManager(pageManager);
  187. }
  188. @Override
  189. protected Map<String, Object> getDefaultVelocityContext()
  190. {
  191. return contextMap;
  192. }
  193. }
  194. }