Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagegroovy
titlereopen_linked_tests.groovy
collapsetrue
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.link.IssueLinkManager
import com.atlassian.jira.issue.link.IssueLinkType
import com.atlassian.jira.issue.link.IssueLinkTypeManager
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.jql.builder.JqlQueryBuilder
import com.atlassian.jira.user.util.UserManager;
import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.bc.issue.search.SearchService;
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.issue.search.SearchResults
import com.atlassian.jira.web.bean.PagerFilter;
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.user.UserPropertyManager
import com.atlassian.jira.propertyset.JiraPropertySetFactory;
import com.google.common.collect.ImmutableMap;
import com.opensymphony.module.propertyset.PropertySet;
import com.opensymphony.module.propertyset.PropertySetManager;
import com.atlassian.jira.util.BuildUtils
import com.atlassian.jira.util.BuildUtilsInfo
import com.atlassian.jira.util.BuildUtilsInfoImpl
import com.atlassian.plugin.PluginManager
import com.atlassian.jira.bc.license.JiraLicenseService
import com.atlassian.jira.bc.license.JiraLicenseServiceImpl
import org.apache.log4j.Level
import org.apache.log4j.Logger
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.config.ResolutionManager
import com.atlassian.jira.workflow.WorkflowTransitionUtil
import com.atlassian.jira.workflow.WorkflowTransitionUtilImpl
import com.atlassian.jira.util.JiraUtils
import com.atlassian.jira.bc.ServiceResultImpl
import com.atlassian.jira.bc.issue.IssueService.TransitionValidationResult
import com.atlassian.jira.issue.IssueInputParametersImpl
import com.atlassian.jira.bc.issue.DefaultIssueService
import com.opensymphony.workflow.InvalidActionException
import com.atlassian.jira.workflow.IssueWorkflowManager



Object getIssues(jqlQuery){
    // A list of GenericValues representing issues
    List<Issue> searchResults = null;

    SearchService.ParseResult parseResult =  searchService.parseQuery(serviceAccount, jqlQuery);

    if (parseResult.isValid()) {
        // throws SearchException
        SearchResults results = searchService.search(serviceAccount, parseResult.getQuery(), PagerFilter.getUnlimitedFilter());
        searchResults = results.getIssues();
        return searchResults;
    } 
            
     return [] 
}


searchService =  ComponentAccessor.getComponent(SearchService.class);
issueManager = ComponentAccessor.getIssueManager()
customFieldManager = ComponentAccessor.getCustomFieldManager()
serviceAccount = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
IssueWorkflowManager issueWorkflowManager = ComponentAccessor.getComponentOfType(IssueWorkflowManager.class);

Issue issue = issue;

jql = "issue in requirementTests('${issue.key}')"
issues = getIssues(jql)


issues.each {
    WorkflowTransitionUtil workflowTransitionUtil = ( WorkflowTransitionUtil ) JiraUtils.loadComponent( WorkflowTransitionUtilImpl.class );
    MutableIssue tempissue = issueManager.getIssueObject(it.key)
    workflowTransitionUtil.setIssue(tempissue);
    workflowTransitionUtil.setUsername(serviceAccount.getUsername());
    
    def actionId = 3  // change it accordingly
    if (issueWorkflowManager.isValidAction(tempissue, actionId)){   
        workflowTransitionUtil.setAction(actionId);//Id of the status you want to transition to
        try {
            workflowTransitionUtil.progress();
        } catch (InvalidActionException e) {
            log.error("Caught exception trying to transition issue" + e.getMessage());
        }
    }
}

Requirement projects

Although you can go to Xray settings, in the "Requirement Projects" tab, and define a project as containing requirement issues, sometimes you may want to automate this.

Show Tests Count for a requirement

In the following example, a "script field" is used to to show the total amount of linked Tests to a given requirement.The following script shows several functions that you can use to obtain the list of projects with requirement coverage enabled and to set or unset a project as being a requirements project. 


Code Block
languagegroovy
titlerequirement_projectstotal_linked_tests_to_requirement.groovy
collapsetrue
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.link.IssueLinkManager
import com.atlassian.jira.issue.link.IssueLinkType
import com.atlassian.jira.issue.link.IssueLinkTypeManager
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.jql.builder.JqlQueryBuilder
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.user.util.UserManager;
import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.bc.issue.search.SearchService;
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.issue.search.SearchResults
import com.atlassian.jira.web.bean.PagerFilter;
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.user.UserPropertyManager
import com.atlassian.jira.propertyset.JiraPropertySetFactory;
import com.google.common.collect.ImmutableMap;
import com.opensymphony.module.propertyset.PropertySet;
import com.opensymphony.module.propertyset.PropertySetManager;

ENTITY_NAME = "com.xpandit.raven";
ENTITY_ID = 12345678987654321L;
REQUIREMENT_PROJECTS_SETTING = "requirement-coverage.projects";

projectManager = ComponentAccessor.getProjectManager()

Object obtainRequirementProjectsIds() {
	JiraPropertySetFactory jiraPropertySetFactory = ComponentAccessor.getComponent(JiraPropertySetFactory.class);
	def setting = jiraPropertySetFactory.buildCachingPropertySet(ENTITY_NAME, ENTITY_ID, true);
	def requirementProjects = Eval.me(setting.getText(REQUIREMENT_PROJECTS_SETTING))
}


Object obtainRequirementProjects() {
	def requirementProjects = obtainRequirementProjectsIds()
    log.debug("requirementProjects: "+requirementProjects)
    def availableProjects = projectManager.getProjectObjects()
    availableProjects.findAll { it.id.toInteger() in requirementProjects}
}

boolean enableRequirementCoverageForProject(project){
 	JiraPropertySetFactory jiraPropertySetFactory = ComponentAccessor.getComponent(JiraPropertySetFactory.class);
	def setting = jiraPropertySetFactory.buildCachingPropertySet(ENTITY_NAME, ENTITY_ID, true);
    projectList = obtainRequirementProjectsIds()
    if (!projectList.contains(project.id.toInteger())){
		setting.setText(REQUIREMENT_PROJECTS_SETTING,(projectList << project.id).toString())
    }
}

boolean disableRequirementCoverageForProject(project){
 	JiraPropertySetFactory jiraPropertySetFactory = ComponentAccessor.getComponent(JiraPropertySetFactory.class);
	def setting = jiraPropertySetFactory.buildCachingPropertySet(ENTITY_NAME, ENTITY_ID, true);
    projectList = obtainRequirementProjectsIds()
    if (projectList.contains(project.id.toInteger())){
        projectList.removeAll{it == project.id.toInteger()}        
		setting.setText(REQUIREMENT_PROJECTS_SETTING,projectList.toString())
    }
}



boolean requirementCoverageEnabledForProject(project){
	JiraPropertySetFactory jiraPropertySetFactory = ComponentAccessor.getComponent(JiraPropertySetFactory.class);
	def setting = jiraPropertySetFactory.buildCachingPropertySet(ENTITY_NAME, ENTITY_ID, true);
	def requirementProjects = Eval.me(setting.getText(REQUIREMENT_PROJECTS_SETTING))
    (project.id.toInteger() in requirementProjects)
}



projects = obtainRequirementProjects()
project = projectManager.getProjectObjByKey("CALC")
log.debug(requirementCoverageEnabledForProject(project))
enableRequirementCoverageForProject(project)
log.debug(requirementCoverageEnabledForProject(project))

Create Test Execution from Test Set issue screen

In this example, we're adding a new option in the "More" menu, by adding new "web section", "web item" ScriptRunner elements.

The following script, will create a Test Execution containing all the Tests that are part of the current Test Set.

It will set some fields as read-only.

Code Block
languagegroovy
titlecreate_test_exec_from_testset.groovy
collapsetrue
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.link.IssueLinkManager
import com.atlassian.jira.issue.link.IssueLinkType
import com.atlassian.jira.issue.link.IssueLinkTypeManager
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.jql.builder.JqlQueryBuilder
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.user.util.UserManager;
import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.issue.search.SearchResults
import com.atlassian.jira.web.bean.PagerFilter;
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.user.UserPropertyManager
import com.atlassian.jira.propertyset.JiraPropertySetFactory;
import com.google.common.collect.ImmutableMap;
import com.opensymphony.module.propertyset.PropertySet;
import com.opensymphony.module.propertyset.PropertySetManager;
import com.atlassian.jira.util.BuildUtils
import com.atlassian.jira.util.BuildUtilsInfo
import com.atlassian.jira.util.BuildUtilsInfoImpl
import com.atlassian.plugin.PluginAccessor
import com.atlassian.plugin.PluginManager
import com.atlassian.jira.bc.license.JiraLicenseService
import com.atlassian.jira.bc.license.JiraLicenseServiceImpl
import org.apache.log4j.Level
import org.apache.log4j.Logger
import com.atlassian.jira.issue.IssueManager


// creates a Test Execution from a Test Set and fillouts the summary, as readonly, and the Tests associated

// projectManager = ComponentAccessor.getProjectManager()
issueManager = ComponentAccessor.getIssueManager()
searchService =  ComponentAccessor.getComponent(SearchService.class);
serviceAccount = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()


Object getIssues(jqlQuery){
    // A list of GenericValues representing issues
    List<Issue> searchResults = null;

    SearchService.ParseResult parseResult =  searchService.parseQuery(serviceAccount, jqlQuery);

    if (parseResult.isValid()) {
        // throws SearchException
        SearchResults results = searchService.search(serviceAccount, parseResult.getQuery(), PagerFilter.getUnlimitedFilter());
        searchResults = results.getIssues();
        return searchResults;
    } 
            
     return [] 
}


if (getBehaviourContextId() == "create-testexec-from-testset") {
    getFieldById("project-field").setReadOnly(true)
    getFieldById("issuetype-field").setReadOnly(true)

    def contextIssue = issueManager.getIssueObject(getContextIssueId())
    getFieldById("summary").setFormValue("Issue created from ${contextIssue.key}").setReadOnly(true)
   
    def jql = "issue in testSetTests('${contextIssue.key}')"
    def issues = getIssues(jql)
    
    getFieldByName("Tests association with a Test Execution").setFormValue(issues.collect { it.key})
}

As a mere example, you can see below how it could be setup, by creating a web section and then a webitem to trigger the actual script for creating the Test Execution.

Image Removed  Image Removed   Image Removed Image Removed

Calculate requirement status for a certain version

Xray provides the "Requirement Status" custom field that shows the calculated coverage status for some version(s) depending on the configuration of that field in Xray's Custom Fields Preferences settings.

Sometimes you may need to evaluate the calculate requirement coverage status on some specific version, based on the executions made for that version.

A possible use case could be defining a scripted field present on the requirement issue screen that calculates the coverage status for some specific hardcoded version.

Code Block
languagegroovy
titlecalculate_requirement_status_for_some_version.groovy
collapsetrue
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.link.IssueLinkManager
import com.atlassian.jira.issue.link.IssueLinkType
import com.atlassian.jira.issue.link.IssueLinkTypeManager
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.jql.builder.JqlQueryBuilder
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.user.util.UserManager;
import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.bc.issue.search.SearchService;
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.issue.search.SearchResults
import com.atlassian.jira.web.bean.PagerFilter;
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.user.UserPropertyManager
import com.atlassian.jira.propertyset.JiraPropertySetFactory;
import com.google.common.collect.ImmutableMap;
import com.opensymphony.module.propertyset.PropertySet;
import com.opensymphony.module.propertyset.PropertySetManager;
import com.atlassian.jira.util.BuildUtils
import com.atlassian.jira.util.BuildUtilsInfo
import com.atlassian.jira.util.BuildUtilsInfoImpl
import com.atlassian.plugin.PluginAccessor
import com.atlassian.plugin.PluginManager
import com.atlassian.jira.bc.license.JiraLicenseService
import com.atlassian.jira.bc.license.JiraLicenseServiceImpl
import org.apache.log4j.Level
import org.apache.log4j.Logger
import com.atlassian.jira.issue.IssueManager


Object getIssues(jqlQuery){
    // A list of GenericValues representing issues
    List<Issue> searchResults = null;

    SearchService.ParseResult parseResult =  searchService.parseQuery(serviceAccount, jqlQuery);

    if (parseResult.isValid()) {
        // throws SearchException
        SearchResults results = searchService.search(serviceAccount, parseResult.getQuery(), PagerFilter.getUnlimitedFilter());
        searchResults = results.getIssues();
        return searchResults;
    } 
            
     return [] 
}

projectManager = ComponentAccessor.getProjectManager()
componentManager = ComponentManager.getInstance();
searchService =  ComponentAccessor.getComponent(SearchService.class);
issueManager = ComponentAccessor.getIssueManager()
customFieldManager = ComponentAccessor.getCustomFieldManager()
userUtil = ComponentAccessor.getUserUtil();
serviceAccount = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
pluginAccessor = componentManager.getPluginAccessor();

Issue issue = issue;

log.debug(issue.project.name)
projectName = issue.project.name
version = 'v3.0'
    
statuses = ['OK','NOK','NOTRUN','UNCOVERED','UNKNOWN']
def status = ''


statuses.find { 
    jql = "key = ${issue.key} and issue in requirements('${it}','${projectName}','${version}')"
    issues = getIssues(jql)
    count = issues.size 
    if (count > 0) {
        status = it;
        return true; // break
    } else {
            return false;
    }
}

status

Show Tests Count for a requirement

In the following example, a "script field" is used to to show the total amount of linked Tests to a given requirement.

Code Block
languagegroovy
titletotal_linked_tests_to_requirement.groovy
collapsetrue
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.link.IssueLinkManager
import com.atlassian.jira.issue.link.IssueLinkType
import com.atlassian.jira.issue.link.IssueLinkTypeManager
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.jql.builder.JqlQueryBuilder
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.user.util.UserManager;
import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.bc.issue.search.SearchService;
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.issue.search.SearchResults
import com.atlassian.jira.web.bean.PagerFilter;
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.user.UserPropertyManager
import com.atlassian.jira.propertyset.JiraPropertySetFactory;
import com.google.common.collect.ImmutableMap;
import com.opensymphony.module.propertyset.PropertySet;
import com.opensymphony.module.propertyset.PropertySetManager;
import com.atlassian.jira.util.BuildUtils
import com.atlassian.jira.util.BuildUtilsInfo
import com.atlassian.jira.util.BuildUtilsInfoImpl
import com.atlassian.plugin.PluginAccessor
import com.atlassian.plugin.PluginManager
import com.atlassian.jira.bc.license.JiraLicenseService
import com.atlassian.jira.bc.license.JiraLicenseServiceImpl
import org.apache.log4j.Level
import org.apache.log4j.Logger
import com.atlassian.jira.issue.IssueManager


Object getIssues(jqlQuery){
    // A list of GenericValues representing issues
    List<Issue> searchResults = null;

    SearchService.ParseResult parseResult =  searchService.parseQuery(serviceAccount, jqlQuery);

    if (parseResult.isValid()) {
        // throws SearchException
        SearchResults results = searchService.search(serviceAccount, parseResult.getQuery(), PagerFilter.getUnlimitedFilter());
        searchResults = results.getIssues();
        return searchResults;
    }

     return []
}

projectManager = ComponentAccessor.getProjectManager()
componentManager = ComponentManager.getInstance();
searchService =  ComponentAccessor.getComponent(SearchService.class);
issueManager = ComponentAccessor.getIssueManager()
customFieldManager = ComponentAccessor.getCustomFieldManager()
userUtil = ComponentAccessor.getUserUtil();
serviceAccount = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
pluginAccessor = componentManager.getPluginAccessor();

IssueManager iManager = ComponentAccessor.getIssueManager();
Issue issue = issue;

jql = "issue in requirementTests('${issue.key}')"
issues = getIssues(jql)
issues.size

Show Defects Count for a requirement

In the following example, a "script field" is used to to show the total amount of linked defects to a given requirement and also provide a link to easily obtain those defects in the Issue search page.

This script field is configured to generate the output as HTML.

Code Block
languagegroovy
titletotal_linked_tests_to_requirement.groovy
collapsetrue
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.link.IssueLinkManager
import com.atlassian.jira.issue.link.IssueLinkType
import com.atlassian.jira.issue.link.IssueLinkTypeManager
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.jql.builder.JqlQueryBuilder
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.user.util.UserManager;
import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.bc.issue.search.SearchService;
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.issue.search.SearchResults
import com.atlassian.jira.web.bean.PagerFilter;
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.user.UserPropertyManager
import com.atlassian.jira.propertyset.JiraPropertySetFactory;
import com.google.common.collect.ImmutableMap;
import com.opensymphony.module.propertyset.PropertySet;
import com.opensymphony.module.propertyset.PropertySetManager;
import com.atlassian.jira.util.BuildUtils
import com.atlassian.jira.util.BuildUtilsInfo
import com.atlassian.jira.util.BuildUtilsInfoImpl
import com.atlassian.plugin.PluginAccessor
import com.atlassian.plugin.PluginManager
import com.atlassian.jira.bc.license.JiraLicenseService
import com.atlassian.jira.bc.license.JiraLicenseServiceImpl
import org.apache.log4j.Level
import org.apache.log4j.Logger
import com.atlassian.jira.issue.IssueManager
 
 
Object getIssues(jqlQuery){
    // A list of GenericValues representing issues
    List<Issue> searchResults = null;
 
    SearchService.ParseResult parseResult =  searchService.parseQuery(serviceAccount, jqlQuery);
 
    if (parseResult.isValid()) {
        // throws SearchException
        SearchResults results = searchService.search(serviceAccount, parseResult.getQuery(), PagerFilter.getUnlimitedFilter());
        searchResults = results.getIssues();
        return searchResults;
    }
 
     return []
}
 
projectManager = ComponentAccessor.getProjectManager()
componentManager = ComponentManager.getInstance();
searchService =  ComponentAccessor.getComponent(SearchService.class);
issueManager = ComponentAccessor.getIssueManager()
customFieldManager = ComponentAccessor.getCustomFieldManager()
userUtil = ComponentAccessor.getUserUtil();
serviceAccount = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
pluginAccessor = componentManager.getPluginAccessor();
 
IssueManager iManager = ComponentAccessor.getIssueManager();
Issue issue = issue;
 
jql = "issue in defectsCreatedForRequirement('${issue.key}')"
issues = getIssues(jql)
"<a href='/issues/?jql=issue%20in%20defectsCreatedForRequirement(${issue.key})'>${issues.size}</a>"

...

If you need to obtain the issue types configured as being handled as requirements or as defects by Xray, you may use the following script.

With some additional code, you may filter this out based on the issue types available in some certain project.

Code Block
languagegroovy
titlerequirement_and_defect_issue_types.groovy
collapsetrue
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.link.IssueLinkManager
import com.atlassian.jira.issue.link.IssueLinkType
import com.atlassian.jira.issue.link.IssueLinkTypeManager
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.jql.builder.JqlQueryBuilder
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.user.util.UserManager;import com.atlassian.jira.util.BuildUtils
import com.atlassian.jira.util.BuildUtilsInfo
import com.atlassian.jira.util.BuildUtilsInfoImpl
import com.atlassian.plugin.PluginAccessor
import com.atlassian.plugin.PluginManager
import com.atlassian.jira.bc.issuelicense.IssueServiceJiraLicenseService
import com.atlassian.jira.bc.issue.search.SearchService;license.JiraLicenseServiceImpl
import comorg.atlassianapache.jira.issue.search.SearchProvider
import com.atlassian.jira.issue.search.SearchResults
import com.atlassian.jira.web.bean.PagerFilter;
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.user.UserPropertyManager
import com.atlassian.jira.propertyset.JiraPropertySetFactory;
import com.google.common.collect.ImmutableMap;
import com.opensymphony.module.propertyset.PropertySet;log4j.Level
import org.apache.log4j.Logger
import com.opensymphonyatlassian.modulejira.propertyset.PropertySetManager;

ENTITY_NAME = "com.xpandit.raven";
ENTITY_ID = 12345678987654321L;
REQUIREMENT_ISSUE_TYPES = "issue-type-mapping.requirements";
DEFECT_ISSUE_TYPES = "issue-type-mapping.defects";

user = ComponentAccessor.jiraAuthenticationContext.getLoggedInUser()
constantsManager = ComponentAccessor.getConstantsManager()
availableIssueTypes = constantsManager.getAllIssueTypeObjects()issue.IssueManager


Object getIssues(jqlQuery){
    // A list of GenericValues representing issues
    List<Issue> searchResults = null;

    SearchService.ParseResult parseResult =  searchService.parseQuery(serviceAccount, jqlQuery);

    if (parseResult.isValid()) {
        // throws SearchException
         
Object getRequirementIssueTypes(){
SearchResults results = searchService.search(serviceAccount, parseResult.getQuery(), PagerFilter.getUnlimitedFilter());
       JiraPropertySetFactory jiraPropertySetFactorysearchResults = ComponentAccessorresults.getComponentgetIssues(JiraPropertySetFactory.class);
     setting = jiraPropertySetFactory.buildCachingPropertySet(ENTITY_NAME, ENTITY_ID, true) return searchResults;
    configuredIssueTypes = Eval.me(setting.getText(REQUIREMENT_ISSUE_TYPES))}

    availableIssueTypes.findAll{it.id.toInteger() in configuredIssueTypes} return []
}

Object getDefectIssueTypesprojectManager = ComponentAccessor.getProjectManager(){
componentManager    JiraPropertySetFactory jiraPropertySetFactory == ComponentManager.getInstance();
searchService =  ComponentAccessor.getComponent(JiraPropertySetFactorySearchService.class);
issueManager = ComponentAccessor.getIssueManager()
customFieldManager  setting= ComponentAccessor.getCustomFieldManager()
userUtil = jiraPropertySetFactoryComponentAccessor.buildCachingPropertySet(ENTITY_NAME, ENTITY_ID, truegetUserUtil();
    configuredIssueTypesserviceAccount = EvalComponentAccessor.megetJiraAuthenticationContext(setting).getTextgetLoggedInUser(DEFECT_ISSUE_TYPES))
    availableIssueTypes.findAll{it.id.toInteger() in configuredIssueTypes}
}

getRequirementIssueTypes()
getDefectIssueTypes()
)
pluginAccessor = componentManager.getPluginAccessor();

IssueManager iManager = ComponentAccessor.getIssueManager();
Issue issue = issue;

jql = "issue in requirementTests('${issue.key}')"
issues = getIssues(jql)
issues.size


Trigger a Jenkins project build from a Test Plan

...