package hudson.plugins.jira.pipeline; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jenkinsci.plugins.workflow.steps.StepConfigTester; import org.jenkinsci.plugins.workflow.steps.StepContext; import org.junit.Before; import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.JenkinsRule; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import com.google.inject.Inject; import hudson.model.Job; import hudson.model.Node; import hudson.model.Run; import hudson.plugins.jira.JiraProjectProperty; import hudson.plugins.jira.JiraSession; import hudson.plugins.jira.JiraSite; import hudson.plugins.jira.pipeline.CommentStep.CommentStepExecution; public class CommentStepTest { @ClassRule public static JenkinsRule jenkinsRule = new JenkinsRule(); @Inject CommentStep.DescriptorImpl descriptor; @Before public void setUp() { jenkinsRule.getInstance().getInjector().injectMembers(this); } @Test public void configRoundTrip() throws Exception { configRoundTrip("EXAMPLE-1", "comment"); } private void configRoundTrip(String issueKey, String body) throws Exception { CommentStep configRoundTrip = new StepConfigTester(jenkinsRule) .configRoundTrip(new CommentStep(issueKey, body)); assertEquals(issueKey, configRoundTrip.getIssueKey()); assertEquals(body, configRoundTrip.getBody()); } @Test public void testCallSessionAddComment() throws Exception { JiraSession session = mock(JiraSession.class); final String issueKey = "KEY"; final String body = "dsgsags"; final List<Object> assertCalledParams = new ArrayList<Object>(); Mockito.doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) throws Throwable { String issueId = invocation.getArgumentAt(0, String.class); String comment = invocation.getArgumentAt(1, String.class); System.out.println("issueId: " + issueId); System.out.println("comment: " + comment); assertThat(issueId, equalTo(issueKey)); assertThat(comment, equalTo(body)); assertCalledParams.addAll(Arrays.asList(invocation.getArguments())); return null; } }).when(session).addComment(Mockito.<String> anyObject(), Mockito.<String> anyObject(), Mockito.<String> anyObject(), Mockito.<String> anyObject()); JiraSite site = mock(JiraSite.class); when(site.getSession()).thenReturn(session); Run mockRun = mock(Run.class); Job mockJob = mock(Job.class); when(mockRun.getParent()).thenReturn(mockJob); JiraProjectProperty jiraProjectProperty = mock(JiraProjectProperty.class); when(jiraProjectProperty.getSite()).thenReturn(site); when(mockJob.getProperty(JiraProjectProperty.class)).thenReturn(jiraProjectProperty); Map<String, Object> r = new HashMap<String, Object>(); r.put("issueKey", issueKey); r.put("body", body); CommentStep step = (CommentStep) descriptor.newInstance(r); StepContext ctx = mock(StepContext.class); when(ctx.get(Node.class)).thenReturn(jenkinsRule.getInstance()); when(ctx.get(Run.class)).thenReturn(mockRun); assertThat(assertCalledParams, hasSize(0)); CommentStepExecution start = (CommentStepExecution) step.start(ctx); start.run(); assertThat(assertCalledParams, hasSize(4)); } }