PageRenderTime 52ms CodeModel.GetById 9ms 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/links/TestWikiIssueLink.java

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
Java | 171 lines | 142 code | 23 blank | 6 comment | 5 complexity | 71c59b544b76478490df9bb4be65687f MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.jira.issue.fields.renderer.wiki.links;
  2. import com.atlassian.event.api.EventPublisher;
  3. import com.atlassian.jira.component.ComponentAccessor;
  4. import com.atlassian.jira.config.properties.APKeys;
  5. import com.atlassian.jira.issue.Issue;
  6. import com.atlassian.jira.issue.IssueManager;
  7. import com.atlassian.jira.issue.MutableIssue;
  8. import com.atlassian.jira.issue.fields.renderer.wiki.JiraIconManager;
  9. import com.atlassian.jira.issue.resolution.Resolution;
  10. import com.atlassian.jira.junit.rules.AvailableInContainer;
  11. import com.atlassian.jira.junit.rules.MockitoMocksInContainer;
  12. import com.atlassian.jira.security.JiraAuthenticationContext;
  13. import com.atlassian.jira.security.PermissionManager;
  14. import com.atlassian.jira.security.Permissions;
  15. import com.atlassian.jira.user.ApplicationUser;
  16. import com.atlassian.plugin.PluginAccessor;
  17. import com.atlassian.renderer.RenderContext;
  18. import com.atlassian.renderer.RendererConfiguration;
  19. import com.atlassian.renderer.v2.Renderer;
  20. import com.atlassian.renderer.v2.V2LinkRenderer;
  21. import com.atlassian.renderer.v2.V2Renderer;
  22. import com.atlassian.renderer.v2.V2RendererFacade;
  23. import com.atlassian.renderer.v2.V2SubRenderer;
  24. import com.atlassian.renderer.v2.components.LinkRendererComponent;
  25. import com.atlassian.renderer.v2.components.TokenRendererComponent;
  26. import org.junit.Before;
  27. import org.junit.Rule;
  28. import org.junit.Test;
  29. import org.junit.rules.RuleChain;
  30. import org.mockito.Mock;
  31. import java.util.Arrays;
  32. import static org.junit.Assert.assertEquals;
  33. import static org.mockito.Mockito.mock;
  34. import static org.mockito.Mockito.when;
  35. /**
  36. * Tests the creation of a link to a jira issue. This also test the portion of the JiraLinkResolver that delegates to JiraIssueLinks. This
  37. * also tests the JiraIssueLinkResolver which identifies the issue keys which are turned into links.
  38. */
  39. public class TestWikiIssueLink {
  40. @Rule
  41. public RuleChain mockitoMocksInContainer = MockitoMocksInContainer.forTest(this);
  42. @Mock
  43. @AvailableInContainer
  44. private IssueManager issueManager;
  45. @Mock
  46. @AvailableInContainer
  47. private PermissionManager permissionManager;
  48. @Mock
  49. @AvailableInContainer
  50. private JiraAuthenticationContext jiraAuthenticationContext;
  51. private V2RendererFacade renderer;
  52. @Before
  53. public void onTestSetUp() {
  54. renderer = newRenderer();
  55. }
  56. private V2RendererFacade newRenderer() {
  57. RendererConfiguration rendererConfiguration = mock(RendererConfiguration.class);
  58. V2SubRenderer v2SubRenderer = new V2SubRenderer();
  59. Renderer renderer = new V2Renderer(Arrays.asList(
  60. new LinkRendererComponent(new JiraLinkResolver(mock(PluginAccessor.class), mock(EventPublisher.class))),
  61. new JiraIssueLinkRendererComponent(),
  62. new TokenRendererComponent(v2SubRenderer))
  63. );
  64. v2SubRenderer.setRenderer(renderer);
  65. V2LinkRenderer linkRenderer = new V2LinkRenderer(v2SubRenderer, new JiraIconManager(), rendererConfiguration);
  66. return new V2RendererFacade(rendererConfiguration, linkRenderer, null, renderer);
  67. }
  68. @Test
  69. public void testOpenIssueLink() {
  70. MutableIssue issue = newIssue("TST-1", "Open issue", false);
  71. when(issueManager.getIssueObject(issue.getKey())).thenReturn(issue);
  72. when(permissionManager.hasPermission(Permissions.BROWSE, issue, (ApplicationUser) null)).thenReturn(Boolean.TRUE);
  73. assertEquals(getExpectedIssueLink(issue), renderer.convertWikiToXHtml(new RenderContext(), issue.getKey()));
  74. }
  75. @Test
  76. public void testResolvedIssueLink() {
  77. MutableIssue issue = newIssue("TST-2", "Resolved issue", true);
  78. when(issueManager.getIssueObject(issue.getKey())).thenReturn(issue);
  79. when(permissionManager.hasPermission(Permissions.BROWSE, issue, (ApplicationUser) null)).thenReturn(Boolean.TRUE);
  80. assertEquals(getExpectedIssueLink(issue), renderer.convertWikiToXHtml(new RenderContext(), issue.getKey()));
  81. }
  82. @Test
  83. public void testOpenIssueLinkNoPerm() {
  84. MutableIssue issue = newIssue("TST-1", "Open issue", false);
  85. when(issueManager.getIssueObject(issue.getKey())).thenReturn(issue);
  86. when(permissionManager.hasPermission(Permissions.BROWSE, issue, (ApplicationUser) null)).thenReturn(Boolean.FALSE);
  87. // JRA-14893: do not hyperlink an inaccessible issue
  88. assertEquals(issue.getKey(), renderer.convertWikiToXHtml(new RenderContext(), issue.getKey()));
  89. }
  90. @Test
  91. public void testResolvedIssueLinkNoPerm() {
  92. MutableIssue issue = newIssue("TST-1", "Resolved issue", false);
  93. when(issueManager.getIssueObject(issue.getKey())).thenReturn(issue);
  94. when(permissionManager.hasPermission(Permissions.BROWSE, issue, (ApplicationUser) null)).thenReturn(Boolean.FALSE);
  95. // JRA-14893: do not hyperlink an inaccessible issue
  96. assertEquals(issue.getKey(), renderer.convertWikiToXHtml(new RenderContext(), issue.getKey()));
  97. }
  98. @Test
  99. public void testMultipleIssueLinks() {
  100. MutableIssue issue1 = newIssue("TST-1", "Open issue", false);
  101. MutableIssue issue2 = newIssue("TST-2", "Closed issue", true);
  102. when(issueManager.getIssueObject(issue1.getKey())).thenReturn(issue1);
  103. when(issueManager.getIssueObject(issue2.getKey())).thenReturn(issue2);
  104. when(permissionManager.hasPermission(Permissions.BROWSE, issue1, (ApplicationUser) null)).thenReturn(Boolean.TRUE);
  105. when(permissionManager.hasPermission(Permissions.BROWSE, issue2, (ApplicationUser) null)).thenReturn(Boolean.TRUE);
  106. String expectedRendering = getExpectedIssueLink(issue1) + " " + getExpectedIssueLink(issue2);
  107. String actualRendering = renderer.convertWikiToXHtml(new RenderContext(), issue1.getKey() + " " + issue2.getKey());
  108. assertEquals(expectedRendering, actualRendering);
  109. }
  110. @Test
  111. public void testNonExistentIssueLink() {
  112. String unexistingIssueKey = "TST-3";
  113. assertEquals(unexistingIssueKey, renderer.convertWikiToXHtml(new RenderContext(), unexistingIssueKey));
  114. }
  115. @Test
  116. public void testNonExistentIssueLinkInBrackets() {
  117. assertEquals("<span class=\"error\">&#91;TST-3&#93;</span>", renderer.convertWikiToXHtml(new RenderContext(), "[TST-3]"));
  118. }
  119. private MutableIssue newIssue(String key, String summary, boolean resolved) {
  120. MutableIssue result = mock(MutableIssue.class);
  121. when(result.getKey()).thenReturn(key);
  122. when(result.getSummary()).thenReturn(summary);
  123. if (resolved) {
  124. when(result.getResolutionObject()).thenReturn(mock(Resolution.class));
  125. }
  126. return result;
  127. }
  128. private String getExpectedIssueLink(Issue issue) {
  129. StringBuilder result = new StringBuilder().append("<a href=\"")
  130. .append(ComponentAccessor.getApplicationProperties().getString(APKeys.JIRA_BASEURL))
  131. .append("/browse/")
  132. .append(issue.getKey())
  133. .append("\" title=\"")
  134. .append(issue.getSummary())
  135. .append("\" class=\"issue-link\" data-issue-key=\"")
  136. .append(issue.getKey())
  137. .append("\">");
  138. if (issue.getResolutionObject() != null) {
  139. result.append('-');
  140. }
  141. result.append(issue.getKey());
  142. if (issue.getResolutionObject() != null) {
  143. result.append('-');
  144. }
  145. result.append("</a>");
  146. return result.toString();
  147. }
  148. }