/src/main/resources/com/onresolve/jira/groovy/test/TestSplitCustomFieldContext.groovy
Groovy | 211 lines | 150 code | 44 blank | 17 comment | 9 complexity | 89ca1f4134bf0fc00ef00d7daf9a85d5 MD5 | raw file
- package com.onresolve.jira.groovy.test;
-
- import org.apache.log4j.Category
- import com.atlassian.jira.issue.comments.Comment
- import org.apache.log4j.Category
- import org.junit.After
- import org.junit.Before
- import org.junit.Test
- import static junit.framework.Assert.assertNotNull
- import com.atlassian.jira.issue.customfields.CustomFieldType
- import com.atlassian.jira.issue.customfields.CustomFieldSearcher
- import com.atlassian.jira.issue.fields.CustomField
- import com.atlassian.core.util.collection.EasyList
- import com.atlassian.jira.issue.context.GlobalIssueContext
- import com.atlassian.jira.component.ComponentAccessor
- import com.onresolve.jira.groovy.canned.admin.BulkImportCustomFieldValues
- import com.atlassian.jira.ComponentManager
- import com.atlassian.jira.issue.fields.config.manager.FieldConfigSchemeManager
-
- import static junit.framework.Assert.assertEquals
- import com.atlassian.jira.issue.managers.DefaultCustomFieldManager
- import org.apache.log4j.Level
- import com.atlassian.jira.issue.context.manager.JiraContextTreeManager
- import com.atlassian.jira.issue.customfields.CustomFieldUtils
- import com.atlassian.jira.issue.util.IssueChangeHolder
- import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
- import com.atlassian.jira.issue.ModifiedValue
- import com.onresolve.jira.groovy.canned.admin.SplitCustomFieldContext
- import com.atlassian.jira.project.Project
- import com.atlassian.jira.issue.fields.config.FieldConfigScheme
- import com.onresolve.jira.groovy.canned.CannedScript
- import com.onresolve.jira.groovy.GroovyRunner
- import com.atlassian.jira.util.ImportUtils
- import com.atlassian.jira.issue.index.IssueIndexManager
- import com.onresolve.jira.groovy.ScriptManager
- import com.onresolve.jira.groovy.ScriptManagerProxyImpl
- import com.onresolve.jira.groovy.CannedScriptRunner
- import com.atlassian.jira.issue.customfields.option.Option
- import com.atlassian.jira.issue.fields.config.FieldConfig
- import com.atlassian.jira.issue.context.IssueContextImpl
- import com.atlassian.jira.issue.customfields.view.CustomFieldParamsImpl
- import com.atlassian.jira.util.BuildUtils
-
- public class TestSplitCustomFieldContext extends CustomFieldBaseTests {
-
- Project jrtwoProj
- Project jraProj
- def FieldConfigScheme currentFCS
- def CustomField cf
-
- TestSplitCustomFieldContext() {
- // def gcl = this.class.classLoader.parent
- // gcl.clearCache()
-
- jrtwoProj = projectManager.getProjectObjByKey("JRTWO")
- jraProj = projectManager.getProjectObjByKey("JRA")
- }
-
- @Test
- public void testCascadingSelect() {
- setUp("SplittableCascadingSelectList", "com.atlassian.jira.plugin.system.customfieldtypes:cascadingselect",
- "com.atlassian.jira.plugin.system.customfieldtypes:cascadingselectsearcher")
-
- Map<String, Object> inputs = [
- issue: issue,
- (SplitCustomFieldContext.FIELD_FCS): currentFCS.id as String,
- (SplitCustomFieldContext.FIELD_PROJECT_IDS): [jrtwoProj.key as String], // the project to remove from this context
- (SplitCustomFieldContext.FIELD_ISSUE_TYPE_IDS): ["1"],
- (SplitCustomFieldContext.FIELD_NEW_CONTEXT_NAME): "Some new context name",
- ] as Map<String, Object>
-
- def splitCustomFieldContext = new SplitCustomFieldContext()
-
- log.debug splitCustomFieldContext.doValidate(inputs, true)
- def outputs = splitCustomFieldContext.doScript(inputs)
- log.debug outputs
- }
-
-
- @Test
- public void testBasicSelect() {
-
- setUp("SplittableSelect", "com.atlassian.jira.plugin.system.customfieldtypes:select",
- "com.atlassian.jira.plugin.system.customfieldtypes:selectsearcher")
-
- Map<String, Object> inputs = [
- issue: issue,
- (SplitCustomFieldContext.FIELD_FCS): currentFCS.id as String,
- (SplitCustomFieldContext.FIELD_PROJECT_IDS): [jrtwoProj.key as String], // the project to remove from this context
- (SplitCustomFieldContext.FIELD_ISSUE_TYPE_IDS): ["1"],
- (SplitCustomFieldContext.FIELD_NEW_CONTEXT_NAME): "Some new context name",
- ] as Map<String, Object>
-
- def splitCustomFieldContext = new SplitCustomFieldContext()
-
- log.debug splitCustomFieldContext.doValidate(inputs, true)
- def outputs = splitCustomFieldContext.doScript(inputs)
- log.debug outputs
-
- // assertions....
- // test the issue has the right value, and that it's the option from the new select list
- def cfValue = issue.getCustomFieldValue(cf)
- assert cfValue instanceof Option
- assertEquals("A", cfValue.value)
-
- def fieldConfig = cf.getRelevantConfig(issue)
- assert(cfValue == optionsManager.getOptions(fieldConfig).find {it.value == "A"})
-
- // check that the options are the same
- def targetFC = outputs["targetFC"] as FieldConfig
- assertEquals optionsManager.getOptions(targetFC)*.value, optionsManager.getOptions(fieldConfig)*.value
-
- // and that we have the same default value
- assertEquals(cf.getCustomFieldType().getDefaultValue(targetFC), cf.getCustomFieldType().getDefaultValue(fieldConfig))
-
- // and that the new context is associated with the field
- assertEquals([jrtwoProj.key], fieldConfigSchemeManager.getConfigSchemeForFieldConfig(fieldConfig).getAssociatedProjects()*.key)
-
- // and that the original context is no longer associated with the field
- assert([jraProj.key] == fieldConfigSchemeManager.getRelevantConfigScheme(new IssueContextImpl(jraProj.id, "1"), cf).getAssociatedProjects()*.key)
- }
-
- public void setUp(String cfName, String cfKey, String cfSearcher) {
- tearDown() // do first so we can see results
-
- def isCascadingSelect = cfKey.contains("cascadingselect");
- log.debug("setup")
-
- // disable warnings about missing custom field types
- Category.getInstance(DefaultCustomFieldManager.class).setLevel(Level.OFF)
-
- // create cf assoc'd with 2 projects, create options, update issue, run script, check we have the new option value
-
- cf = createCustomField(cfName, cfKey, cfSearcher)
- log.debug(cf.getConfigurationSchemes()*.name)
-
- // associate with both projects
- JiraContextTreeManager jiraContextTreeManager = new JiraContextTreeManager(projectManager, ComponentManager.getInstance().getConstantsManager())
- List contexts = CustomFieldUtils.buildJiraIssueContexts(
- false,
- null,
- ["JRA", "JRTWO"].collect{projectManager.getProjectObjByKey(it).id} as Long[],
- jiraContextTreeManager);
-
- currentFCS = fieldConfigSchemeManager.getConfigSchemesForField(cf).first()
- def fieldConfig = currentFCS.getOneAndOnlyConfig()
-
- def configs = ["1": fieldConfig, "2": fieldConfig]
- currentFCS = new FieldConfigScheme.Builder(currentFCS).setConfigs(configs).toFieldConfigScheme()
- fieldConfigSchemeManager.updateFieldConfigScheme(currentFCS, contexts, cf)
- componentManager.getFieldManager().refresh()
-
- // create options
- ["A", "B"].each {
- optionsManager.createOption(fieldConfig, null, null, it)
- }
-
- // create an issue without these custom fields
- createIssue("admin", jrtwoProj)
- // create issue and set CF value
- createIssue("admin", jrtwoProj)
-
- IssueChangeHolder changeHolder = new DefaultIssueChangeHolder()
- def Option targetOption = optionsManager.getOptions(fieldConfig).find {it.value == "A"} as Option
- log.debug("targetOption: ${targetOption.genericValue}")
-
-
- if (isCascadingSelect) {
- def subOption = optionsManager.createOption(fieldConfig, targetOption.optionId, null, "A1")
-
- // jira 5 wants this different from jira4, fucking PITA
- def customFieldParams
- if ((BuildUtils.getCurrentBuildNumber() as Long) > 713) {
- def cfOptions = [(null): targetOption, "1": subOption]
- customFieldParams = cfOptions
- }
- else {
- def cfOptions = [(null): [targetOption], "1": [subOption]]
- customFieldParams = new CustomFieldParamsImpl(cf, cfOptions)
- }
- cf.updateValue(null, issue, new ModifiedValue(null, customFieldParams), changeHolder)
-
- cf.getCustomFieldType().setDefaultValue(fieldConfig, customFieldParams)
- }
- else {
- cf.updateValue(null, issue, new ModifiedValue(null, targetOption), changeHolder)
-
- // set default
- cf.getCustomFieldType().setDefaultValue(fieldConfig, optionsManager.getOptions(fieldConfig).getOptionForValue("A", null))
- }
-
-
- boolean wasIndexing = ImportUtils.isIndexIssues();
- indexManager.reIndex(issue);
- ImportUtils.setIndexIssues(wasIndexing);
-
- }
-
-
- // @After
- public void tearDown() {
- ["SplittableSelect", "SplittableCascadingSelectList"].each {
- def cf = customFieldManager.getCustomFieldObjectByName(it)
- if (cf)
- customFieldManager.removeCustomField(cf)
- }
- deleteAllIssues()
- deleteAllIssues(jrtwoProj)
- }
-
- }