/automation-func-tests/src/test/java/it/com/atlassian/plugin/automation/jira/TestEventTrigger.java

https://bitbucket.org/atlassianlabs/automation · Java · 234 lines · 180 code · 50 blank · 4 comment · 0 complexity · b125852210bca0a4c58b17ec01a845ac MD5 · raw file

  1. package it.com.atlassian.plugin.automation.jira;
  2. import com.atlassian.jira.rest.api.issue.IssueCreateResponse;
  3. import com.atlassian.jira.testkit.client.IssueTypeControl;
  4. import com.atlassian.jira.testkit.client.IssuesControl;
  5. import com.atlassian.jira.testkit.client.restclient.Issue;
  6. import com.atlassian.plugin.automation.page.ActionsForm;
  7. import com.atlassian.plugin.automation.page.AdminPage;
  8. import com.atlassian.plugin.automation.page.CleanupRule;
  9. import com.atlassian.plugin.automation.page.ConfigRuleForm;
  10. import com.atlassian.plugin.automation.page.ConfirmationForm;
  11. import com.atlassian.plugin.automation.page.TriggerPage;
  12. import com.atlassian.plugin.automation.page.action.CommentIssueActionForm;
  13. import com.atlassian.plugin.automation.page.trigger.IssueEventTriggerForm;
  14. import it.com.atlassian.plugin.automation.jira.conditions.IssueCommentedCondition;
  15. import org.junit.Before;
  16. import org.junit.Rule;
  17. import org.junit.Test;
  18. import static com.atlassian.pageobjects.elements.query.Poller.waitUntilTrue;
  19. import static org.junit.Assert.assertEquals;
  20. import static org.junit.Assert.assertTrue;
  21. public class TestEventTrigger extends AbstractAutomationTest
  22. {
  23. @Rule
  24. public CleanupRule cleanup = new CleanupRule(jira());
  25. @Before
  26. public void setup()
  27. {
  28. backdoor().dataImport().restoreDataFromResource("jira-automation-data.zip");
  29. backdoor().project().addProject("Another Test", "TESTTWO", "admin");
  30. }
  31. @Test
  32. public void testEventTriggerSyncProcessing()
  33. {
  34. AdminPage adminPage = jira().gotoLoginPage().loginAsSysAdmin(AdminPage.class);
  35. assertEquals("Some rules are present", 0, adminPage.getRulesCount());
  36. final ConfigRuleForm configRuleForm = adminPage.addRuleForm();
  37. final TriggerPage triggerPage = configRuleForm.ruleName("test").
  38. enabled(true).
  39. next();
  40. triggerPage.selectTrigger(IssueEventTriggerForm.class).
  41. setEvents("Issue Created").
  42. setEventProcessingSynchronous();
  43. final ActionsForm actionsForm = triggerPage.next();
  44. final CommentIssueActionForm actionForm = actionsForm.setInitialAction(CommentIssueActionForm.class);
  45. actionForm.comment("testsync");
  46. final ConfirmationForm confirmationForm = actionsForm.next();
  47. assertTrue("Sync enabled confirmation should be visible", confirmationForm.isIssueEventSyncProcessingEnabled());
  48. confirmationForm.save();
  49. final IssueCreateResponse issueInProject = jira().backdoor().issues().createIssue("TEST", "Issue should get a comment");
  50. String issueKey = issueInProject.key;
  51. waitUntilTrue(new IssueCommentedCondition(jira().backdoor().issues(), issueKey, 1));
  52. Issue issue = jira().backdoor().issues().getIssue(issueKey);
  53. assertEquals("Expected 1 comment", 1, issue.getComments().size());
  54. }
  55. @Test
  56. public void testEventTriggerAsyncProcessing()
  57. {
  58. AdminPage adminPage = jira().gotoLoginPage().loginAsSysAdmin(AdminPage.class);
  59. assertEquals("Some rules are present", 0, adminPage.getRulesCount());
  60. final ConfigRuleForm configRuleForm = adminPage.addRuleForm();
  61. final TriggerPage triggerPage = configRuleForm.ruleName("test").
  62. enabled(true).
  63. next();
  64. triggerPage.selectTrigger(IssueEventTriggerForm.class).
  65. setEvents("Issue Created").
  66. setEventProcessingAsynchronous();
  67. final ActionsForm actionsForm = triggerPage.next();
  68. final CommentIssueActionForm actionForm = actionsForm.setInitialAction(CommentIssueActionForm.class);
  69. actionForm.comment("testasync");
  70. final ConfirmationForm confirmationForm = actionsForm.next();
  71. assertTrue("Async enabled confirmation should be visible", confirmationForm.isIssueEventAsyncProcessingEnabled());
  72. confirmationForm.save();
  73. final IssueCreateResponse issueInProject = jira().backdoor().issues().createIssue("TEST", "Issue should get a comment");
  74. String issueKey = issueInProject.key;
  75. waitUntilTrue(new IssueCommentedCondition(jira().backdoor().issues(), issueKey, 1));
  76. Issue issue = jira().backdoor().issues().getIssue(issueKey);
  77. assertEquals("Expected 1 comment", 1, issue.getComments().size());
  78. }
  79. @Test
  80. public void testEventTriggerWithJQL()
  81. {
  82. AdminPage adminPage = jira().gotoLoginPage().loginAsSysAdmin(AdminPage.class);
  83. assertEquals("Some rules are present", 0, adminPage.getRulesCount());
  84. final ConfigRuleForm configRuleForm = adminPage.addRuleForm();
  85. final TriggerPage triggerPage = configRuleForm.ruleName("test").
  86. enabled(true).
  87. next();
  88. triggerPage.selectTrigger(IssueEventTriggerForm.class).
  89. setEvents("Issue Created").
  90. setJql("project = TEST");
  91. final ActionsForm actionsForm = triggerPage.next();
  92. final CommentIssueActionForm actionForm = actionsForm.setInitialAction(CommentIssueActionForm.class);
  93. actionForm.comment("test");
  94. actionsForm.next().save();
  95. final IssueCreateResponse issueInProject1 = jira().backdoor().issues().createIssue("TESTTWO", "Issue shouldn't get comments");
  96. String issue1Key = issueInProject1.key;
  97. final IssueCreateResponse issueInProject2 = jira().backdoor().issues().createIssue("TEST", "Issue should get comments");
  98. String issue2Key = issueInProject2.key;
  99. waitUntilTrue(new IssueCommentedCondition(jira().backdoor().issues(), issue2Key, 1));
  100. Issue issue1 = jira().backdoor().issues().getIssue(issue1Key);
  101. assertEquals("Expected 0 comments", 0, issue1.getComments().size());
  102. Issue issue2 = jira().backdoor().issues().getIssue(issue2Key);
  103. assertEquals("Expected 1 comments", 1, issue2.getComments().size());
  104. }
  105. @Test
  106. public void testMultipleEventTrigger()
  107. {
  108. AdminPage adminPage = jira().gotoLoginPage().loginAsSysAdmin(AdminPage.class);
  109. assertEquals("Some rules are present", 0, adminPage.getRulesCount());
  110. final ConfigRuleForm configRuleForm = adminPage.addRuleForm();
  111. final TriggerPage triggerPage = configRuleForm.ruleName("test").
  112. enabled(true).
  113. next();
  114. triggerPage.selectTrigger(IssueEventTriggerForm.class).
  115. setEvents("Issue Created", "Issue Closed");
  116. ActionsForm actionsForm = triggerPage.next();
  117. final CommentIssueActionForm actionForm = actionsForm.setInitialAction(CommentIssueActionForm.class);
  118. actionForm.comment("test");
  119. actionsForm.next().save();
  120. final IssueCreateResponse issue = jira().backdoor().issues().createIssue("TEST", "Issue should get comments");
  121. String issueKey = issue.key;
  122. waitUntilTrue(new IssueCommentedCondition(jira().backdoor().issues(), issueKey, 1));
  123. Issue issueObject = jira().backdoor().issues().getIssue(issueKey);
  124. assertEquals("Expected 1 comments", 1, issueObject.getComments().size());
  125. jira().goToViewIssue(issueKey).closeIssue();
  126. waitUntilTrue(new IssueCommentedCondition(jira().backdoor().issues(), issueKey, 2));
  127. issueObject = jira().backdoor().issues().getIssue(issueKey);
  128. assertEquals("Expected 2 comments", 2, issueObject.getComments().size());
  129. }
  130. @Test
  131. public void testEventTriggerLimitUser()
  132. {
  133. backdoor().usersAndGroups().addUser("fred");
  134. backdoor().usersAndGroups().addUserToGroup("fred", "jira-users");
  135. backdoor().usersAndGroups().addUserToGroup("fred", "jira-developers");
  136. AdminPage adminPage = jira().gotoLoginPage().loginAsSysAdmin(AdminPage.class);
  137. assertEquals("Some rules are present", 0, adminPage.getRulesCount());
  138. final ConfigRuleForm configRuleForm = adminPage.addRuleForm();
  139. final TriggerPage triggerPage = configRuleForm.ruleName("test").
  140. enabled(true).
  141. next();
  142. triggerPage.selectTrigger(IssueEventTriggerForm.class).setEvents("Issue Updated").toggleRestrictUsers().toggleAssigneeOnly();
  143. final ActionsForm actionsForm = triggerPage.next();
  144. final CommentIssueActionForm actionForm = actionsForm.setInitialAction(CommentIssueActionForm.class);
  145. actionForm.comment("Issue Updated!");
  146. actionsForm.next().save();
  147. final IssueCreateResponse issue = jira().backdoor().issues().createIssue("TEST", "Issue should get comments from fred only!", "fred");
  148. waitUntilTrue(new IssueCommentedCondition(jira().backdoor().issues(), issue.key, 0));
  149. //now update the issue again as admin. This should have no effect still 'cause we're logged in as admin!
  150. backdoor().issues().setDescription(issue.key, "Edited!");
  151. waitUntilTrue(new IssueCommentedCondition(jira().backdoor().issues(), issue.key, 0));
  152. //lets do it as fred. This should add a comment!
  153. IssuesControl fredIssues = new IssuesControl(jira().environmentData(), new IssueTypeControl(jira().environmentData())).loginAs("fred");
  154. fredIssues.setDescription(issue.key, "Edited by Fred!");
  155. waitUntilTrue(new IssueCommentedCondition(fredIssues, issue.key, 1));
  156. }
  157. @Test
  158. public void testEventTriggerLimitUserByGroup()
  159. {
  160. backdoor().usersAndGroups().addUser("fred");
  161. backdoor().usersAndGroups().addUserToGroup("fred", "jira-users");
  162. backdoor().usersAndGroups().addUserToGroup("fred", "jira-developers");
  163. AdminPage adminPage = jira().gotoLoginPage().loginAsSysAdmin(AdminPage.class);
  164. assertEquals("Some rules are present", 0, adminPage.getRulesCount());
  165. final ConfigRuleForm configRuleForm = adminPage.addRuleForm();
  166. final TriggerPage triggerPage = configRuleForm.ruleName("test").
  167. enabled(true).
  168. next();
  169. triggerPage.selectTrigger(IssueEventTriggerForm.class).setEvents("Issue Updated").toggleRestrictUsers().setGroup("jira-administrators");
  170. final ActionsForm actionsForm = triggerPage.next();
  171. final CommentIssueActionForm actionForm = actionsForm.setInitialAction(CommentIssueActionForm.class);
  172. actionForm.comment("Issue Updated!");
  173. actionsForm.next().save();
  174. final IssuesControl fredIssues = new IssuesControl(jira().environmentData(), new IssueTypeControl(jira().environmentData())).loginAs("fred");
  175. final IssueCreateResponse issue = fredIssues.createIssue("TEST", "Original", "fred");
  176. waitUntilTrue(new IssueCommentedCondition(fredIssues, issue.key, 0));
  177. //now update the issue as fred. This should have no effect still 'cause fred is not in jira-administrators!
  178. fredIssues.setDescription(issue.key, "Edited by Fred!");
  179. waitUntilTrue(new IssueCommentedCondition(fredIssues, issue.key, 0));
  180. //lets do it as admin. This should add a comment!
  181. backdoor().issues().setDescription(issue.key, "Edited by Admin!");
  182. waitUntilTrue(new IssueCommentedCondition(jira().backdoor().issues(), issue.key, 1));
  183. }
  184. }