package hudson.plugins.jira;
import hudson.EnvVars;
import hudson.Launcher;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.BuildListener;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.*;
public class JiraIssueMigratorTest {
private static final String PROJECT_KEY = "PROJECT";
private static final String RELEASE = "release";
private static final String RELEASE_TO_REPLACE = "releaseToReplace";
private static final String QUERY = "query";
AbstractBuild build;
Launcher launcher;
BuildListener listener;
EnvVars envVars;
JiraSite jiraSite;
AbstractProject project;
JiraIssueMigrator jiraIssueMigrator;
@Before
public void prepareMocks() throws IOException, InterruptedException {
build = mock(AbstractBuild.class);
launcher = mock(Launcher.class);
listener = mock(BuildListener.class);
envVars = mock(EnvVars.class);
jiraSite = mock(JiraSite.class);
project = mock(AbstractProject.class);
when(build.getEnvironment(listener)).thenReturn(envVars);
when(envVars.expand(PROJECT_KEY)).thenReturn(PROJECT_KEY);
when(envVars.expand(RELEASE)).thenReturn(RELEASE);
when(envVars.expand(QUERY)).thenReturn(QUERY);
when(envVars.expand(RELEASE_TO_REPLACE)).thenReturn(RELEASE_TO_REPLACE);
when(envVars.expand(null)).thenReturn(null);
when(build.getProject()).thenReturn(project);
}
@Test
public void testAddingVersion() throws IOException {
boolean addRelease = true;
jiraIssueMigrator = spy(new JiraIssueMigrator(PROJECT_KEY, RELEASE, QUERY, null, addRelease));
doReturn(jiraSite).when(jiraIssueMigrator).getJiraSiteForProject(project);
boolean result = jiraIssueMigrator.perform(build, launcher, listener);
verify(jiraSite, never()).migrateIssuesToFixVersion(anyString(), anyString(), anyString());
verify(jiraSite, never()).replaceFixVersion(anyString(), anyString(), anyString(), anyString());
verify(jiraSite, times(1)).addFixVersionToIssue(PROJECT_KEY, RELEASE, QUERY);
assertTrue(result);
}
@Test
public void testMigratingToVersion() throws IOException {
jiraIssueMigrator = spy(new JiraIssueMigrator(PROJECT_KEY, RELEASE, QUERY, null, false));
doReturn(jiraSite).when(jiraIssueMigrator).getJiraSiteForProject(project);
boolean result = jiraIssueMigrator.perform(build, launcher, listener);
verify(jiraSite, never()).addFixVersionToIssue(anyString(), anyString(), anyString());
verify(jiraSite, never()).replaceFixVersion(anyString(), anyString(), anyString(), anyString());
verify(jiraSite, times(1)).migrateIssuesToFixVersion(PROJECT_KEY, RELEASE, QUERY);
assertTrue(result);
}
@Test
public void testReplacingVersion() throws IOException {
jiraIssueMigrator = spy(new JiraIssueMigrator(PROJECT_KEY, RELEASE, QUERY, RELEASE_TO_REPLACE, false));
doReturn(jiraSite).when(jiraIssueMigrator).getJiraSiteForProject(project);
boolean result = jiraIssueMigrator.perform(build, launcher, listener);
verify(jiraSite, never()).addFixVersionToIssue(anyString(), anyString(), anyString());
verify(jiraSite, never()).migrateIssuesToFixVersion(anyString(), anyString(), anyString());
verify(jiraSite, times(1)).replaceFixVersion(PROJECT_KEY, RELEASE_TO_REPLACE, RELEASE, QUERY);
assertTrue(result);
}
}