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

/src/test/java/com/atlassian/jira/ext/commitacceptance/server/evaluator/EvaluateServiceTest.java

https://bitbucket.org/MentalPower/jira-commit-acceptance-plugin
Java | 209 lines | 145 code | 46 blank | 18 comment | 3 complexity | 4884a561b47d013ff14d837cb9b522a5 MD5 | raw file
  1. package com.atlassian.jira.ext.commitacceptance.server.evaluator;
  2. import com.atlassian.core.util.collection.EasyList;
  3. import com.atlassian.crowd.embedded.api.User;
  4. import com.atlassian.jira.bc.security.login.LoginResult;
  5. import com.atlassian.jira.ext.commitacceptance.server.action.AcceptanceSettings;
  6. import com.atlassian.jira.ext.commitacceptance.server.action.AcceptanceSettingsManager;
  7. import com.atlassian.jira.issue.Issue;
  8. import com.atlassian.jira.issue.IssueManager;
  9. import com.atlassian.jira.issue.MutableIssue;
  10. import com.atlassian.jira.project.Project;
  11. import com.atlassian.jira.project.ProjectManager;
  12. import com.atlassian.jira.security.login.LoginManager;
  13. import com.atlassian.jira.user.MockUser;
  14. import com.atlassian.jira.user.util.UserManager;
  15. import org.apache.commons.lang.StringUtils;
  16. import org.jmock.Mock;
  17. import org.jmock.MockObjectTestCase;
  18. import org.jmock.core.constraint.IsEqual;
  19. import org.jmock.core.constraint.IsInstanceOf;
  20. import org.jmock.core.constraint.IsNull;
  21. import java.util.Collections;
  22. import java.util.List;
  23. import java.util.Set;
  24. /**
  25. * @author <a href="mailto:ferenc.kiss@midori.hu">Ferenc Kiss</a>
  26. * @version $Id$
  27. */
  28. public class EvaluateServiceTest extends MockObjectTestCase {
  29. private Mock mockProjectManager;
  30. private Mock mockIssueManager;
  31. private Mock mockUserManager;
  32. private Mock mockLoginManager;
  33. private Mock mockAcceptanceSettingsManager;
  34. private EvaluateService evaluateService;
  35. private boolean userCanAuthenticate;
  36. protected void setUp() throws Exception {
  37. super.setUp();
  38. mockProjectManager = new Mock(ProjectManager.class);
  39. mockIssueManager = new Mock(IssueManager.class);
  40. mockUserManager = new Mock(UserManager.class);
  41. mockLoginManager = new Mock(LoginManager.class);
  42. mockAcceptanceSettingsManager = new Mock(AcceptanceSettingsManager.class);
  43. evaluateService = new EvaluateService((ProjectManager) mockProjectManager.proxy(), (IssueManager) mockIssueManager.proxy(), (UserManager) mockUserManager.proxy(), (LoginManager) mockLoginManager.proxy(), (AcceptanceSettingsManager) mockAcceptanceSettingsManager.proxy()) {
  44. protected User getUser(String userName) {
  45. return EvaluateServiceTest.this.getUser();
  46. }
  47. };
  48. }
  49. protected User getUser() {
  50. return new MockUser("dchui", "David Chui", "no-reply@atlassian.com");
  51. }
  52. public void testAccessCommitWithFailedUserAuthentication() {
  53. Mock mockLoginResult = new Mock(LoginResult.class);
  54. mockLoginResult.expects(once()).method("isOK").will(returnValue(false));
  55. mockLoginManager.expects(once()).method("authenticate").with(
  56. new IsInstanceOf(User.class),
  57. new IsEqual("password")
  58. ).will(returnValue(mockLoginResult.proxy()));
  59. assertFalse(isCommitAccepted(evaluateService.acceptCommit("dchui", "password", "dchui", "TST, TEST", "TST-1")));
  60. }
  61. public void testAccessCommitWithNoProjectKeys() {
  62. Mock mockLoginResult = new Mock(LoginResult.class);
  63. mockLoginResult.expects(once()).method("isOK").will(returnValue(true));
  64. mockLoginManager.expects(once()).method("authenticate").with(
  65. new IsInstanceOf(User.class),
  66. new IsEqual("password")
  67. ).will(returnValue(mockLoginResult.proxy()));
  68. assertFalse(isCommitAccepted(evaluateService.acceptCommit("dchui", "password", "dchui", StringUtils.EMPTY, "TST-1")));
  69. }
  70. public void testAccessCommitWithInvalidProjectKeys() {
  71. Mock mockLoginResult = new Mock(LoginResult.class);
  72. mockLoginResult.expects(once()).method("isOK").will(returnValue(false));
  73. mockLoginManager.expects(once()).method("authenticate").with(
  74. new IsInstanceOf(User.class),
  75. new IsEqual("password")
  76. ).will(returnValue(mockLoginResult.proxy()));
  77. assertFalse(isCommitAccepted(evaluateService.acceptCommit("dchui", "password", "dchui", "TST", "TST-1")));
  78. }
  79. public void testAccessCommitWithWithNoIssueKeysAndGlobalSettings() {
  80. userCanAuthenticate = true;
  81. mockAcceptanceSettingsManager.expects(once()).method("getSettings").with(new IsNull()).will(returnValue(new AcceptanceSettings()));
  82. evaluateService = new EvaluateService((ProjectManager) mockProjectManager.proxy(), (IssueManager) mockIssueManager.proxy(), (UserManager) mockUserManager.proxy(), (LoginManager) mockLoginManager.proxy(), (AcceptanceSettingsManager) mockAcceptanceSettingsManager.proxy()) {
  83. protected User getUser(String userName) {
  84. return EvaluateServiceTest.this.getUser();
  85. }
  86. protected List getIssueKeysFromString(String commitMessage) {
  87. return Collections.EMPTY_LIST;
  88. }
  89. };
  90. Mock mockLoginResult = new Mock(LoginResult.class);
  91. mockLoginResult.expects(once()).method("isOK").will(returnValue(true));
  92. mockLoginManager.expects(once()).method("authenticate").with(
  93. new IsInstanceOf(User.class),
  94. new IsEqual("password")
  95. ).will(returnValue(mockLoginResult.proxy()));
  96. /* Since no issues are referred by the commit message, there are no issues to check against. We should allow the
  97. * user to commit the code in this sense.
  98. */
  99. assertTrue(isCommitAccepted(evaluateService.acceptCommit("dchui", "password", "dchui", "*", StringUtils.EMPTY)));
  100. mockAcceptanceSettingsManager.verify();
  101. }
  102. public void testAccessCommitWithWithInvalidIssueKeysAndGlobalSettings() {
  103. userCanAuthenticate = true;
  104. mockAcceptanceSettingsManager.expects(once()).method("getSettings").with(new IsNull()).will(returnValue(new AcceptanceSettings()));
  105. mockIssueManager.expects(once()).method("getIssueObject").with(eq("TST-1")).will(returnValue(null));
  106. evaluateService = new EvaluateService((ProjectManager) mockProjectManager.proxy(), (IssueManager) mockIssueManager.proxy(), (UserManager) mockUserManager.proxy(), (LoginManager) mockLoginManager.proxy(), (AcceptanceSettingsManager) mockAcceptanceSettingsManager.proxy()) {
  107. protected User getUser(String userName) {
  108. return EvaluateServiceTest.this.getUser();
  109. }
  110. protected List getIssueKeysFromString(String commitMessage) {
  111. return EasyList.build("TST-1");
  112. }
  113. };
  114. Mock mockLoginResult = new Mock(LoginResult.class);
  115. mockLoginResult.expects(once()).method("isOK").will(returnValue(true));
  116. mockLoginManager.expects(once()).method("authenticate").with(
  117. new IsInstanceOf(User.class),
  118. new IsEqual("password")
  119. ).will(returnValue(mockLoginResult.proxy()));
  120. /* Since the commit message contains issue keys which do not point to existing issues, we don't allow to commit
  121. * to happen.
  122. */
  123. assertFalse(isCommitAccepted(evaluateService.acceptCommit("dchui", "password", "dchui", "*", "TST-1")));
  124. mockAcceptanceSettingsManager.verify();
  125. }
  126. public void testAccessCommitWithWithAValidIssueKeysAndGlobalSettings() {
  127. Mock mockIssue = new Mock(MutableIssue.class);
  128. Issue issue = (Issue) mockIssue.proxy();
  129. userCanAuthenticate = true;
  130. mockAcceptanceSettingsManager.expects(once()).method("getSettings").with(new IsNull()).will(returnValue(new AcceptanceSettings()));
  131. mockIssueManager.expects(once()).method("getIssueObject").with(eq("TST-1")).will(returnValue(issue));
  132. evaluateService = new EvaluateService((ProjectManager) mockProjectManager.proxy(), (IssueManager) mockIssueManager.proxy(), (UserManager) mockUserManager.proxy(), (LoginManager) mockLoginManager.proxy(), (AcceptanceSettingsManager) mockAcceptanceSettingsManager.proxy()) {
  133. protected User getUser(String userName) {
  134. return EvaluateServiceTest.this.getUser();
  135. }
  136. protected List getIssueKeysFromString(String commitMessage) {
  137. return EasyList.build("TST-1");
  138. }
  139. protected String checkIssuesAcceptance(String committerName, Project project, Set issues) {
  140. /* If there are issues passed into this method, the issue keys named in the commit message do refer
  141. * to existing issues in the system. So we're good. And when we're good, we'll just pretend that the set of issues
  142. * met the requirements of the predicates.
  143. */
  144. return null == issues || issues.size() == 0 ? "Fake commit denial" : null;
  145. }
  146. };
  147. Mock mockLoginResult = new Mock(LoginResult.class);
  148. mockLoginResult.expects(once()).method("isOK").will(returnValue(true));
  149. mockLoginManager.expects(once()).method("authenticate").with(
  150. new IsInstanceOf(User.class),
  151. new IsEqual("password")
  152. ).will(returnValue(mockLoginResult.proxy()));
  153. assertTrue(isCommitAccepted(evaluateService.acceptCommit("dchui", "password", "dchui", "*", "TST-1")));
  154. mockAcceptanceSettingsManager.verify();
  155. }
  156. /**
  157. * Returns <code>true</code> if the result string returned by the evaluator
  158. * means the commit was accepted.
  159. */
  160. protected boolean isCommitAccepted(String result) {
  161. return result.startsWith(Boolean.TRUE.toString() + "|");
  162. }
  163. }