PageRenderTime 25ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/jira-project/jira-components/jira-tests-parent/jira-tests-unit/src/test/java/com/atlassian/jira/issue/fields/renderer/wiki/TestAtlassianWikiRenderer.java

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
Java | 232 lines | 179 code | 53 blank | 0 comment | 0 complexity | 66883d73b4fcc223ac3cc94d92d42554 MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.jira.issue.fields.renderer.wiki;
  2. import com.atlassian.event.api.EventPublisher;
  3. import com.atlassian.jira.config.properties.APKeys;
  4. import com.atlassian.jira.config.properties.ApplicationProperties;
  5. import com.atlassian.jira.issue.fields.renderer.IssueRenderContext;
  6. import com.atlassian.jira.mock.MockApplicationProperties;
  7. import com.atlassian.jira.mock.issue.MockIssue;
  8. import com.atlassian.jira.util.BrowserUtils;
  9. import com.atlassian.jira.util.velocity.DefaultVelocityRequestContextFactory;
  10. import com.atlassian.jira.util.velocity.VelocityRequestContextFactory;
  11. import com.atlassian.renderer.RenderContext;
  12. import org.junit.Before;
  13. import org.junit.Test;
  14. import org.junit.runner.RunWith;
  15. import org.mockito.Mock;
  16. import org.mockito.runners.MockitoJUnitRunner;
  17. import javax.annotation.Nonnull;
  18. import javax.servlet.http.HttpServletRequest;
  19. import static org.junit.Assert.assertEquals;
  20. import static org.junit.Assert.assertFalse;
  21. import static org.junit.Assert.assertNull;
  22. import static org.junit.Assert.assertTrue;
  23. import static org.mockito.Matchers.anyString;
  24. import static org.mockito.Mockito.mock;
  25. import static org.mockito.Mockito.when;
  26. @RunWith(MockitoJUnitRunner.class)
  27. public class TestAtlassianWikiRenderer {
  28. @Mock
  29. private ApplicationProperties applicationProperties;
  30. private AtlassianWikiRendererExposingRequest wikiRenderer;
  31. @Before
  32. public void setUp() {
  33. when(applicationProperties.getDefaultBackedString(anyString())).thenReturn("");
  34. wikiRenderer = new AtlassianWikiRendererExposingRequest(
  35. mock(EventPublisher.class),
  36. applicationProperties,
  37. new DefaultVelocityRequestContextFactory(new MockApplicationProperties())
  38. );
  39. }
  40. @Test
  41. public void getRenderContextWithNullIssueRenderContextReturnsContextWithNoIssue() {
  42. RenderContext renderContext = wikiRenderer.getRenderContext(null);
  43. assertNull("Should not have an issue context set", renderContext.getParam(AtlassianWikiRenderer.ISSUE_CONTEXT_KEY));
  44. }
  45. @Test
  46. public void getRenderContextWithIssueReturnsAContextWithTheIssue() {
  47. MockIssue issue = new MockIssue();
  48. RenderContext renderContext = wikiRenderer.getRenderContext(new IssueRenderContext(issue));
  49. assertEquals("Should have found the provided issue in the context", issue, renderContext.getParam(AtlassianWikiRenderer.ISSUE_CONTEXT_KEY));
  50. }
  51. @Test
  52. public void getRenderContextWhenRenderingInlineDisallowsRenderingParagraphs() {
  53. IssueRenderContext context = new IssueRenderContext(null);
  54. context.addParam(IssueRenderContext.INLINE_PARAM, true);
  55. RenderContext renderContext = wikiRenderer.getRenderContext(context);
  56. assertFalse("Should not render paragraphs inside an inline", renderContext.getRenderMode().renderParagraphs());
  57. }
  58. @Test
  59. public void testRenderContextWhenRenderingForWysiwyg() {
  60. IssueRenderContext context = new IssueRenderContext(null);
  61. context.addParam(IssueRenderContext.WYSIWYG_PARAM, true);
  62. RenderContext renderContext = wikiRenderer.getRenderContext(context);
  63. assertTrue("Should set rendering for wysiwyg mode", (Boolean) renderContext.getParam(IssueRenderContext.WYSIWYG_PARAM));
  64. }
  65. @Test
  66. public void getRenderContextWhenRenderingInlineInvalidParamAllowsRenderingParagraphs() {
  67. IssueRenderContext context = new IssueRenderContext(null);
  68. context.addParam(IssueRenderContext.INLINE_PARAM, "true"); // not valid; must be a boolean literal, not a string
  69. RenderContext renderContext = wikiRenderer.getRenderContext(context);
  70. assertTrue("Should render paragraphs unless the inline setting is valid", renderContext.getRenderMode().renderParagraphs());
  71. }
  72. @Test
  73. public void getRenderContextWhenRenderingNonInlineAllowsRenderingParagraphs() {
  74. RenderContext renderContext = wikiRenderer.getRenderContext(null);
  75. boolean canRenderParagraphs = renderContext.getRenderMode().renderParagraphs();
  76. assertTrue("Should render paragraphs by default", canRenderParagraphs);
  77. }
  78. @Test
  79. public void getRenderContextWhenMimeSniffingIsInsecureDisallowsMacrosErrorMessages() {
  80. when(applicationProperties.getDefaultBackedString(APKeys.JIRA_OPTION_IE_MIME_SNIFFING)).thenReturn(APKeys.MIME_SNIFFING_OWNED);
  81. RenderContext renderContext = wikiRenderer.getRenderContext(null);
  82. assertCanNotRenderMacroErrorMessages(renderContext);
  83. assertCanRenderImages(renderContext);
  84. assertCanRenderEmbeddedObjects(renderContext);
  85. }
  86. @Test
  87. public void getRenderContextWhenMimeSniffingIsSecureDisallowsMacrosErrorMessagesImagesAndObjectEmbedding() {
  88. when(applicationProperties.getDefaultBackedString(APKeys.JIRA_OPTION_IE_MIME_SNIFFING)).thenReturn(APKeys.MIME_SNIFFING_PARANOID);
  89. RenderContext renderContext = wikiRenderer.getRenderContext(null);
  90. assertCanNotRenderMacroErrorMessages(renderContext);
  91. assertCanNotRenderImages(renderContext);
  92. assertCanNotRenderEmbeddedObjects(renderContext);
  93. }
  94. @Test
  95. public void getRenderContextWhenMimeSniffingIsNotSetAllowsMacrosErrorMessagesImagesAndObjectEmbedding() {
  96. when(applicationProperties.getDefaultBackedString(APKeys.JIRA_OPTION_IE_MIME_SNIFFING)).thenReturn("");
  97. RenderContext renderContext = wikiRenderer.getRenderContext(null);
  98. assertCanRenderMacroErrorMessages(renderContext);
  99. assertCanRenderImages(renderContext);
  100. assertCanRenderEmbeddedObjects(renderContext);
  101. }
  102. @Test
  103. public void getRenderContextWhenMimeSniffingIsWorkaroundDisallowsMacrosErrorMessagesAndObjectEmbeddingIfBrowserIsInternetExplorerSmallerThanVersion8() {
  104. when(applicationProperties.getDefaultBackedString(APKeys.JIRA_OPTION_IE_MIME_SNIFFING)).thenReturn(APKeys.MIME_SNIFFING_WORKAROUND);
  105. HttpServletRequest request = mockRequestComingFromIe7();
  106. wikiRenderer.setRequest(request);
  107. RenderContext renderContext = wikiRenderer.getRenderContext(null);
  108. assertCanNotRenderMacroErrorMessages(renderContext);
  109. assertCanRenderImages(renderContext);
  110. assertCanNotRenderEmbeddedObjects(renderContext);
  111. }
  112. @Test
  113. public void getRenderContextWhenMimeSniffingIsWorkaroundDisallowsMacrosErrorMessagesIfBrowserIsAnythingDifferentThanInternetExplorerSmallerThanVersion8() {
  114. when(applicationProperties.getDefaultBackedString(APKeys.JIRA_OPTION_IE_MIME_SNIFFING)).thenReturn(APKeys.MIME_SNIFFING_WORKAROUND);
  115. HttpServletRequest request = mockRequestComingFromChrome();
  116. wikiRenderer.setRequest(request);
  117. RenderContext renderContext = wikiRenderer.getRenderContext(null);
  118. assertCanNotRenderMacroErrorMessages(renderContext);
  119. assertCanRenderImages(renderContext);
  120. assertCanRenderEmbeddedObjects(renderContext);
  121. }
  122. @Test
  123. public void getRenderContextWhenMimeSniffingIsWorkaroundDisallowsMacrosErrorMessagesAndObjectEmbeddingIfThereIsNoInformationAboutTheRequest() {
  124. when(applicationProperties.getDefaultBackedString(APKeys.JIRA_OPTION_IE_MIME_SNIFFING)).thenReturn(APKeys.MIME_SNIFFING_WORKAROUND);
  125. wikiRenderer.setRequest(null);
  126. RenderContext renderContext = wikiRenderer.getRenderContext(null);
  127. assertCanNotRenderMacroErrorMessages(renderContext);
  128. assertCanRenderImages(renderContext);
  129. assertCanNotRenderEmbeddedObjects(renderContext);
  130. }
  131. private HttpServletRequest mockRequestComingFromChrome() {
  132. return mockRequestWithAgentHeader("Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36");
  133. }
  134. private HttpServletRequest mockRequestComingFromIe7() {
  135. return mockRequestWithAgentHeader("Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)");
  136. }
  137. private HttpServletRequest mockRequestWithAgentHeader(final String agentHeader) {
  138. HttpServletRequest request = mock(HttpServletRequest.class);
  139. when(request.getHeader(BrowserUtils.USER_AGENT_HEADER)).thenReturn(agentHeader);
  140. return request;
  141. }
  142. private void assertCanRenderMacroErrorMessages(@Nonnull final RenderContext renderContext) {
  143. boolean canRenderMacroErrorMessages = renderContext.getRenderMode().renderMacroErrorMessages();
  144. assertTrue(canRenderMacroErrorMessages);
  145. }
  146. private void assertCanNotRenderMacroErrorMessages(@Nonnull final RenderContext renderContext) {
  147. boolean canRenderMacroErrorMessages = renderContext.getRenderMode().renderMacroErrorMessages();
  148. assertFalse(canRenderMacroErrorMessages);
  149. }
  150. private void assertCanRenderImages(@Nonnull final RenderContext renderContext) {
  151. boolean canRenderImages = renderContext.getRenderMode().renderImages();
  152. assertTrue(canRenderImages);
  153. }
  154. private void assertCanNotRenderImages(@Nonnull final RenderContext renderContext) {
  155. boolean canRenderImages = renderContext.getRenderMode().renderImages();
  156. assertFalse(canRenderImages);
  157. }
  158. private void assertCanRenderEmbeddedObjects(@Nonnull final RenderContext renderContext) {
  159. boolean canRenderEmbeddedObjects = renderContext.getRenderMode().renderEmbeddedObjects();
  160. assertTrue(canRenderEmbeddedObjects);
  161. }
  162. private void assertCanNotRenderEmbeddedObjects(@Nonnull final RenderContext renderContext) {
  163. boolean canRenderEmbeddedObjects = renderContext.getRenderMode().renderEmbeddedObjects();
  164. assertFalse(canRenderEmbeddedObjects);
  165. }
  166. private static class AtlassianWikiRendererExposingRequest extends AtlassianWikiRenderer {
  167. private HttpServletRequest request;
  168. public AtlassianWikiRendererExposingRequest(final EventPublisher eventPublisher, final ApplicationProperties applicationProperties, final VelocityRequestContextFactory velocityRequestContextFactory) {
  169. super(eventPublisher, applicationProperties, velocityRequestContextFactory);
  170. }
  171. public void setRequest(final HttpServletRequest request) {
  172. this.request = request;
  173. }
  174. @Override
  175. protected HttpServletRequest getCurrentRequest() {
  176. return request;
  177. }
  178. }
  179. }