PageRenderTime 23ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/src/test/groovy/com/ceilfors/jenkins/plugins/jiratrigger/integration/RealJiraRunner.groovy

https://gitlab.com/github-cloud-corp/jira-trigger-plugin
Groovy | 98 lines | 82 code | 13 blank | 3 comment | 11 complexity | 68972fd5dfd3756538585a2a8660c5ee MD5 | raw file
  1. package com.ceilfors.jenkins.plugins.jiratrigger.integration
  2. import com.atlassian.jira.rest.client.api.GetCreateIssueMetadataOptionsBuilder
  3. import com.atlassian.jira.rest.client.api.IssueRestClient
  4. import com.atlassian.jira.rest.client.api.domain.CimProject
  5. import com.atlassian.jira.rest.client.api.domain.Comment
  6. import com.atlassian.jira.rest.client.api.domain.Issue
  7. import com.atlassian.jira.rest.client.api.domain.Transition
  8. import com.atlassian.jira.rest.client.api.domain.input.IssueInputBuilder
  9. import com.atlassian.jira.rest.client.api.domain.input.TransitionInput
  10. import com.ceilfors.jenkins.plugins.jiratrigger.JiraTriggerGlobalConfiguration
  11. import com.ceilfors.jenkins.plugins.jiratrigger.jira.JrjcJiraClient
  12. import groovy.util.logging.Log
  13. import hudson.model.Job
  14. import hudson.model.Queue
  15. import jenkins.model.GlobalConfiguration
  16. import static org.hamcrest.Matchers.*
  17. import static org.junit.Assert.assertThat
  18. /**
  19. * @author ceilfors
  20. */
  21. @Log
  22. class RealJiraRunner extends JrjcJiraClient implements JiraRunner {
  23. JenkinsBlockingQueue jenkinsQueue
  24. JenkinsRunner jenkinsRunner
  25. RealJiraRunner(JenkinsRunner jenkinsRunner) {
  26. super(GlobalConfiguration.all().get(JiraTriggerGlobalConfiguration))
  27. this.jenkinsQueue = new JenkinsBlockingQueue(jenkinsRunner.instance)
  28. this.jenkinsRunner = jenkinsRunner
  29. }
  30. String createIssue() {
  31. createIssue("")
  32. }
  33. String createIssue(String description) {
  34. Long issueTypeId = getIssueTypeId("TEST", "Task")
  35. IssueInputBuilder issueInputBuilder = new IssueInputBuilder("TEST", issueTypeId, "task summary")
  36. if (description) {
  37. issueInputBuilder.description = description
  38. }
  39. jiraRestClient.issueClient.createIssue(issueInputBuilder.build()).claim().key
  40. }
  41. @Override
  42. void updateDescription(String issueKey, String description) {
  43. jiraRestClient.issueClient.updateIssue(issueKey, new IssueInputBuilder().setDescription(description).build()).get(timeout, timeoutUnit)
  44. }
  45. @Override
  46. void updateStatus(String issueKey, String status) {
  47. def issue = jiraRestClient.issueClient.getIssue(issueKey, [IssueRestClient.Expandos.TRANSITIONS]).get(timeout, timeoutUnit)
  48. jiraRestClient.issueClient.transition(issue, new TransitionInput(getTransition(issue, status).id)).get(timeout, timeoutUnit)
  49. }
  50. private Transition getTransition(Issue issue, String status) {
  51. Iterable<Transition> transitions = jiraRestClient.issueClient.getTransitions(issue).get(timeout, timeoutUnit)
  52. String transitionName
  53. if (status == 'Done') {
  54. transitionName = 'Done'
  55. } else if (status == 'In Progress') {
  56. transitionName = 'Start Progress'
  57. } else {
  58. throw new UnsupportedOperationException("Configure this method to support more transition name. Available transitions: ${transitions*.name}")
  59. }
  60. return transitions.find { it.name == transitionName } as Transition
  61. }
  62. @Override
  63. void shouldBeNotifiedWithComment(String issueKey, String jobName) {
  64. Queue.Item scheduledItem = jenkinsQueue.scheduledItem
  65. assertThat("Build is not scheduled!", scheduledItem, is(not(nullValue())))
  66. def issue = jiraRestClient.issueClient.getIssue(issueKey).claim()
  67. Comment lastComment = issue.getComments().last()
  68. Job job = jenkinsRunner.instance.getItemByFullName(jobName, Job)
  69. assertThat("$issueKey was not notified by Jenkins!", lastComment.body, containsString(job.absoluteUrl))
  70. }
  71. @Override
  72. void updateCustomField(String issueKey, String fieldName, String value) {
  73. String fieldId
  74. if (fieldName == JiraSetupRule.CUSTOM_FIELD_NAME) {
  75. fieldId = JiraSetupRule.CUSTOM_FIELD_ID
  76. } else {
  77. throw new UnsupportedOperationException("$fieldName not supported")
  78. }
  79. jiraRestClient.issueClient.updateIssue(issueKey, new IssueInputBuilder().setFieldValue(fieldId, value).build()).get(timeout, timeoutUnit)
  80. }
  81. private Long getIssueTypeId(String project, String issueTypeName) {
  82. Iterable<CimProject> metadata = jiraRestClient.issueClient.getCreateIssueMetadata(new GetCreateIssueMetadataOptionsBuilder().withProjectKeys(project).withIssueTypeNames(issueTypeName).build()).claim()
  83. return metadata[0].issueTypes[0].id
  84. }
  85. }