package hudson.plugins.tfs.commands; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.io.StringReader; import java.util.List; import hudson.plugins.tfs.commands.ListWorkspacesCommand; import hudson.plugins.tfs.commands.ListWorkspacesCommand.WorkspaceFactory; import hudson.plugins.tfs.model.Server; import hudson.plugins.tfs.model.Workspace; import hudson.plugins.tfs.model.Workspaces; import hudson.plugins.tfs.util.MaskedArgumentListBuilder; import org.junit.Test; import org.jvnet.hudson.test.Bug; import org.mockito.Mockito; public class ListWorkspacesCommandTest { @Test public void assertArguments() { ServerConfigurationProvider config = mock(ServerConfigurationProvider.class); when(config.getUrl()).thenReturn("https//tfs02.codeplex.com"); when(config.getUserName()).thenReturn("snd\\user_cp"); when(config.getUserPassword()).thenReturn("password"); MaskedArgumentListBuilder arguments = new ListWorkspacesCommand(null,config).getArguments(); assertNotNull("Arguments were null", arguments); assertEquals("workspaces -format:brief -server:https//tfs02.codeplex.com -login:snd\\user_cp,password", arguments.toStringWithQuote()); } @Test public void assertArgumentsWithComputer() { ServerConfigurationProvider config = mock(ServerConfigurationProvider.class); when(config.getUrl()).thenReturn("https//tfs02.codeplex.com"); when(config.getUserName()).thenReturn("snd\\user_cp"); when(config.getUserPassword()).thenReturn("password"); MaskedArgumentListBuilder arguments = new ListWorkspacesCommand(null,config,"akira").getArguments(); assertNotNull("Arguments were null", arguments); assertEquals("workspaces -format:brief -computer:akira -server:https//tfs02.codeplex.com -login:snd\\user_cp,password", arguments.toStringWithQuote()); } @Test public void assertEmptyListWithEmptyOutput() throws Exception { ListWorkspacesCommand command = new ListWorkspacesCommand(null, mock(ServerConfigurationProvider.class)); List<Workspace> list = command.parse(new StringReader("")); assertNotNull("List can not be null", list); assertEquals("Number of workspaces was incorrect", 0, list.size()); } @Test public void assertFactoryIsUsedToCreateWorkspaces() throws Exception { WorkspaceFactory factory = Mockito.mock(ListWorkspacesCommand.WorkspaceFactory.class); StringReader reader = new StringReader( "Server: https://tfs02.codeplex.com/\n" + "Workspace Owner Computer Comment\n" + "--------- -------------- -------- ----------------------------------------------------------------------------------------------------------\n" + "\n" + "asterix2 SND\\redsolo_cp ASTERIX\n"); new ListWorkspacesCommand(factory, mock(ServerConfigurationProvider.class)).parse(reader); Mockito.verify(factory).createWorkspace("asterix2", "ASTERIX", "SND\\redsolo_cp", ""); } @Test public void assertListWithValidOutput() throws Exception { StringReader reader = new StringReader( "Server: https://tfs02.codeplex.com/\n" + "Workspace Owner Computer Comment\n" + "--------- -------------- -------- ----------------------------------------------------------------------------------------------------------\n" + "\n" + "asterix2 SND\\redsolo_cp ASTERIX\n" + "astreix SND\\redsolo_cp ASTERIX This is a comment\n"); ListWorkspacesCommand command = new ListWorkspacesCommand( new Workspaces(Mockito.mock(Server.class)), mock(ServerConfigurationProvider.class)); List<Workspace> list = command.parse(reader); assertNotNull("List can not be null", list); assertEquals("Number of workspaces was incorrect", 2, list.size()); Workspace workspace = list.get(0); assertEquals("The workspace name is incorrect", "asterix2", workspace.getName()); assertEquals("The owner name is incorrect", "SND\\redsolo_cp", workspace.getOwner()); assertEquals("The computer name is incorrect", "ASTERIX", workspace.getComputer()); workspace = list.get(1); assertEquals("The workspace name is incorrect", "astreix", workspace.getName()); assertEquals("The owner name is incorrect", "SND\\redsolo_cp", workspace.getOwner()); assertEquals("The computer name is incorrect", "ASTERIX", workspace.getComputer()); assertEquals("The comment is incorrect", "This is a comment", workspace.getComment()); } @Test public void assertListWithWorkspaceContainingSpace() throws Exception { StringReader reader = new StringReader( "Server: https://tfs02.codeplex.com/\n" + "Workspace Owner Computer Comment\n" + "------------------ ---------- -------- ----------------------------------------\n" + "Hudson-node lookup redsolo_cp ASTERIX\n"); ListWorkspacesCommand command = new ListWorkspacesCommand( new Workspaces(Mockito.mock(Server.class)), mock(ServerConfigurationProvider.class)); List<Workspace> list = command.parse(reader); assertNotNull("List can not be null", list); assertEquals("Number of workspaces was incorrect", 1, list.size()); Workspace workspace = list.get(0); assertEquals("The workspace name is incorrect", "Hudson-node lookup", workspace.getName()); } @Bug(4666) @Test public void assertNoIndexOutOfBoundsIsThrown() throws Exception { WorkspaceFactory factory = Mockito.mock(ListWorkspacesCommand.WorkspaceFactory.class); StringReader reader = new StringReader( "Server: teamserver-01\n" + "Workspace Owner Computer Comment\n" + "----------------- ------ ----------- ------------------------------------------\n" + "Hudson-Scrumboard dennis W7-DENNIS-1\n" + "W7-DENNIS-1 dennis W7-DENNIS-1\n"); new ListWorkspacesCommand(factory, mock(ServerConfigurationProvider.class)).parse(reader); Mockito.verify(factory).createWorkspace("W7-DENNIS-1", "W7-DENNIS-1", "dennis", ""); } @Bug(4726) @Test public void assertNoIndexOutOfBoundsIsThrownSecondEdition() throws Exception { WorkspaceFactory factory = Mockito.mock(ListWorkspacesCommand.WorkspaceFactory.class); StringReader reader = new StringReader( "Server: xxxx-xxxx-010\n" + "Workspace Owner Computer Comment\n" + "------------------------ ------------ ------------- ---------------------------\n" + "Hudson.JOBXXXXXXXXXXXXXX First.LastXX XXXX-XXXX-007\n"); new ListWorkspacesCommand(factory, mock(ServerConfigurationProvider.class)).parse(reader); Mockito.verify(factory).createWorkspace("Hudson.JOBXXXXXXXXXXXXXX", "XXXX-XXXX-007", "First.LastXX", ""); } }