/src/test/java/com/atlassian/jira/plugin/ext/subversion/issuetabpanels/changes/TestSubversionRevisionsTabPanel.java

https://bitbucket.org/wcrighton/jira-subversion-plugin · Java · 261 lines · 200 code · 56 blank · 5 comment · 0 complexity · 9fffb095dbc50d6a514378ad78d8198d MD5 · raw file

  1. package com.atlassian.jira.plugin.ext.subversion.issuetabpanels.changes;
  2. import com.atlassian.core.util.map.EasyMap;
  3. import com.atlassian.jira.config.util.IndexPathManager;
  4. import com.atlassian.jira.issue.Issue;
  5. import com.atlassian.jira.issue.IssueManager;
  6. import com.atlassian.jira.issue.changehistory.ChangeHistoryManager;
  7. import com.atlassian.jira.issue.tabpanels.GenericMessageAction;
  8. import com.atlassian.jira.plugin.ext.subversion.MultipleSubversionRepositoryManager;
  9. import com.atlassian.jira.plugin.ext.subversion.revisions.RevisionIndexer;
  10. import com.atlassian.jira.project.version.VersionManager;
  11. import com.atlassian.jira.security.PermissionManager;
  12. import com.atlassian.jira.security.Permissions;
  13. import com.atlassian.jira.util.EasyList;
  14. import com.atlassian.jira.util.velocity.VelocityRequestContextFactory;
  15. import com.atlassian.plugin.webresource.WebResourceManager;
  16. import org.jmock.Mock;
  17. import org.jmock.cglib.MockObjectTestCase;
  18. import org.tmatesoft.svn.core.SVNLogEntry;
  19. import java.util.Collections;
  20. import java.util.Date;
  21. import java.util.List;
  22. public class TestSubversionRevisionsTabPanel extends MockObjectTestCase
  23. {
  24. private Mock mockMultipleSubversionRepositoryManager;
  25. private Mock mockRevisionIndexer;
  26. private Mock mockPermissionManager;
  27. private Mock mockWebResourceManager;
  28. private Mock mockIndexPathManager;
  29. private Mock mockVelocityRequestContextFactory;
  30. SubversionRevisionsTabPanel getSubversionRevisionsTabPanel()
  31. {
  32. SubversionRevisionsTabPanel subversionRevisionsTabPanel;
  33. subversionRevisionsTabPanel = new SubversionRevisionsTabPanel(
  34. (MultipleSubversionRepositoryManager) mockMultipleSubversionRepositoryManager.proxy(),
  35. (PermissionManager) mockPermissionManager.proxy(),
  36. (WebResourceManager) mockWebResourceManager.proxy(),
  37. (VelocityRequestContextFactory) mockVelocityRequestContextFactory.proxy())
  38. {
  39. @Override
  40. String getText(String key)
  41. {
  42. return key;
  43. }
  44. @Override
  45. SubversionRevisionAction createSubversionRevisionAction(long repoId, SVNLogEntry logEntry)
  46. {
  47. return new SubversionRevisionAction(logEntry, (MultipleSubversionRepositoryManager) mockMultipleSubversionRepositoryManager.proxy(), descriptor, repoId)
  48. {
  49. protected String rewriteLogMessage(String logMessageToBeRewritten)
  50. {
  51. return logMessageToBeRewritten;
  52. }
  53. };
  54. }
  55. @Override
  56. SubversionRevisionAction createLastSubversionRevisionActionInPage(long repoId, SVNLogEntry logEntry)
  57. {
  58. return createSubversionRevisionAction(repoId, logEntry);
  59. }
  60. // @Override
  61. // boolean isSortingActionsInAscendingOrder()
  62. // {
  63. // return true;
  64. // }
  65. };
  66. return subversionRevisionsTabPanel;
  67. }
  68. protected void setUp() throws Exception
  69. {
  70. MultipleSubversionRepositoryManager multipleSubversionRepositoryManager;
  71. super.setUp();
  72. mockPermissionManager = new Mock(PermissionManager.class);
  73. mockMultipleSubversionRepositoryManager = new Mock(MultipleSubversionRepositoryManager.class);
  74. mockMultipleSubversionRepositoryManager.expects(atLeastOnce()).method("getRepositoryList").withNoArguments().will(returnValue(Collections.EMPTY_LIST));
  75. multipleSubversionRepositoryManager = (MultipleSubversionRepositoryManager) mockMultipleSubversionRepositoryManager.proxy();
  76. mockWebResourceManager = new Mock(WebResourceManager.class);
  77. mockIndexPathManager = new Mock(IndexPathManager.class);
  78. mockVelocityRequestContextFactory = new Mock(VelocityRequestContextFactory.class);
  79. mockRevisionIndexer = mock(
  80. TestRevisionIndexer.class,
  81. new Class[]{
  82. MultipleSubversionRepositoryManager.class,
  83. VersionManager.class,
  84. IssueManager.class,
  85. PermissionManager.class,
  86. ChangeHistoryManager.class,
  87. IndexPathManager.class
  88. },
  89. new Object[]{
  90. multipleSubversionRepositoryManager,
  91. null,
  92. null,
  93. mockPermissionManager.proxy(),
  94. null,
  95. mockIndexPathManager.proxy()
  96. }
  97. );
  98. }
  99. public void testGetActionsWhenIssueHasNullSvnLogEntries()
  100. {
  101. Mock mockIssue;
  102. RevisionIndexer revisionIndexer;
  103. Issue issue;
  104. SubversionRevisionsTabPanel subversionRevisionsTabPanel;
  105. List actions;
  106. mockIssue = new Mock(Issue.class);
  107. mockIssue.expects(once()).method("getKey").withNoArguments().will(returnValue("TST-1"));
  108. issue = (Issue) mockIssue.proxy();
  109. mockRevisionIndexer.reset();
  110. mockRevisionIndexer.expects(once()).method("getLogEntriesByRepository").with(same(issue), eq(0), ANYTHING, ANYTHING).will(returnValue(null));
  111. revisionIndexer = (RevisionIndexer) mockRevisionIndexer.proxy();
  112. mockMultipleSubversionRepositoryManager.reset();
  113. mockMultipleSubversionRepositoryManager.expects(once()).method("getRevisionIndexer").withNoArguments().will(returnValue(revisionIndexer));
  114. mockWebResourceManager.expects(once()).method("requireResource").with(ANYTHING);
  115. subversionRevisionsTabPanel = getSubversionRevisionsTabPanel();
  116. actions = subversionRevisionsTabPanel.getActions(issue, null);
  117. assertNotNull(actions);
  118. assertEquals(1, actions.size()); /* List should only have a GenericMessageAction element */
  119. assertTrue(GenericMessageAction.class.isAssignableFrom(actions.get(0).getClass()));
  120. }
  121. public void testGetActionsWhenIssueHasEmptySvnLogEntries()
  122. {
  123. Mock mockIssue;
  124. RevisionIndexer revisionIndexer;
  125. Issue issue;
  126. SubversionRevisionsTabPanel subversionRevisionsTabPanel;
  127. List actions;
  128. mockIssue = new Mock(Issue.class);
  129. mockIssue.expects(once()).method("getKey").withNoArguments().will(returnValue("TST-1"));
  130. issue = (Issue) mockIssue.proxy();
  131. mockRevisionIndexer.reset();
  132. mockRevisionIndexer.expects(once()).method("getLogEntriesByRepository").with(same(issue), eq(0), ANYTHING, ANYTHING).will(returnValue(Collections.EMPTY_MAP));
  133. revisionIndexer = (RevisionIndexer) mockRevisionIndexer.proxy();
  134. mockMultipleSubversionRepositoryManager.reset();
  135. mockMultipleSubversionRepositoryManager.expects(once()).method("getRevisionIndexer").withNoArguments().will(returnValue(revisionIndexer));
  136. mockWebResourceManager.expects(once()).method("requireResource").with(ANYTHING);
  137. subversionRevisionsTabPanel = getSubversionRevisionsTabPanel();
  138. actions = subversionRevisionsTabPanel.getActions(issue, null);
  139. assertNotNull(actions);
  140. assertEquals(1, actions.size()); /* List should only have a GenericMessageAction element */
  141. assertTrue(GenericMessageAction.class.isAssignableFrom(actions.get(0).getClass()));
  142. }
  143. public void testGetActionsWhenIssueHasSomeSvnLogEntries()
  144. {
  145. Mock mockIssue;
  146. RevisionIndexer revisionIndexer;
  147. Issue issue;
  148. SubversionRevisionsTabPanel subversionRevisionsTabPanel;
  149. List actions;
  150. mockIssue = new Mock(Issue.class);
  151. mockIssue.expects(once()).method("getKey").withNoArguments().will(returnValue("TST-1"));
  152. issue = (Issue) mockIssue.proxy();
  153. mockRevisionIndexer.reset();
  154. mockRevisionIndexer.expects(once()).method("getLogEntriesByRepository").with(same(issue), eq(0), ANYTHING, ANYTHING).will(returnValue(
  155. EasyMap.build(
  156. 1L, EasyList.build(new SVNLogEntry(null, 1, "dchui", new Date(), "foobar")),
  157. 2L, EasyList.build(new SVNLogEntry(null, 1, "dchui", new Date(), "foobar"))
  158. )
  159. ));
  160. revisionIndexer = (RevisionIndexer) mockRevisionIndexer.proxy();
  161. mockMultipleSubversionRepositoryManager.reset();
  162. mockMultipleSubversionRepositoryManager.expects(once()).method("getRevisionIndexer").withNoArguments().will(returnValue(revisionIndexer));
  163. mockWebResourceManager.expects(once()).method("requireResource").with(ANYTHING);
  164. subversionRevisionsTabPanel = getSubversionRevisionsTabPanel();
  165. actions = subversionRevisionsTabPanel.getActions(issue, null);
  166. assertNotNull(actions);
  167. assertEquals(2, actions.size()); /* There should be two instances of SubversionRevisionAction returend */
  168. assertTrue(SubversionRevisionAction.class.isAssignableFrom(actions.get(0).getClass()));
  169. assertTrue(SubversionRevisionAction.class.isAssignableFrom(actions.get(1).getClass()));
  170. }
  171. public void testShowPanelWhenMultipleSubversionManagerIsNotIndexing()
  172. {
  173. SubversionRevisionsTabPanel subversionRevisionsTabPanel;
  174. mockMultipleSubversionRepositoryManager.reset();
  175. mockMultipleSubversionRepositoryManager.expects(exactly(2)).method("isIndexingRevisions").withNoArguments().will(returnValue(false));
  176. mockPermissionManager.reset();
  177. mockPermissionManager.expects(never()).method("hasPermission").with(eq(Permissions.VIEW_VERSION_CONTROL), NULL, NULL);
  178. subversionRevisionsTabPanel = getSubversionRevisionsTabPanel();
  179. assertFalse(subversionRevisionsTabPanel.showPanel(null, null)); /* Not indexing and without permissions */
  180. assertFalse(subversionRevisionsTabPanel.showPanel(null, null)); /* Not indexing but with permissions */
  181. }
  182. public void testShowPanelWhenMultipleSubversionManagerIsIndexing()
  183. {
  184. SubversionRevisionsTabPanel subversionRevisionsTabPanel;
  185. mockMultipleSubversionRepositoryManager.reset();
  186. mockMultipleSubversionRepositoryManager.expects(exactly(2)).method("isIndexingRevisions").withNoArguments().will(returnValue(true));
  187. mockPermissionManager.reset();
  188. mockPermissionManager.expects(exactly(2)).method("hasPermission").with(eq(Permissions.VIEW_VERSION_CONTROL), NULL, NULL).will(
  189. onConsecutiveCalls(
  190. returnValue(false),
  191. returnValue(true)
  192. )
  193. );
  194. subversionRevisionsTabPanel = getSubversionRevisionsTabPanel();
  195. assertFalse(subversionRevisionsTabPanel.showPanel(null, null)); /* Not indexing and without permissions */
  196. assertTrue(subversionRevisionsTabPanel.showPanel(null, null)); /* Not indexing but with permissions */
  197. }
  198. protected static class TestRevisionIndexer extends RevisionIndexer
  199. {
  200. public TestRevisionIndexer(MultipleSubversionRepositoryManager multipleSubversionRepositoryManager, VersionManager versionManager, IssueManager issueManager, PermissionManager permissionManager, ChangeHistoryManager changeHistoryManager, IndexPathManager indexPathManager)
  201. {
  202. super(multipleSubversionRepositoryManager, versionManager, issueManager, permissionManager, changeHistoryManager, indexPathManager);
  203. }
  204. }
  205. }