Ejemplo n.º 1
0
        public async Task given_services_returns_success_then_Create_awaits_resource_creation(
            CreateMovieViewModel model,
            ISendCreateMovieCommandService serviceStub,
            IResourceAwaiter awaiterSpy,
            Success <MovieLocation> success,
            [NoAutoProperties] MoviesController sut)
        {
            // Arrange
            Mock.Get(serviceStub)
            .Setup(
                x =>
                x.SendCreateMovieCommand(It.Is <CreateNewMovie>(
                                             p =>
                                             p.Title == model.Title)))
            .ReturnsAsync(success);

            // Act
            ActionResult actual = await
                                  sut.Create(model, serviceStub, awaiterSpy);

            // Assert
            Uri location = success.Value.Uri;

            Mock.Get(awaiterSpy).Verify(x => x.AwaitResource(location));
        }
Ejemplo n.º 2
0
        public async Task given_service_returns_error_then_Create_adds_model_error(
            CreateMovieViewModel model,
            ISendCreateMovieCommandService serviceStub,
            IResourceAwaiter awaiterDummy,
            Error <MovieLocation> error,
            [NoAutoProperties] MoviesController sut)
        {
            // Arrange
            Mock.Get(serviceStub)
            .Setup(
                x =>
                x.SendCreateMovieCommand(It.IsAny <CreateNewMovie>()))
            .ReturnsAsync(error);

            // Act
            await sut.Create(model, serviceStub, awaiterDummy);

            // Assert
            ModelStateEntry state = sut.ModelState[string.Empty];

            state.Errors.Should().Contain(e => e.ErrorMessage == error.Message);
        }
Ejemplo n.º 3
0
        public async Task given_service_returns_error_then_Create_returns_ViewResult(
            CreateMovieViewModel model,
            ISendCreateMovieCommandService serviceStub,
            IResourceAwaiter awaiterDummy,
            Error <MovieLocation> error,
            [NoAutoProperties] MoviesController sut)
        {
            // Arrange
            Mock.Get(serviceStub)
            .Setup(
                x =>
                x.SendCreateMovieCommand(It.IsAny <CreateNewMovie>()))
            .ReturnsAsync(error);

            // Act
            ActionResult actual = await
                                  sut.Create(model, serviceStub, awaiterDummy);

            // Assert
            actual.Should().BeOfType <ViewResult>();
            actual.As <ViewResult>().Model.Should().BeSameAs(model);
        }
Ejemplo n.º 4
0
        public async Task given_service_returns_success_then_Create_returns_RedirectToActionResult(
            CreateMovieViewModel model,
            ISendCreateMovieCommandService serviceStub,
            IResourceAwaiter awaiterDummy,
            Success <MovieLocation> success,
            [NoAutoProperties] MoviesController sut)
        {
            // Arrange
            Mock.Get(serviceStub)
            .Setup(
                x =>
                x.SendCreateMovieCommand(It.Is <CreateNewMovie>(
                                             p =>
                                             p.Title == model.Title)))
            .ReturnsAsync(success);

            // Act
            ActionResult actual = await
                                  sut.Create(model, serviceStub, awaiterDummy);

            // Assert
            actual.Should().BeOfType <RedirectToActionResult>();
            actual.As <RedirectToActionResult>().ActionName.Should().Be("Index");
        }
Ejemplo n.º 5
0
        public async Task <ActionResult> Create(
            [FromForm] CreateMovieViewModel model,
            [FromServices] ISendCreateMovieCommandService service,
            [FromServices] IResourceAwaiter awaiter)
        {
            CreateNewMovie command = model.CreateCommand();

            IResult <MovieLocation> result = await
                                             service.SendCreateMovieCommand(command);

            switch (result)
            {
            case Success <MovieLocation> success:
                await awaiter.AwaitResource(success.Value.Uri);

                return(RedirectToAction(nameof(Index)));

            case Error <MovieLocation> error:
                ModelState.AddModelError(string.Empty, error.Message);
                break;
            }

            return(View(model));
        }