private static void ConfigureAutofac()
        {
            var repository = new InMemoryMovieRepository();
            var bus        = new MessageBus();

            bus.Register <CreateMovie>(x => CommandHandlers.Handle(() => bus, x));
            bus.Register <ChangeMovieTitle>(x => CommandHandlers.Handle(() => bus, x));

            bus.Register <MovieCreated>(x => EventHandlers.Handle(() => repository, x));
            bus.Register <MovieTitleChanged>(x => EventHandlers.Handle(() => repository, x));

            bus.Send(new CreateMovie(Guid.NewGuid(), "Pupl Fiction", new DateTime(1994, 1, 1), "Crime", 8.5m));

            bus.Send(new CreateMovie(Guid.NewGuid(), "From Dusk Till Dawn", new DateTime(2003, 1, 1), "Action", 8.99m));

            var builder = new ContainerBuilder();

            builder.RegisterControllers(typeof(MvcApplication).Assembly);

            builder.RegisterType <MoviesController>()
            .WithParameter("commandSender", bus)
            .WithParameter("movieQueryFacade", repository);

            var container = builder.Build();

            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
Example #2
0
        public async Task RoverInstructionsCommandWithValidRoverSucceeds()
        {
            var mapGridMock = new Mock <IMapGrid>();

            mapGridMock.Setup(x => x.Width).Returns(10);
            mapGridMock.Setup(x => x.Height).Returns(10);
            var roversMgrMock = new Mock <IRoversManager>();
            var roverMock     = new Mock <IRover>();

            roverMock.Setup(x => x.X).Returns(1);
            roverMock.Setup(x => x.Y).Returns(1);
            roverMock.Setup(x => x.Orientation).Returns(OrientationEnum.N);
            roverMock.Setup(x => x.ExecuteInstruction(It.IsAny <char>())).Verifiable();
            roversMgrMock.Setup(x => x.ActiveRover).Returns(roverMock.Object);
            var cmdMock = new Mock <RoverInstructionsCommand>();

            cmdMock.Setup(x => x.Instructions).Returns(new List <char>("XX"));
            var handler       = new CommandHandlers(mapGridMock.Object, roversMgrMock.Object);
            var consoleOutput = new StringWriter();

            Console.SetOut(consoleOutput);

            await handler.Handle(cmdMock.Object, new CancellationToken());

            roverMock.Verify(x => x.ExecuteInstruction(It.IsAny <char>()), Times.Exactly(2));
            roverMock.Object.Lost.Should().BeFalse();
            consoleOutput.ToString().Should().Be("1 1 N\r\n");
        }
Example #3
0
        public async Task MapGridInitializerCommandCallsMapGridInitializer()
        {
            var mapGridMock   = new Mock <IMapGrid>();
            var roversMgrMock = new Mock <IRoversManager>();
            var cmdMock       = new Mock <MapGridInitializerCommand>();

            cmdMock.Setup(x => x.Width).Returns(10);
            cmdMock.Setup(x => x.Height).Returns(10);
            var handler = new CommandHandlers(mapGridMock.Object, roversMgrMock.Object);

            await handler.Handle(cmdMock.Object, new CancellationToken());

            mapGridMock.Verify(x => x.Initialize(10, 10), Times.Once);
        }
Example #4
0
        public async Task NewRoverCommandCallsAddRoverAndGeneratesNewActiveOne()
        {
            var mapGridMock   = new Mock <IMapGrid>();
            var roversMgrMock = new Mock <IRoversManager>();
            var cmdMock       = new Mock <NewRoverCommand>();

            cmdMock.Setup(x => x.StartingX).Returns(1);
            cmdMock.Setup(x => x.StartingY).Returns(1);
            cmdMock.Setup(x => x.StartingOrientation).Returns(OrientationEnum.N);
            var handler = new CommandHandlers(mapGridMock.Object, roversMgrMock.Object);

            await handler.Handle(cmdMock.Object, new CancellationToken());

            roversMgrMock.Verify(x => x.AddRover(1, 1, OrientationEnum.N), Times.Once);
        }
Example #5
0
        public async Task RoverInstructionsCommandWithNoActiveRoverDoesNothing()
        {
            var mapGridMock   = new Mock <IMapGrid>();
            var roversMgrMock = new Mock <IRoversManager>();

            roversMgrMock.Setup(x => x.ActiveRover).Returns((IRover)null);
            var cmdMock = new Mock <RoverInstructionsCommand>();

            cmdMock.Setup(x => x.Instructions).Returns(It.IsAny <List <char> >());
            var handler       = new CommandHandlers(mapGridMock.Object, roversMgrMock.Object);
            var consoleOutput = new StringWriter();

            Console.SetOut(consoleOutput);

            await handler.Handle(cmdMock.Object, new CancellationToken());

            roversMgrMock.VerifyGet(x => x.ActiveRover);
            consoleOutput.ToString().Should().Be(string.Empty);
        }
Example #6
0
        private static void Start()
        {
            var repository = new InMemoryMovieRepository();
            var bus        = new MessageBus();

            bus.Register <CreateMovie>(x => CommandHandlers.Handle(() => bus, x));
            bus.Register <ChangeMovieTitle>(x => CommandHandlers.Handle(() => bus, x));

            bus.Register <MovieCreated>(x => EventHandlers.Handle(() => repository, x));
            bus.Register <MovieTitleChanged>(x => EventHandlers.Handle(() => repository, x));

            bus.Send(new CreateMovie(Guid.NewGuid(), "Pupl Fiction", new DateTime(1994, 1, 1), "Crime", 8.5m));

            bus.Send(new CreateMovie(Guid.NewGuid(), "From Dusk Till Dawn", new DateTime(2003, 1, 1), "Action", 8.99m));

            var mainWindow = new MainWindow {
                DataContext = new MovieListViewModel(bus, repository)
            };

            mainWindow.ShowDialog();
        }
Example #7
0
        static void Main(string[] args)
        {
            var repository = new InMemoryMovieRepository();
            var bus        = new MessageBus();

            bus.Register <CreateMovie>(x => CommandHandlers.Handle(() => bus, x));
            bus.Register <ChangeMovieTitle>(x => CommandHandlers.Handle(() => bus, x));

            bus.Register <MovieCreated>(x => EventHandlers.Handle(() => repository, x));
            bus.Register <MovieTitleChanged>(x => EventHandlers.Handle(() => repository, x));

            bus.Register <MovieCreated>(x => OnMovieInserted(repository));
            bus.Register <MovieTitleChanged>(x => OnTitleChanged(repository));

            bus.Send(new CreateMovie(Guid.NewGuid(), "Pupl Fiction", new DateTime(1994, 1, 1), "Crime", 8.5m));

            bus.Send(new CreateMovie(Guid.NewGuid(), "From Dusk Till Dawn", new DateTime(2003, 1, 1), "Action", 8.99m));

            var id = repository.GetAll().ElementAt(1).Id;

            bus.Send(new ChangeMovieTitle(id, "Kill Bill Vol. I"));
        }