public void Accepts_new_invocation_list()
 {
     var invocationList = new ICommand[]{};
     var commandInvoker = new CommandInvoker(null);
     Assert.DoesNotThrow(() =>
         commandInvoker.Assign(invocationList));
 }
            public void Invokes_Execute_for_each_command()
            {
                var mockCommand = new Mock<ILandingSurfaceSizeCommand>();
                mockCommand.Setup(x => x.GetCommandType()).Returns(CommandType.LandingSurfaceSizeCommand);

                var commandInvoker = new CommandInvoker(null);
                commandInvoker.Assign(new[] {mockCommand.Object, mockCommand.Object, mockCommand.Object});

                commandInvoker.InvokeAll();

                mockCommand.Verify(x => x.Execute(), Times.Exactly(3));
            }
            public void When_executing_LandingSurfaceSizeCommand_sets_LandingSurface_as_command_receiver()
            {
                var expectedLandingSurface = new Mock<ILandingSurface>();
                var landingSurfaceSizeCommand = new Mock<ILandingSurfaceSizeCommand>();
                landingSurfaceSizeCommand.Setup(x => x.GetCommandType()).Returns(CommandType.LandingSurfaceSizeCommand);

                var commandInvoker = new CommandInvoker(null);
                commandInvoker.Assign(new[] { landingSurfaceSizeCommand.Object });
                commandInvoker.SetLandingSurface(expectedLandingSurface.Object);

                commandInvoker.InvokeAll();

                landingSurfaceSizeCommand.Verify(
                    x => x.SetReceiver(expectedLandingSurface.Object), Times.Once());
            }
            public void When_executing_RoverDeployCommand_sets_LandingSurface_and_new_Rover_as_command_receivers()
            {
                var expectedRover = new Mock<IRover>();
                var expectedLandingSurface = new Mock<ILandingSurface>();

                var mockRoverDeployCommand = new Mock<IRoverDeployCommand>();
                mockRoverDeployCommand.Setup(x => x.GetCommandType()).Returns(CommandType.RoverDeployCommand);

                Func<IRover> mockRoverFactory = () => expectedRover.Object;

                var commandInvoker = new CommandInvoker(mockRoverFactory);
                commandInvoker.Assign(new[]{mockRoverDeployCommand.Object});
                commandInvoker.SetLandingSurface(expectedLandingSurface.Object);
                commandInvoker.SetRovers(new List<IRover>());

                commandInvoker.InvokeAll();

                mockRoverDeployCommand.Verify(
                    x => x.SetReceivers(expectedRover.Object, expectedLandingSurface.Object), Times.Once());
            }
            public void When_executing_RoverExploreCommand_sets_most_recently_added_Rover_as_command_receiver()
            {
                var expectedRover = new Mock<IRover>();

                var mockRoverExploreCommand = new Mock<IRoverExploreCommand>();
                mockRoverExploreCommand.Setup(x => x.GetCommandType()).Returns(CommandType.RoverExploreCommand);

                var commandInvoker = new CommandInvoker(null);
                commandInvoker.Assign(new[]{mockRoverExploreCommand.Object});
                commandInvoker.SetRovers(new List<IRover>{ null, expectedRover.Object });

                commandInvoker.InvokeAll();

                mockRoverExploreCommand.Verify(
                    x => x.SetReceiver(expectedRover.Object), Times.Once());
            }