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

/src/main/resources/com/onresolve/jira/groovy/test/TestFasttrackTransition.groovy

https://bitbucket.org/sorin/jira-plugin-intellij
Groovy | 235 lines | 168 code | 45 blank | 22 comment | 7 complexity | 9a52c6d735e27b5d6014f2f1a922c656 MD5 | raw file
  1. package com.onresolve.jira.groovy.test
  2. import com.atlassian.jira.project.Project
  3. import com.atlassian.jira.util.BuildUtils
  4. import com.onresolve.jira.groovy.canned.workflow.postfunctions.FasttrackTransition
  5. import com.opensymphony.workflow.WorkflowContext
  6. import org.apache.log4j.Category
  7. import org.junit.After
  8. import org.junit.Before
  9. import org.junit.Test
  10. import static junit.framework.Assert.*
  11. import com.atlassian.jira.jql.builder.JqlQueryBuilder
  12. import com.atlassian.query.Query
  13. import com.atlassian.jira.issue.search.SearchRequest
  14. import com.atlassian.jira.issue.search.SearchResults
  15. import com.atlassian.jira.web.bean.PagerFilter
  16. import com.atlassian.jira.issue.search.SearchProvider
  17. import com.atlassian.jira.security.JiraAuthenticationContext
  18. import com.atlassian.jira.bc.issue.IssueService
  19. import com.atlassian.jira.ComponentManager
  20. import com.atlassian.jira.issue.IssueInputParametersImpl
  21. import com.atlassian.jira.issue.IssueInputParameters
  22. import com.onresolve.jira.groovy.CannedScriptListener
  23. /**
  24. * User: jechlin2
  25. * Date: 13-Dec-2010
  26. * Time: 17:36:00
  27. */
  28. class TestFasttrackTransition extends BaseSubTaskTest {
  29. Category log = Category.getInstance(this.class)
  30. SearchProvider searchProvider = componentManager.getSearchProvider()
  31. JiraAuthenticationContext authenticationContext = componentManager.getJiraAuthenticationContext()
  32. TestFasttrackTransition() {
  33. // def gcl = this.class.classLoader.parent
  34. // gcl.clearCache()
  35. }
  36. @Before
  37. public void setUp() {
  38. }
  39. @After
  40. public void tearDown() {
  41. deleteIssue(issue);
  42. }
  43. @Test
  44. public void testCreateIssue() {
  45. // test with a workflow that auto transition according to a condition based on the summary
  46. // there must be a project called GRV-25 with a workflow that auto-transtions through 711
  47. // when the issue is created
  48. // The condition for the transition should be issue.summary == 'ss'.
  49. // this project uses JSU to require a field on create - may fail without
  50. def hasJSU = true
  51. try {
  52. Class.forName("com.googlecode.jsu.workflow.validator.FieldsRequiredValidator")
  53. }
  54. catch (Exception e) {
  55. hasJSU = false
  56. }
  57. if (hasJSU) {
  58. createIssue("admin", projectManager.getProjectObjByName("GRV-25"))
  59. Thread.sleep(1000)
  60. issue = issueManager.getIssueObject(issue.id)
  61. junit.framework.Assert.assertEquals("Open", issue.statusObject.name)
  62. assertTrue commentManager.getComments(issue).first().body == "blllah"
  63. }
  64. else {
  65. log.debug("No JSU, skip test.")
  66. }
  67. }
  68. @Test
  69. public void testListenerTransitionOnWorkflowAction() {
  70. CannedScriptListener cannedScriptListener = new CannedScriptListener(getScriptManager())
  71. List listenerConfig = cannedScriptListener.getConfig()
  72. List origConfig = listenerConfig.clone() as List
  73. listenerConfig.add(
  74. [
  75. events: ['4'], // resolved
  76. projects: ['JRA'],
  77. params: [
  78. (FasttrackTransition.FIELD_ACTION): '701 Close Issue',
  79. (FasttrackTransition.FIELD_ADDITIONAL_SCRIPT): "issueInputParameters.setComment(\'Close comment\'); ",
  80. ],
  81. clazz: FasttrackTransition.class.name,
  82. ]
  83. )
  84. cannedScriptListener.saveConfig(listenerConfig)
  85. createIssue("admin")
  86. IssueService issueService = ComponentManager.getComponentInstanceOfType(IssueService.class)
  87. IssueInputParameters issueInputParameters = new IssueInputParametersImpl([:])
  88. // note - the comment is only valid if there is a screen here - in the case of Start Progress there is not
  89. issueInputParameters.setComment("Test script transitioned this to in progress")
  90. issueInputParameters.setResolutionId("2")
  91. IssueService.TransitionValidationResult validationResult = issueService.validateTransition(adminUser, issue.id, 5 as Integer, issueInputParameters)
  92. log.debug(validationResult.errorCollection)
  93. log.debug issueService.transition(adminUser, validationResult).errorCollection
  94. // validationResult = issueService.validateTransition(adminUser, issue.id, 701 as Integer, issueInputParameters)
  95. // log.debug(validationResult.errorCollection)
  96. // log.debug issueService.transition(adminUser, validationResult).errorCollection
  97. log.warn "Final status is: " + issueManager.getIssueObject(issue.id).statusObject.name
  98. cannedScriptListener.saveConfig(origConfig)
  99. }
  100. @Test
  101. public void testListenerTransition() {
  102. // use the standard test project again, and create a listener that will automatically move to Resolve
  103. def scriptManager = getScriptManager()
  104. CannedScriptListener cannedScriptListener = new CannedScriptListener(scriptManager)
  105. List listenerConfig = scriptManager.getListenerConfigs()
  106. List origConfig = listenerConfig.clone() as List
  107. assert origConfig.isEmpty()
  108. log.debug listenerConfig
  109. String additionalScript = "issueInputParameters.setComment(\'Some comment\')"
  110. listenerConfig.add(
  111. [
  112. events: ['1'],
  113. projects: ['JRA'],
  114. params: [
  115. (FasttrackTransition.FIELD_ACTION): '5 Resolve Issue',
  116. (FasttrackTransition.FIELD_ADDITIONAL_SCRIPT): additionalScript,
  117. ],
  118. clazz: FasttrackTransition.class.name,
  119. ]
  120. )
  121. cannedScriptListener.saveConfig(listenerConfig)
  122. createIssue("admin")
  123. cannedScriptListener.saveConfig(origConfig)
  124. Thread.sleep(1000)
  125. issue = issueManager.getIssueObject(issue.id)
  126. assertEquals("Resolved", issue.statusObject.name)
  127. assertEquals("Fixed", issue.resolutionObject?.name) // defaults to Fixed
  128. assertTrue commentManager.getComments(issue)?.first()?.body == "Some comment"
  129. // do a jql query for the issue in the new state to test that the issue has been indexed correctly
  130. JqlQueryBuilder jqlQueryBuilder = JqlQueryBuilder.newBuilder()
  131. Query query = jqlQueryBuilder.where().status("Resolved").and().resolution("Fixed").and().issue(issue.key).buildQuery()
  132. log.debug("query: ${query.toString()}")
  133. SearchRequest sr = new SearchRequest(query)
  134. SearchResults results = searchProvider.search(sr.getQuery(), authenticationContext.getUser(), PagerFilter.getUnlimitedFilter())
  135. assertEquals(1, results.getIssues().size())
  136. }
  137. @Test
  138. public void testFailingFasttrack() {
  139. createIssue(null)
  140. Map<String, Object> inputs = getInputs()
  141. // No assignee so should not transition
  142. // Stack trace here seems unavoidable on jira 3.13
  143. new FasttrackTransition().doScript(inputs)
  144. junit.framework.Assert.assertEquals("Open", issue.getStatusObject().getName())
  145. }
  146. @Test
  147. public void testFasttrack() {
  148. createIssue("admin")
  149. Map<String, Object> inputs = getInputs()
  150. new FasttrackTransition().doScript(inputs)
  151. Thread.sleep(1000)
  152. // reload issue
  153. issue = issueManager.getIssueObject(issue.id)
  154. junit.framework.Assert.assertEquals("In Progress", issue.statusObject.name)
  155. // set a comment and convert back to open
  156. if ((BuildUtils.getCurrentBuildNumber() as Long) < 519) {
  157. inputs[(FasttrackTransition.FIELD_ADDITIONAL_SCRIPT)] = """
  158. issue.setResolutionId('2')
  159. workflowTransitionUtil.setParams(['comment': 'Some comment'])
  160. """
  161. }
  162. else {
  163. inputs[(FasttrackTransition.FIELD_ADDITIONAL_SCRIPT)] = """
  164. issueInputParameters.setComment(\'Some comment\')
  165. \nissueInputParameters.setResolutionId(\'2\')"""
  166. }
  167. inputs[(FasttrackTransition.FIELD_ACTION)] = "5" // stop progress
  168. new FasttrackTransition().doScript(inputs)
  169. Thread.sleep(1000)
  170. issue = issueManager.getIssueObject(issue.id)
  171. junit.framework.Assert.assertEquals("Resolved", issue.statusObject.name)
  172. junit.framework.Assert.assertEquals("Won't Fix", issue.resolutionObject.name)
  173. assertTrue commentManager.getComments(issue).first().body == "Some comment"
  174. }
  175. private Map<String, Object> getInputs() {
  176. Map<String, Object> inputs = [
  177. transientVars: [
  178. issue: issue,
  179. caller: "admin",
  180. context: [
  181. getCaller: {"admin"},
  182. toString: {"dummy"}
  183. ] as WorkflowContext,
  184. ],
  185. issue: issue,
  186. (FasttrackTransition.FIELD_ACTION): '4'
  187. ] as Map<String, Object>
  188. return inputs
  189. }
  190. }