package hudson.plugins.jira;
import hudson.EnvVars;
import hudson.Launcher;
import hudson.model.*;
import hudson.plugins.jira.model.JiraIssueField;
import hudson.plugins.jira.pipeline.IssueFieldUpdateStep;
import org.junit.Test;
import org.mockito.Matchers;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import com.google.common.collect.Lists;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Arrays;
import java.util.List;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
* @author Dmitry Frolov tekillaz.dev@gmail.com
*/
public class IssueFieldUpdateStepTest {
@Test
public void checkPrepareFieldId() {
List<String> field_test= Arrays.asList(
"10100",
"customfield_10100",
"field_10100");
List<String> field_after = Arrays.asList(
"customfield_10100",
"customfield_10100",
"customfield_field_10100");
IssueFieldUpdateStep jifu = new IssueFieldUpdateStep(null, null, "");
for( int i=0; i<field_test.size(); i++ )
assertEquals("Check field id conversion #" + Integer.toString(i),
jifu.prepareFieldId(field_test.get(i)),
field_after.get(i) );
}
@Test(expected = IOException.class)
public void checkSelectorIsNull() throws InterruptedException, IOException {
AbstractBuild build = mock(AbstractBuild.class);
Launcher launcher = mock(Launcher.class);
BuildListener listener = mock(BuildListener.class);
EnvVars env = mock(EnvVars.class);
AbstractProject project = mock(AbstractProject.class);
PrintStream logger = mock(PrintStream.class);
when(build.getParent()).thenReturn(project);
when(build.getProject()).thenReturn(project);
when(build.getEnvironment(listener)).thenReturn(env);
when(listener.getLogger()).thenReturn(logger);
IssueFieldUpdateStep jifu = spy(new IssueFieldUpdateStep( null, "", "") );
jifu.perform(build, null, launcher, listener);
assertTrue("Check selector is null", build.getResult() == Result.FAILURE);
}
@Test
public void checkSubmit() throws InterruptedException, IOException {
PrintStream logger = mock(PrintStream.class);
final List<String> issues_after = Lists.newArrayList();
final List<JiraIssueField> fields_after = Lists.newArrayList();
JiraSession session = mock(JiraSession.class);
doAnswer(new Answer<Object>() {
public Object answer(final InvocationOnMock invocation) throws Throwable {
issues_after.add( (String) invocation.getArguments()[0] );
List<JiraIssueField> fields_tmp = (List<JiraIssueField>) invocation.getArguments()[1];
for( JiraIssueField field : fields_tmp )
fields_after.add( field );
return null;
}
}).when(session).addFields(Matchers.anyString(), Matchers.anyListOf(JiraIssueField.class));
String issue_test = "issue-10100";
List<JiraIssueField> fields_test = Lists.newArrayList();
for( int i=0; i<100; i++ )
fields_test.add(new JiraIssueField(issue_test, "value-"+Integer.toString(10100+i)));
IssueFieldUpdateStep jifu = spy(new IssueFieldUpdateStep(null, "", "") );
jifu.submitFields(session, issue_test, fields_test, logger);
assertEquals("Check issues list size", issues_after.size(), 1);
assertEquals("Check issue value", issues_after.get(0), issue_test);
assertEquals("Check fields list size", fields_after.size(), fields_test.size());
for( int i=0; i<fields_test.size(); i++ ) {
assertEquals("Check #" + Integer.toString(i) + " field id", fields_after.get(i).getId(), fields_test.get(i).getId());
assertEquals("Check #" + Integer.toString(i) + " field value", fields_after.get(i).getValue(), fields_test.get(i).getValue());
}
}
}