package hudson.plugins.googlecode.scm;
import static org.mockito.Mockito.*;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import hudson.matrix.MatrixProject;
import hudson.model.FreeStyleProject;
import hudson.model.TopLevelItem;
import hudson.plugins.googlecode.GoogleCodeProjectProperty;
import hudson.scm.NullSCM;
import hudson.scm.SCM;
import hudson.scm.SubversionSCM.ModuleLocation;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
public class GoogleCodeSCMUpgraderTest {
@Test public void assertNonProjectItemsAreIgnored() {
TopLevelItem topLevelItem = mock(TopLevelItem.class);
new GoogleCodeSCMUpgrader().onLoaded(Arrays.asList(topLevelItem));
verifyZeroInteractions(topLevelItem);
}
@Test public void assertProjectWithNullScmIsIgnored() {
MatrixProject project = mock(MatrixProject.class);
SCM scm = mock(NullSCM.class);
when(project.getScm()).thenReturn(scm);
new GoogleCodeSCMUpgrader().onLoaded(Arrays.asList(project, mock(TopLevelItem.class)));
verify(project).getScm();
verifyNoMoreInteractions(project);
verifyZeroInteractions(scm);
}
@Test public void assertProjectWithGoogleCodeScmExIsIgnored() {
FreeStyleProject project = mock(FreeStyleProject.class);
SCM scm = mock(GoogleCodeSCMEx.class);
when(project.getScm()).thenReturn(scm);
new GoogleCodeSCMUpgrader().onLoaded(Arrays.asList(project, mock(TopLevelItem.class)));
verify(project).getScm();
verifyNoMoreInteractions(project);
verifyZeroInteractions(scm);
}
@Test public void assertProjectsWithGoogleCodeScmIsReplaced() throws IOException {
MatrixProject project = mock(MatrixProject.class);
GoogleCodeSCM scm = new GoogleCodeSCM("trunk");
when(project.getScm()).thenReturn(scm);
when(project.getProperty(GoogleCodeProjectProperty.class)).thenReturn(new GoogleCodeProjectProperty("http://www.googlecode.com/p/mockitopp"));
List<TopLevelItem> items = Arrays.asList(project, mock(TopLevelItem.class));
new GoogleCodeSCMUpgrader().onLoaded(items);
verify(project).getScm();
verify(project).getName();
verify(project).getProperty(GoogleCodeProjectProperty.class);
verify(project).setScm(isA(GoogleCodeSCMEx.class));
verify(project).save();
verifyNoMoreInteractions(project);
}
@Test public void assertScmIsResetInProjectsWhenProjectSaveFails() throws IOException {
MatrixProject project = mock(MatrixProject.class);
GoogleCodeSCM scm = new GoogleCodeSCM("trunk");
when(project.getScm()).thenReturn(scm);
when(project.getProperty(GoogleCodeProjectProperty.class)).thenReturn(new GoogleCodeProjectProperty("http://www.googlecode.com/p/mockitopp"));
doThrow(new IOException()).when(project).save();
List<TopLevelItem> items = Arrays.asList(project, mock(TopLevelItem.class));
new GoogleCodeSCMUpgrader().onLoaded(items);
verify(project).getScm();
verify(project).getName();
verify(project).getProperty(GoogleCodeProjectProperty.class);
verify(project).setScm(isA(GoogleCodeSCMEx.class));
verify(project).save();
verify(project).setScm(scm);
verifyNoMoreInteractions(project);
}
@Test public void assertScmIsResetInProjectsWhenScmCopyFails() throws IOException {
MatrixProject project = mock(MatrixProject.class);
GoogleCodeSCM scm = new GoogleCodeSCM("trunk");
when(project.getScm()).thenReturn(scm);
when(project.getProperty(GoogleCodeProjectProperty.class)).thenReturn(new GoogleCodeProjectProperty(""));
doThrow(new IOException()).when(project).save();
List<TopLevelItem> items = Arrays.asList(project, mock(TopLevelItem.class));
new GoogleCodeSCMUpgrader().onLoaded(items);
verify(project).getScm();
verify(project).getName();
verify(project).getProperty(GoogleCodeProjectProperty.class);
verify(project).setScm(scm);
verifyNoMoreInteractions(project);
}
@Test public void assertGoogleCodeScmIsCopiedToGoogleCodeScmEx() {
GoogleCodeSCM scm = new GoogleCodeSCM("trunk");
GoogleCodeProjectProperty property = new GoogleCodeProjectProperty("http://www.googlecode.com/p/mockito");
GoogleCodeSCMEx scmCopy = new GoogleCodeSCMUpgrader().copy(scm, property);
assertThat(scmCopy.getLocations().length, is(1));
ModuleLocation location = scmCopy.getLocations()[0];
assertThat(location.getURL(), is("https://mockito.googlecode.com/svn/trunk"));
assertThat(location.getLocalDir(), is("."));
}
}