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

https://bitbucket.org/sorin/jira-plugin-intellij · Groovy · 195 lines · 146 code · 31 blank · 18 comment · 7 complexity · 28af58a99819859b59fa259881cd18cb MD5 · raw file

  1. package com.onresolve.jira.groovy.test
  2. import org.apache.log4j.Category
  3. import org.junit.After
  4. import org.junit.Before
  5. import org.junit.Test
  6. import static junit.framework.Assert.assertNotNull
  7. import com.onresolve.jira.groovy.canned.admin.CopyCustomField
  8. import com.atlassian.jira.issue.fields.CustomField
  9. import static junit.framework.Assert.assertEquals
  10. import com.atlassian.jira.issue.search.SearchRequest
  11. import com.atlassian.jira.bc.filter.SearchRequestService
  12. import com.atlassian.jira.bc.JiraServiceContextImpl
  13. import com.atlassian.jira.bc.JiraServiceContext
  14. import com.atlassian.jira.security.JiraAuthenticationContext
  15. import com.atlassian.jira.issue.ModifiedValue
  16. import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
  17. import static junit.framework.Assert.assertNull
  18. import com.atlassian.jira.util.BuildUtils
  19. import com.atlassian.jira.ComponentManager
  20. import com.atlassian.jira.issue.customfields.manager.OptionsManager
  21. import com.atlassian.jira.issue.customfields.option.Option
  22. import com.atlassian.jira.jql.builder.JqlQueryBuilder
  23. /**
  24. * User: jechlin2
  25. * Date: 13-Dec-2010
  26. * Time: 17:36:00
  27. */
  28. class TestCopyCustomField extends BaseSubTaskTest {
  29. Category log = Category.getInstance(this.class)
  30. CustomField sourceField
  31. CustomField targetField
  32. static TEST_FILTER_ID
  33. JiraAuthenticationContext authenticationContext
  34. JiraServiceContext ctx
  35. def SearchRequest filter
  36. static String FILTER_NAME = "JRA project issues"
  37. TestCopyCustomField() {
  38. // def gcl = this.class.classLoader.parent
  39. // gcl.clearCache()
  40. authenticationContext = componentManager.getJiraAuthenticationContext()
  41. ctx = new JiraServiceContextImpl(authenticationContext.getUser());
  42. }
  43. @Before
  44. public void setUp() {
  45. log.debug ("setUp")
  46. tearDown()
  47. log.debug ("issueType: ${issueType.getName()}")
  48. assertNotNull(project)
  49. issue = componentManager.getIssueFactory().getIssue()
  50. issue.setProject(project.getGenericValue())
  51. issue.setSummary "my summary"
  52. issue.setReporterId "admin"
  53. issue.setIssueType issueType.getGenericValue()
  54. issue.setPriorityId('2')
  55. sourceField = customFieldManager.getCustomFieldObjectByName("TextFieldA")
  56. assertNotNull(sourceField)
  57. targetField = customFieldManager.getCustomFieldObjectByName("TextFieldB")
  58. assertNotNull(targetField)
  59. assertNotNull(customFieldManager.getCustomFieldObjectByName("FreeTextA"))
  60. assertNotNull(customFieldManager.getCustomFieldObjectByName("SelectListA"))
  61. assertNotNull(customFieldManager.getCustomFieldObjectByName("MultiSelectA"))
  62. def query = JqlQueryBuilder.newBuilder().where().project(project.id).buildQuery()
  63. def sr = new SearchRequest(query)
  64. sr.setName(FILTER_NAME)
  65. def serviceUser = ctx.user ?: ctx.loggedInUser
  66. sr.setOwnerUserName(serviceUser.getName())
  67. filter = searchRequestService.createFilter(ctx, sr, true)
  68. assertNotNull(filter)
  69. TEST_FILTER_ID = filter.id
  70. CustomField selectListCF = customFieldManager.getCustomFieldObjectByName("SelectListA")
  71. // jira 4.4+ - we need to provide an option here
  72. if ((BuildUtils.getCurrentBuildNumber() as Long) >= 649) {
  73. OptionsManager optionsManager = ComponentManager.getComponentInstanceOfType(OptionsManager.class)
  74. Option option = optionsManager.getOptions(selectListCF.getRelevantConfig(issue)).getOptionForValue("CCC", null)
  75. issue.setCustomFieldValue(selectListCF, option)
  76. }
  77. else {
  78. issue.setCustomFieldValue(selectListCF, "CCC")
  79. }
  80. issue.setCustomFieldValue(sourceField, "AAA")
  81. issueManager.createIssue(adminUser, issue);
  82. indexManager.reIndex(issue)
  83. log.debug ("Created issue: $issue")
  84. // issue = issueManager.getIssueObject("JRA-300")
  85. }
  86. // @After
  87. public void tearDown() {
  88. deleteAllIssues();
  89. searchRequestService.getOwnedFilters(componentManager.getJiraAuthenticationContext().user).each {
  90. if (it.name == FILTER_NAME) {
  91. deleteFilter(ctx, it)
  92. }
  93. }
  94. }
  95. @Test
  96. public void testCopyTextFields() {
  97. Map inputs
  98. Map params
  99. // short text to short text
  100. inputs = [
  101. (CopyCustomField.FIELD_FILTER_ID): TEST_FILTER_ID,
  102. (CopyCustomField.FIELD_SOURCE_FIELD_ID): sourceField.getId(),
  103. (CopyCustomField.FIELD_TARGET_FIELD_ID): this.targetField.getId(),
  104. ]
  105. params = new CopyCustomField().doScript(inputs)
  106. log.debug (params)
  107. assertEquals(sourceField.getValue(issue), this.targetField.getValue(issue))
  108. // short text to long text
  109. targetField = customFieldManager.getCustomFieldObjectByName("FreeTextA")
  110. inputs = [
  111. (CopyCustomField.FIELD_FILTER_ID): TEST_FILTER_ID,
  112. (CopyCustomField.FIELD_SOURCE_FIELD_ID): sourceField.getId(),
  113. (CopyCustomField.FIELD_TARGET_FIELD_ID): targetField.getId(),
  114. ]
  115. params = new CopyCustomField().doScript(inputs)
  116. log.debug (params)
  117. assertEquals(sourceField.getValue(issue), targetField.getValue(issue))
  118. // previous to 4.4 it would set a select list value even if the option did not exist, which isn't right but not changing that now
  119. if ((BuildUtils.getCurrentBuildNumber() as Long) >= 649) {
  120. // short text to select list - test when there is no valid target option - just log it and set to null
  121. sourceField.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(sourceField), "XXYYZZ"), new DefaultIssueChangeHolder())
  122. targetField = customFieldManager.getCustomFieldObjectByName("SelectListA")
  123. inputs = [
  124. (CopyCustomField.FIELD_FILTER_ID): TEST_FILTER_ID,
  125. (CopyCustomField.FIELD_SOURCE_FIELD_ID): sourceField.getId(),
  126. (CopyCustomField.FIELD_TARGET_FIELD_ID): targetField.getId(),
  127. ]
  128. params = new CopyCustomField().doScript(inputs)
  129. assertNull(targetField.getValue(issue))
  130. }
  131. // short text to select list
  132. sourceField.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(sourceField), "AAA"), new DefaultIssueChangeHolder())
  133. targetField = customFieldManager.getCustomFieldObjectByName("SelectListA")
  134. inputs = [
  135. (CopyCustomField.FIELD_FILTER_ID): TEST_FILTER_ID,
  136. (CopyCustomField.FIELD_SOURCE_FIELD_ID): sourceField.getId(),
  137. (CopyCustomField.FIELD_TARGET_FIELD_ID): targetField.getId(),
  138. ]
  139. params = new CopyCustomField().doScript(inputs)
  140. log.debug (params)
  141. assertEquals(sourceField.getValue(issue), targetField.getValue(issue).toString())
  142. }
  143. // doesn't work on 5.0-beta1 for some reason
  144. @Test
  145. public void testSingleSelectToMultiSelect() {
  146. // single select to multi select
  147. sourceField = customFieldManager.getCustomFieldObjectByName("SelectListA")
  148. targetField = customFieldManager.getCustomFieldObjectByName("MultiSelectA")
  149. Map inputs = [
  150. (CopyCustomField.FIELD_FILTER_ID): TEST_FILTER_ID,
  151. (CopyCustomField.FIELD_SOURCE_FIELD_ID): sourceField.getId(),
  152. (CopyCustomField.FIELD_TARGET_FIELD_ID): targetField.getId(),
  153. ]
  154. Map params = new CopyCustomField().doScript(inputs)
  155. log.debug (params)
  156. if ((BuildUtils.getCurrentBuildNumber() as Long) >= 649) {
  157. // 4.4 - compare LazyLoadedOptions by value
  158. assertEquals([sourceField.getValue(issue).value], targetField.getValue(issue)*.value)
  159. }
  160. else {
  161. assertEquals([sourceField.getValue(issue)], targetField.getValue(issue))
  162. }
  163. }
  164. }