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.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.Test;
import org.jvnet.hudson.test.JenkinsRule;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import com.atlassian.jira.rest.client.api.domain.Issue;
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.SearchIssuesStep.SearchStepExecution;
public class SearchIssuesStepTest {
@ClassRule
public static JenkinsRule jenkinsRule = new JenkinsRule();
@Inject
SearchIssuesStep.DescriptorImpl descriptor;
@Before
public void setUp() {
jenkinsRule.getInstance().getInjector().injectMembers(this);
}
@Test
public void configRoundTrip() throws Exception {
configRoundTrip("");
configRoundTrip("key='EXAMPLE-1'");
}
private void configRoundTrip(String jql) throws Exception {
SearchIssuesStep step = new StepConfigTester(jenkinsRule).configRoundTrip(new SearchIssuesStep(jql));
assertEquals(jql, step.getJql());
}
@Test
public void testCallGetIssuesFromJqlSearch() throws Exception {
JiraSession session = mock(JiraSession.class);
String jql = "key='EXAMPLE-1'";
Issue issue = mock(Issue.class);
when(issue.getKey()).thenReturn("EXAMPLE-1");
final List<Issue> assertCalledList = new ArrayList<Issue>();
when(session.getIssuesFromJqlSearch(jql)).then(new Answer<List<Issue>>() {
@Override
public List<Issue> answer(InvocationOnMock invocation) throws Throwable {
Issue issue = mock(Issue.class);
when(issue.getKey()).thenReturn("EXAMPLE-1");
assertCalledList.add(issue);
return assertCalledList;
}
});
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("jql", jql);
SearchIssuesStep step = (SearchIssuesStep) descriptor.newInstance(r);
StepContext ctx = mock(StepContext.class);
when(ctx.get(Node.class)).thenReturn(jenkinsRule.getInstance());
when(ctx.get(Run.class)).thenReturn(mockRun);
SearchStepExecution start = (SearchStepExecution) step.start(ctx);
List<String> returnedList = start.run();
assertThat(assertCalledList, hasSize(1));
assertThat(returnedList, hasSize(1));
assertThat(assertCalledList.iterator().next().getKey(), equalTo("EXAMPLE-1"));
assertThat(returnedList.iterator().next(), equalTo("EXAMPLE-1"));
}
}