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)); }
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); }
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); }
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"); }
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)); }