package hudson.plugins.tfs.util;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.io.IOException;
import hudson.model.AbstractBuild;
import hudson.model.Node;
import hudson.model.Run;
import hudson.plugins.tfs.model.WorkspaceConfiguration;
import hudson.plugins.tfs.util.BuildWorkspaceConfigurationRetriever.BuildWorkspaceConfiguration;
import org.junit.Test;
@SuppressWarnings("unchecked")
public class BuildWorkspaceConfigurationRetrieverTest {
@Test
public void assertGetLatestConfgiurationOnNode() {
AbstractBuild build = mock(AbstractBuild.class);
Node node = mock(Node.class);
Node needleNode = mock(Node.class);
WorkspaceConfiguration configuration = new WorkspaceConfiguration("serverUrl", "workspaceName", "projectPath", "workfolder");
when(build.getPreviousBuild()).thenReturn(build).thenReturn(null);
when(build.getBuiltOn()).thenReturn(node, node, null);
when(node.getNodeName()).thenReturn("node1", "needleNode");
when(needleNode.getNodeName()).thenReturn("needleNode", "needleNode");
when(build.getAction(WorkspaceConfiguration.class)).thenReturn(configuration);
assertThat( new BuildWorkspaceConfigurationRetriever().getLatestForNode(needleNode, build), equalTo(configuration));
verify(build, times(2)).getBuiltOn();
verify(node, times(2)).getNodeName();
verify(build).getPreviousBuild();
verify(build).getAction(WorkspaceConfiguration.class);
verifyNoMoreInteractions(node);
verifyNoMoreInteractions(build);
}
@Test
public void assertGetLatestConfgiurationOnNodeWithNoPrevioudBuild() {
AbstractBuild build = mock(AbstractBuild.class);
Node node = mock(Node.class);
Node needleNode = mock(Node.class);
when(build.getPreviousBuild()).thenReturn(null);
when(build.getBuiltOn()).thenReturn(node);
when(node.getNodeName()).thenReturn("node1");
when(needleNode.getNodeName()).thenReturn("needleNode");
BuildWorkspaceConfigurationRetriever retriever = new BuildWorkspaceConfigurationRetriever();
assertThat( retriever.getLatestForNode(needleNode, build), nullValue());
verify(build).getBuiltOn();
verify(node).getNodeName();
verify(build).getPreviousBuild();
verifyNoMoreInteractions(node);
verifyNoMoreInteractions(build);
}
@Test
public void assertGetLatestConfigurationOnNodeWithNoPrevioudScmConfiguration() {
AbstractBuild build = mock(AbstractBuild.class);
Node node = mock(Node.class);
Node needleNode = mock(Node.class);
when(build.getBuiltOn()).thenReturn(node);
when(node.getNodeName()).thenReturn("needleNode");
when(needleNode.getNodeName()).thenReturn("needleNode");
assertThat( new BuildWorkspaceConfigurationRetriever().getLatestForNode(needleNode, build), nullValue());
verify(build).getBuiltOn();
verify(node).getNodeName();
verify(build).getAction(WorkspaceConfiguration.class);
verifyNoMoreInteractions(node);
verifyNoMoreInteractions(build);
}
@Test
public void assertGetLatestConfgiurationOnNodeWithNoAbstractBuild() {
Run run = mock(Run.class);
Node node = mock(Node.class);
assertThat( new BuildWorkspaceConfigurationRetriever().getLatestForNode(node, run), nullValue());
verifyNoMoreInteractions(run);
verifyNoMoreInteractions(node);
}
@Test
public void assertSaveWorkspaceConfigurationUsesSaveOnBuild() throws IOException {
AbstractBuild build = mock(AbstractBuild.class);
Node node = mock(Node.class);
when(build.getPreviousBuild()).thenReturn(build);
when(build.getBuiltOn()).thenReturn(node);
when(node.getNodeName()).thenReturn("needleNode");
when(build.getAction(WorkspaceConfiguration.class)).thenReturn(new WorkspaceConfiguration("serverUrl", "workspaceName", "projectPath", "workfolder"));
BuildWorkspaceConfiguration configuration = new BuildWorkspaceConfigurationRetriever().getLatestForNode(node, build);
assertThat( configuration.getWorkspaceName(), is("workspaceName"));
configuration.save();
verify(build).save();
}
}