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

/components/camel-jira/src/test/java/org/apache/camel/component/jira/producer/AddIssueProducerTest.java

https://github.com/gnodet/camel
Java | 200 lines | 156 code | 28 blank | 16 comment | 0 complexity | 446e701dc8d9c1142f1310618d880147 MD5 | raw file
  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one or more
  3. * contributor license agreements. See the NOTICE file distributed with
  4. * this work for additional information regarding copyright ownership.
  5. * The ASF licenses this file to You under the Apache License, Version 2.0
  6. * (the "License"); you may not use this file except in compliance with
  7. * the License. You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. package org.apache.camel.component.jira.producer;
  18. import java.util.Date;
  19. import java.util.HashMap;
  20. import java.util.Map;
  21. import com.atlassian.jira.rest.client.api.IssueRestClient;
  22. import com.atlassian.jira.rest.client.api.JiraRestClient;
  23. import com.atlassian.jira.rest.client.api.JiraRestClientFactory;
  24. import com.atlassian.jira.rest.client.api.MetadataRestClient;
  25. import com.atlassian.jira.rest.client.api.domain.BasicIssue;
  26. import com.atlassian.jira.rest.client.api.domain.BasicPriority;
  27. import com.atlassian.jira.rest.client.api.domain.Issue;
  28. import com.atlassian.jira.rest.client.api.domain.IssueType;
  29. import com.atlassian.jira.rest.client.api.domain.Priority;
  30. import com.atlassian.jira.rest.client.api.domain.input.ComplexIssueInputFieldValue;
  31. import com.atlassian.jira.rest.client.api.domain.input.IssueInput;
  32. import io.atlassian.util.concurrent.Promise;
  33. import io.atlassian.util.concurrent.Promises;
  34. import org.apache.camel.CamelContext;
  35. import org.apache.camel.EndpointInject;
  36. import org.apache.camel.Produce;
  37. import org.apache.camel.ProducerTemplate;
  38. import org.apache.camel.builder.RouteBuilder;
  39. import org.apache.camel.component.jira.JiraComponent;
  40. import org.apache.camel.component.mock.MockEndpoint;
  41. import org.apache.camel.spi.Registry;
  42. import org.apache.camel.test.junit5.CamelTestSupport;
  43. import org.junit.jupiter.api.Test;
  44. import org.junit.jupiter.api.extension.ExtendWith;
  45. import org.mockito.Mock;
  46. import org.mockito.junit.jupiter.MockitoExtension;
  47. import static org.apache.camel.component.jira.JiraConstants.ISSUE_ASSIGNEE;
  48. import static org.apache.camel.component.jira.JiraConstants.ISSUE_PRIORITY_ID;
  49. import static org.apache.camel.component.jira.JiraConstants.ISSUE_PRIORITY_NAME;
  50. import static org.apache.camel.component.jira.JiraConstants.ISSUE_PROJECT_KEY;
  51. import static org.apache.camel.component.jira.JiraConstants.ISSUE_SUMMARY;
  52. import static org.apache.camel.component.jira.JiraConstants.ISSUE_TYPE_ID;
  53. import static org.apache.camel.component.jira.JiraConstants.ISSUE_TYPE_NAME;
  54. import static org.apache.camel.component.jira.JiraConstants.JIRA;
  55. import static org.apache.camel.component.jira.JiraConstants.JIRA_REST_CLIENT_FACTORY;
  56. import static org.apache.camel.component.jira.JiraTestConstants.JIRA_CREDENTIALS;
  57. import static org.apache.camel.component.jira.JiraTestConstants.KEY;
  58. import static org.apache.camel.component.jira.Utils.createIssue;
  59. import static org.apache.camel.component.jira.Utils.userAssignee;
  60. import static org.junit.jupiter.api.Assertions.assertEquals;
  61. import static org.mockito.ArgumentMatchers.any;
  62. import static org.mockito.Mockito.lenient;
  63. @ExtendWith(MockitoExtension.class)
  64. public class AddIssueProducerTest extends CamelTestSupport {
  65. @Mock
  66. private JiraRestClient jiraClient;
  67. @Mock
  68. private JiraRestClientFactory jiraRestClientFactory;
  69. @Mock
  70. private IssueRestClient issueRestClient;
  71. @Mock
  72. private MetadataRestClient metadataRestClient;
  73. @Produce("direct:start")
  74. private ProducerTemplate template;
  75. @EndpointInject("mock:result")
  76. private MockEndpoint mockResult;
  77. private Issue backendIssue;
  78. @Override
  79. protected void bindToRegistry(Registry registry) {
  80. registry.bind(JIRA_REST_CLIENT_FACTORY, jiraRestClientFactory);
  81. }
  82. public void setMocks() {
  83. lenient().when(jiraRestClientFactory.createWithBasicHttpAuthentication(any(), any(), any())).thenReturn(jiraClient);
  84. lenient().when(jiraClient.getIssueClient()).thenReturn(issueRestClient);
  85. lenient().when(jiraClient.getMetadataClient()).thenReturn(metadataRestClient);
  86. Map<Integer, IssueType> issueTypes = new HashMap<>();
  87. issueTypes.put(1, new IssueType(null, 1L, "Bug", false, null, null));
  88. issueTypes.put(2, new IssueType(null, 2L, "Task", false, null, null));
  89. Promise<Iterable<IssueType>> promiseIssueTypes = Promises.promise(issueTypes.values());
  90. lenient().when(metadataRestClient.getIssueTypes()).thenReturn(promiseIssueTypes);
  91. Map<Integer, Priority> issuePriorities = new HashMap<>();
  92. issuePriorities.put(1, new Priority(null, 1L, "High", null, null, null));
  93. issuePriorities.put(2, new Priority(null, 2L, "Low", null, null, null));
  94. Promise<Iterable<Priority>> promisePriorities = Promises.promise(issuePriorities.values());
  95. lenient().when(metadataRestClient.getPriorities()).thenReturn(promisePriorities);
  96. lenient().when(issueRestClient.createIssue(any(IssueInput.class))).then(inv -> {
  97. IssueInput issueInput = inv.getArgument(0);
  98. String summary = (String) issueInput.getField("summary").getValue();
  99. Integer issueTypeId = Integer.parseInt(getValue(issueInput, "issuetype", "id"));
  100. IssueType issueType = issueTypes.get(issueTypeId);
  101. String project = getValue(issueInput, "project", "key");
  102. String description = (String) issueInput.getField("description").getValue();
  103. Integer priorityId = Integer.parseInt(getValue(issueInput, "priority", "id"));
  104. BasicPriority priority = issuePriorities.get(priorityId);
  105. backendIssue = createIssue(11L, summary, project, issueType, description, priority, userAssignee, null, null);
  106. BasicIssue basicIssue = new BasicIssue(backendIssue.getSelf(), backendIssue.getKey(), backendIssue.getId());
  107. return Promises.promise(basicIssue);
  108. });
  109. lenient().when(issueRestClient.getIssue(any())).then(inv -> Promises.promise(backendIssue));
  110. }
  111. private String getValue(IssueInput issueInput, String field, String key) {
  112. ComplexIssueInputFieldValue complexField = (ComplexIssueInputFieldValue) issueInput.getField(field).getValue();
  113. return (String) complexField.getValuesMap().get(key);
  114. }
  115. @Override
  116. protected CamelContext createCamelContext() throws Exception {
  117. setMocks();
  118. CamelContext camelContext = super.createCamelContext();
  119. camelContext.disableJMX();
  120. JiraComponent component = new JiraComponent(camelContext);
  121. camelContext.addComponent(JIRA, component);
  122. return camelContext;
  123. }
  124. @Override
  125. protected RouteBuilder createRouteBuilder() {
  126. return new RouteBuilder() {
  127. @Override
  128. public void configure() {
  129. from("direct:start")
  130. .to("jira://addIssue?jiraUrl=" + JIRA_CREDENTIALS)
  131. .to(mockResult);
  132. }
  133. };
  134. }
  135. @Test
  136. public void verifyIssueAdded() throws InterruptedException {
  137. Map<String, Object> headers = new HashMap<>();
  138. headers.put(ISSUE_PROJECT_KEY, KEY);
  139. headers.put(ISSUE_TYPE_NAME, "Task");
  140. headers.put(ISSUE_SUMMARY, "Demo Bug jira " + (new Date()));
  141. headers.put(ISSUE_PRIORITY_NAME, "Low");
  142. headers.put(ISSUE_ASSIGNEE, "tom");
  143. template.sendBodyAndHeaders("Minha descrição jira " + (new Date()), headers);
  144. Issue issue = issueRestClient.getIssue(backendIssue.getKey()).claim();
  145. assertEquals(backendIssue, issue);
  146. assertEquals(backendIssue.getIssueType(), issue.getIssueType());
  147. assertEquals(backendIssue.getPriority(), issue.getPriority());
  148. assertEquals(backendIssue.getSummary(), issue.getSummary());
  149. assertEquals(backendIssue.getProject(), issue.getProject());
  150. assertEquals(backendIssue.getDescription(), issue.getDescription());
  151. mockResult.expectedMessageCount(1);
  152. mockResult.assertIsSatisfied();
  153. }
  154. @Test
  155. public void verifyIssueAddedWithIds() throws InterruptedException {
  156. Map<String, Object> headers = new HashMap<>();
  157. headers.put(ISSUE_PROJECT_KEY, KEY);
  158. headers.put(ISSUE_TYPE_ID, 2);
  159. headers.put(ISSUE_SUMMARY, "Demo Bug jira " + (new Date()));
  160. headers.put(ISSUE_PRIORITY_ID, 1);
  161. template.sendBodyAndHeaders("Minha descrição jira " + (new Date()), headers);
  162. Issue issue = issueRestClient.getIssue(backendIssue.getKey()).claim();
  163. assertEquals(backendIssue, issue);
  164. assertEquals(backendIssue.getIssueType(), issue.getIssueType());
  165. assertEquals(backendIssue.getPriority(), issue.getPriority());
  166. assertEquals(backendIssue.getSummary(), issue.getSummary());
  167. assertEquals(backendIssue.getProject(), issue.getProject());
  168. assertEquals(backendIssue.getDescription(), issue.getDescription());
  169. mockResult.expectedMessageCount(1);
  170. mockResult.assertIsSatisfied();
  171. }
  172. }