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)); }
public async Task given_movie_not_found_then_FindMovie_returns_NotFoundResult( Guid movieId, InMemoryMovieRepository readerStub, [NoAutoProperties] QueriesController sut) { var facade = new MovieReadModelFacade(readerStub); IActionResult actual = await sut.FindMovie(movieId, facade); actual.Should().BeOfType <NotFoundResult>(); }
public async Task GetAllMovies_sort_transfer_objects_by_CreatedAt( ImmutableArray <Movie> entities, InMemoryMovieRepository readerStub) { entities.ForEach(x => readerStub.Data[x.Id] = x); var sut = new MovieReadModelFacade(readerStub); ImmutableArray <MovieDto> actual = await sut.GetAllMovies(); actual.Should().BeInDescendingOrder(x => x.CreatedAt); }
public async Task ScreeningAdded_event_handler_add_screening_entity_correctly( MovieCreated movieCreated, Theater theater, InMemoryMovieRepository movieRepositoryDouble, InMemoryTheaterRepository theaterReaderStub, IFixture builder) { // Arrange theaterReaderStub.Data[theater.Id] = theater; var sut = new MovieReadModelGenerator( movieRepositoryDouble, theaterReaderStub); await sut.Handle(new Envelope(movieCreated)); Guid movieId = movieCreated.MovieId; ScreeningAdded domainEvent = builder .Build <ScreeningAdded>() .With(x => x.SourceId, movieId) .With(x => x.TheaterId, theater.Id) .With(x => x.SeatRowCount, theater.SeatRowCount) .With(x => x.SeatColumnCount, theater.SeatColumnCount) .Create(); // Act await sut.Handle(new Envelope(domainEvent)); // Assert Movie actual = movieRepositoryDouble.Data[movieId]; actual.Screenings .Should().Contain(s => s.Id == domainEvent.ScreeningId).Which .Should().BeEquivalentTo(new { Id = domainEvent.ScreeningId, domainEvent.TheaterId, TheaterName = theater.Name, Seats = from r in Enumerable.Range(0, theater.SeatRowCount) from c in Enumerable.Range(0, theater.SeatColumnCount) select new Seat { Row = r, Column = c, IsReserved = false, }, domainEvent.ScreeningTime, domainEvent.DefaultFee, domainEvent.ChildrenFee, CreatedAt = domainEvent.RaisedAt, }); }
public async Task FindMovie_assembles_dto_correctly( Movie movie, InMemoryMovieRepository readerStub) { readerStub.Data[movie.Id] = movie; var sut = new MovieReadModelFacade(readerStub); MovieDto actual = await sut.FindMovie(movie.Id); actual.Should().BeEquivalentTo( expectation: movie, config: c => c.ExcludingMissingMembers()); }
public async Task given_movie_found_then_FindMovie_returns_OkObjectResult( Movie movie, InMemoryMovieRepository readerStub, [NoAutoProperties] QueriesController sut) { readerStub.Data[movie.Id] = movie; var facade = new MovieReadModelFacade(readerStub); IActionResult actual = await sut.FindMovie(movie.Id, facade); actual.Should().BeOfType <OkObjectResult>(); }
public async Task GetAllMovies_returns_transfer_objects_as_content( Movie[] movies, InMemoryMovieRepository readerStub, [NoAutoProperties] QueriesController sut) { movies.ForEach(t => readerStub.Data[t.Id] = t); var facade = new MovieReadModelFacade(readerStub); var actual = (OkObjectResult)await sut.GetAllMovies(facade); actual.Value.Should().BeEquivalentTo(await facade.GetAllMovies()); }
public async Task GetAllMovies_returns_OkObjectResult( Movie[] movies, InMemoryMovieRepository readerStub, [NoAutoProperties] QueriesController sut) { movies.ForEach(t => readerStub.Data[t.Id] = t); var facade = new MovieReadModelFacade(readerStub); IActionResult actual = await sut.GetAllMovies(facade); actual.Should().BeOfType <OkObjectResult>(); }
public async Task GetAllMovies_assembles_all_transfer_objects_correctly( ImmutableArray <Movie> movies, InMemoryMovieRepository readerStub) { movies.ForEach(x => readerStub.Data[x.Id] = x); var sut = new MovieReadModelFacade(readerStub); ImmutableArray <MovieDto> actual = await sut.GetAllMovies(); actual.Should().BeEquivalentTo( expectation: movies, config: c => c.ExcludingMissingMembers()); }
public async Task given_screening_not_found_then_FindScreening_returns_NotFoundResult( Movie movie, Guid screeningId, InMemoryMovieRepository readerStub, [NoAutoProperties] QueriesController sut) { readerStub.Data[movie.Id] = movie; var facade = new MovieReadModelFacade(readerStub); IActionResult actual = await sut.FindScreening(movie.Id, screeningId, facade); actual.Should().BeOfType <NotFoundResult>(); }
public async Task MovieCreated_event_handler_creates_read_model_entity_correctly( MovieCreated domainEvent, InMemoryMovieRepository repositorySpy) { var sut = new MovieReadModelGenerator( repositorySpy, Mock.Of <ITheaterReader>()); await sut.Handle(new Envelope(domainEvent)); IDictionary <Guid, Movie> data = repositorySpy.Data; data.Should().ContainKey(domainEvent.MovieId); data[domainEvent.MovieId].Should().BeEquivalentTo(new { domainEvent.Title, CreatedAt = domainEvent.RaisedAt, ETag = default(string), }); }
public async Task given_movie_found_then_FindMovie_returns_transfer_object_as_content( Movie movie, InMemoryMovieRepository readerStub, [NoAutoProperties] QueriesController sut) { readerStub.Data[movie.Id] = movie; var facade = new MovieReadModelFacade(readerStub); IActionResult result = await sut.FindMovie(movie.Id, facade); object actual = result.As <OkObjectResult>().Value; actual.Should().BeOfType <MovieDto>(); actual.Should().BeEquivalentTo(new { movie.Id, movie.Title, movie.CreatedAt, }); }
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(); }
public async Task given_screening_found_then_FindScreening_returns_transfer_object_as_content( Movie movie, InMemoryMovieRepository readerStub, [NoAutoProperties] QueriesController sut) { // Arrange readerStub.Data[movie.Id] = movie; var facade = new MovieReadModelFacade(readerStub); Screening screening = movie.Screenings.Shuffle().First(); // Act dynamic result = await sut.FindScreening(movie.Id, screening.Id, facade); // Assert object actual = result.Value; actual.Should().BeOfType <ScreeningDto>(); actual.Should().BeEquivalentTo( expectation: screening, config: c => c.ExcludingMissingMembers()); }
public async void ReturnMoviesFilteredByGenreId() { var movieRepository = new InMemoryMovieRepository(); var genreRepository = new InMemoryGenreRepository(); var useCase = new ListMovieByGenre(movieRepository, genreRepository); var movies = await useCase.Execute(genreId : 1); Assert.Collection(movies, (it) => { Assert.Equal(1, it.Id); Assert.Equal(1, it.Genre.Id); }, (it) => { Assert.Equal(2, it.Id); Assert.Equal(1, it.Genre.Id); }); }
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")); }