/src/main/resources/com/onresolve/jira/groovy/test/TestFasttrackTransition.groovy
Groovy | 235 lines | 168 code | 45 blank | 22 comment | 7 complexity | 9a52c6d735e27b5d6014f2f1a922c656 MD5 | raw file
- package com.onresolve.jira.groovy.test
-
- import com.atlassian.jira.project.Project
- import com.atlassian.jira.util.BuildUtils
- import com.onresolve.jira.groovy.canned.workflow.postfunctions.FasttrackTransition
- import com.opensymphony.workflow.WorkflowContext
- import org.apache.log4j.Category
- import org.junit.After
- import org.junit.Before
- import org.junit.Test
- import static junit.framework.Assert.*
- import com.atlassian.jira.jql.builder.JqlQueryBuilder
- import com.atlassian.query.Query
- import com.atlassian.jira.issue.search.SearchRequest
- import com.atlassian.jira.issue.search.SearchResults
- import com.atlassian.jira.web.bean.PagerFilter
- import com.atlassian.jira.issue.search.SearchProvider
- import com.atlassian.jira.security.JiraAuthenticationContext
-
- import com.atlassian.jira.bc.issue.IssueService
- import com.atlassian.jira.ComponentManager
- import com.atlassian.jira.issue.IssueInputParametersImpl
- import com.atlassian.jira.issue.IssueInputParameters
- import com.onresolve.jira.groovy.CannedScriptListener
-
- /**
- * User: jechlin2
- * Date: 13-Dec-2010
- * Time: 17:36:00
- */
- class TestFasttrackTransition extends BaseSubTaskTest {
-
- Category log = Category.getInstance(this.class)
- SearchProvider searchProvider = componentManager.getSearchProvider()
- JiraAuthenticationContext authenticationContext = componentManager.getJiraAuthenticationContext()
-
- TestFasttrackTransition() {
- // def gcl = this.class.classLoader.parent
- // gcl.clearCache()
- }
-
- @Before
- public void setUp() {
-
- }
-
- @After
- public void tearDown() {
- deleteIssue(issue);
- }
-
- @Test
- public void testCreateIssue() {
-
- // test with a workflow that auto transition according to a condition based on the summary
- // there must be a project called GRV-25 with a workflow that auto-transtions through 711
- // when the issue is created
- // The condition for the transition should be issue.summary == 'ss'.
-
- // this project uses JSU to require a field on create - may fail without
-
- def hasJSU = true
- try {
- Class.forName("com.googlecode.jsu.workflow.validator.FieldsRequiredValidator")
- }
- catch (Exception e) {
- hasJSU = false
- }
-
- if (hasJSU) {
- createIssue("admin", projectManager.getProjectObjByName("GRV-25"))
-
- Thread.sleep(1000)
- issue = issueManager.getIssueObject(issue.id)
- junit.framework.Assert.assertEquals("Open", issue.statusObject.name)
- assertTrue commentManager.getComments(issue).first().body == "blllah"
- }
- else {
- log.debug("No JSU, skip test.")
- }
- }
-
- @Test
- public void testListenerTransitionOnWorkflowAction() {
- CannedScriptListener cannedScriptListener = new CannedScriptListener(getScriptManager())
- List listenerConfig = cannedScriptListener.getConfig()
- List origConfig = listenerConfig.clone() as List
-
- listenerConfig.add(
- [
- events: ['4'], // resolved
- projects: ['JRA'],
- params: [
- (FasttrackTransition.FIELD_ACTION): '701 Close Issue',
- (FasttrackTransition.FIELD_ADDITIONAL_SCRIPT): "issueInputParameters.setComment(\'Close comment\'); ",
- ],
- clazz: FasttrackTransition.class.name,
- ]
- )
-
- cannedScriptListener.saveConfig(listenerConfig)
-
- createIssue("admin")
-
- IssueService issueService = ComponentManager.getComponentInstanceOfType(IssueService.class)
- IssueInputParameters issueInputParameters = new IssueInputParametersImpl([:])
-
- // note - the comment is only valid if there is a screen here - in the case of Start Progress there is not
- issueInputParameters.setComment("Test script transitioned this to in progress")
- issueInputParameters.setResolutionId("2")
- IssueService.TransitionValidationResult validationResult = issueService.validateTransition(adminUser, issue.id, 5 as Integer, issueInputParameters)
- log.debug(validationResult.errorCollection)
- log.debug issueService.transition(adminUser, validationResult).errorCollection
-
-
- // validationResult = issueService.validateTransition(adminUser, issue.id, 701 as Integer, issueInputParameters)
- // log.debug(validationResult.errorCollection)
- // log.debug issueService.transition(adminUser, validationResult).errorCollection
-
- log.warn "Final status is: " + issueManager.getIssueObject(issue.id).statusObject.name
-
- cannedScriptListener.saveConfig(origConfig)
-
- }
-
- @Test
- public void testListenerTransition() {
-
- // use the standard test project again, and create a listener that will automatically move to Resolve
- def scriptManager = getScriptManager()
- CannedScriptListener cannedScriptListener = new CannedScriptListener(scriptManager)
- List listenerConfig = scriptManager.getListenerConfigs()
- List origConfig = listenerConfig.clone() as List
- assert origConfig.isEmpty()
- log.debug listenerConfig
-
- String additionalScript = "issueInputParameters.setComment(\'Some comment\')"
- listenerConfig.add(
- [
- events: ['1'],
- projects: ['JRA'],
- params: [
- (FasttrackTransition.FIELD_ACTION): '5 Resolve Issue',
- (FasttrackTransition.FIELD_ADDITIONAL_SCRIPT): additionalScript,
- ],
- clazz: FasttrackTransition.class.name,
- ]
- )
-
- cannedScriptListener.saveConfig(listenerConfig)
- createIssue("admin")
- cannedScriptListener.saveConfig(origConfig)
-
-
- Thread.sleep(1000)
- issue = issueManager.getIssueObject(issue.id)
- assertEquals("Resolved", issue.statusObject.name)
- assertEquals("Fixed", issue.resolutionObject?.name) // defaults to Fixed
- assertTrue commentManager.getComments(issue)?.first()?.body == "Some comment"
-
- // do a jql query for the issue in the new state to test that the issue has been indexed correctly
- JqlQueryBuilder jqlQueryBuilder = JqlQueryBuilder.newBuilder()
- Query query = jqlQueryBuilder.where().status("Resolved").and().resolution("Fixed").and().issue(issue.key).buildQuery()
- log.debug("query: ${query.toString()}")
- SearchRequest sr = new SearchRequest(query)
- SearchResults results = searchProvider.search(sr.getQuery(), authenticationContext.getUser(), PagerFilter.getUnlimitedFilter())
- assertEquals(1, results.getIssues().size())
- }
-
- @Test
- public void testFailingFasttrack() {
- createIssue(null)
- Map<String, Object> inputs = getInputs()
-
- // No assignee so should not transition
- // Stack trace here seems unavoidable on jira 3.13
- new FasttrackTransition().doScript(inputs)
- junit.framework.Assert.assertEquals("Open", issue.getStatusObject().getName())
- }
-
- @Test
- public void testFasttrack() {
- createIssue("admin")
-
- Map<String, Object> inputs = getInputs()
-
- new FasttrackTransition().doScript(inputs)
-
- Thread.sleep(1000)
- // reload issue
- issue = issueManager.getIssueObject(issue.id)
- junit.framework.Assert.assertEquals("In Progress", issue.statusObject.name)
-
- // set a comment and convert back to open
- if ((BuildUtils.getCurrentBuildNumber() as Long) < 519) {
- inputs[(FasttrackTransition.FIELD_ADDITIONAL_SCRIPT)] = """
- issue.setResolutionId('2')
- workflowTransitionUtil.setParams(['comment': 'Some comment'])
- """
- }
- else {
- inputs[(FasttrackTransition.FIELD_ADDITIONAL_SCRIPT)] = """
- issueInputParameters.setComment(\'Some comment\')
- \nissueInputParameters.setResolutionId(\'2\')"""
- }
-
- inputs[(FasttrackTransition.FIELD_ACTION)] = "5" // stop progress
-
- new FasttrackTransition().doScript(inputs)
- Thread.sleep(1000)
- issue = issueManager.getIssueObject(issue.id)
- junit.framework.Assert.assertEquals("Resolved", issue.statusObject.name)
- junit.framework.Assert.assertEquals("Won't Fix", issue.resolutionObject.name)
- assertTrue commentManager.getComments(issue).first().body == "Some comment"
- }
-
- private Map<String, Object> getInputs() {
- Map<String, Object> inputs = [
- transientVars: [
- issue: issue,
- caller: "admin",
- context: [
- getCaller: {"admin"},
- toString: {"dummy"}
-
- ] as WorkflowContext,
- ],
- issue: issue,
- (FasttrackTransition.FIELD_ACTION): '4'
- ] as Map<String, Object>
- return inputs
- }
-
-
- }