package hudson.plugins.jira.selector.perforce;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.junit.Assert;
import org.junit.Test;
import com.google.common.collect.Sets;
import hudson.model.BuildListener;
import hudson.model.FreeStyleBuild;
import hudson.model.ParameterValue;
import hudson.model.ParametersAction;
import hudson.model.Run;
import hudson.plugins.jira.JiraCarryOverAction;
import hudson.plugins.jira.JiraSite;
import hudson.plugins.jira.listissuesparameter.JiraIssueParameterValue;
import hudson.plugins.jira.selector.perforce.JobIssueSelector;
import hudson.scm.ChangeLogSet;
public abstract class JobIssueSelectorTest {
protected abstract JobIssueSelector createJobIssueSelector();
@Test
public void testFindsIssuesWithJiraParameters() {
FreeStyleBuild build = mock(FreeStyleBuild.class);
ChangeLogSet changeLogSet = mock(ChangeLogSet.class);
BuildListener listener = mock(BuildListener.class);
JiraSite jiraSite = mock(JiraSite.class);
JiraIssueParameterValue parameter = mock(JiraIssueParameterValue.class);
JiraIssueParameterValue parameterTwo = mock(JiraIssueParameterValue.class);
ParametersAction action = mock(ParametersAction.class);
List<ParameterValue> parameters = new ArrayList<ParameterValue>();
when(listener.getLogger()).thenReturn(System.out);
when(changeLogSet.iterator()).thenReturn(Collections.EMPTY_LIST.iterator());
when(build.getChangeSet()).thenReturn(changeLogSet);
when(build.getAction(ParametersAction.class)).thenReturn(action);
when(action.getParameters()).thenReturn(parameters);
when(parameter.getValue()).thenReturn("JIRA-123");
when(parameterTwo.getValue()).thenReturn("JIRA-321");
Set<String> ids;
JobIssueSelector jobIssueSelector = createJobIssueSelector();
// Initial state contains zero parameters
ids = jobIssueSelector.findIssueIds(build, jiraSite, listener);
Assert.assertTrue(ids.isEmpty());
parameters.add(parameter);
ids = jobIssueSelector.findIssueIds(build, jiraSite, listener);
Assert.assertEquals(1, ids.size());
Assert.assertEquals("JIRA-123", ids.iterator().next());
parameters.add(parameterTwo);
ids = jobIssueSelector.findIssueIds(build, jiraSite, listener);
Assert.assertEquals(2, ids.size());
Set<String> expected = Sets.newTreeSet(Sets.newHashSet("JIRA-123", "JIRA-321"));
Assert.assertEquals(expected, ids);
}
@Test
public void testFindsCarriedOnIssues() {
FreeStyleBuild build = mock(FreeStyleBuild.class);
FreeStyleBuild previousBuild = mock(FreeStyleBuild.class);
ArrayList<String> issues = new ArrayList<String>();
issues.add("GC-131");
JiraCarryOverAction jiraCarryOverAction = mock(JiraCarryOverAction.class);
when (build.getPreviousBuild()).thenReturn(previousBuild);
when (previousBuild.getAction(JiraCarryOverAction.class)).thenReturn(jiraCarryOverAction);
when (jiraCarryOverAction.getIDs()).thenReturn(issues);
ChangeLogSet changeLogSet = mock(ChangeLogSet.class);
BuildListener listener = mock(BuildListener.class);
JiraSite jiraSite = mock(JiraSite.class);
when(listener.getLogger()).thenReturn(System.out);
when(changeLogSet.iterator()).thenReturn(Collections.EMPTY_LIST.iterator());
when(build.getChangeSet()).thenReturn(changeLogSet);
Set<String> ids;
JobIssueSelector jobIssueSelector = createJobIssueSelector();
ids = jobIssueSelector.findIssueIds(build, jiraSite, listener);
Assert.assertEquals(1, ids.size());
Set<String> expected = Sets.newTreeSet(Sets.newHashSet("GC-131"));
Assert.assertEquals(expected, ids);
}
}