public async Task Should_Return200_When_CorrectDataProvided() { // Arrange Fixture.Customize <Cart>().Set(x => x.IsCheckedOut, false); var body = Fixture.Generate <AddCartItemDto>(constraints: new { Quantity = 10 }); var cart = Fixture.Generate <Cart>(); CartReposioryMock .Setup(m => m.AddItemToCartAsync(cart.Name, It.IsAny <Func <long, Task <Product> > >(), It.IsAny <CartItem>())) .Callback <string, Func <long, Task <Product> >, CartItem>((n, f, i) => cart.Items.Add(i)) .Returns(Task.CompletedTask); AddCartItemMapperProviderMock.Setup(x => x.Provide()) .Returns(new MapperConfiguration(cfg => cfg.CreateMap <AddCartItemDto, CartItem>()).CreateMapper()); var controller = InitController(); // Act var response = await controller.PutAsync(cart.Name, body); // Assert var cartResponse = response.AssertResponseType <OkObjectResult>(200) .AssertMessage("Product added"); cart.Items.Should().Contain(x => x.ProductId == body.ProductId && x.Quantity == body.Quantity); }
public async Task Should_ReturnBasket_When_BasketExists() { // Arrange var cart = Task.FromResult(Fixture.Generate <Cart>()); CartReposioryMock .Setup(m => m.GetAsync(It.IsAny <Func <Cart, bool> >())) .Returns(cart); foreach (var item in cart.Result.Items) { ProductReposioryMock .Setup(m => m.GetAsync(It.IsAny <Func <Product, bool> >())) .ReturnsAsync(Fixture.Generate <Product>(constraints: new { Identifier = item.ProductId })); } CartMapperMock.Setup(m => m.Map <CartDto>(cart.Result)) .Returns(new CartDto() { Name = cart.Result.Name }); MapperProviderMock.Setup(m => m.Provide()) .Returns(CartMapperMock.Object); var controller = InitController(); // Act var response = await controller.GetAsync(cart.Result.Name); // Assert response.AssertResponseType <OkObjectResult>(200) .Which.Value.Should().BeAssignableTo <CartDto>() .Which.Name.Should().Be(cart.Result.Name); }
private void InitMocks(Exception cartReposioryMockExpectedException) { CartReposioryMock .Setup(m => m.AddItemToCartAsync(It.IsAny <string>(), It.IsAny <Func <long, Task <Product> > >(), It.IsAny <CartItem>())) .Throws(cartReposioryMockExpectedException); AddCartItemMapperProviderMock.Setup(x => x.Provide()) .Returns(new MapperConfiguration(cfg => cfg.CreateMap <AddCartItemDto, CartItem>()).CreateMapper()); }
public async Task Should_Return404_When_BasketDoesNotExist() { // Arrange CartReposioryMock.Setup(x => x.GetAsync(It.IsAny <Func <Cart, bool> >())) .ThrowsAsync(new CartNotFoundException()); var controller = InitController(); // Act var response = await controller.GetAsync("cart1"); // Assert response.AssertResponseType <NotFoundObjectResult>(404) .AssertMessage("Cart not found"); }
public async Task Should_Return200AndReduceStocks_When_CheckedOut() { // Arrange CartReposioryMock .Setup(x => x.CheckoutAsync(It.IsAny <string>(), It.IsAny <Func <long, Task <Product> > >())) .Returns(Task.CompletedTask); var controller = InitController(); // Act var response = await controller.CheckoutAsync(string.Empty); // Assert response.AssertResponseType <OkObjectResult>(200).AssertMessage("Cart checked out"); }
public async Task Should_Return400_When_BasketAlreadyCheckedOut() { // Arrange CartReposioryMock .Setup(x => x.CheckoutAsync(It.IsAny <string>(), It.IsAny <Func <long, Task <Product> > >())) .Throws(new CartCheckedOutException()); var controller = InitController(); // Act var response = await controller.CheckoutAsync(string.Empty); // Assert response.AssertResponseType <BadRequestObjectResult>(400).AssertMessage("Cart is checked out"); }
public async Task Should_Return400_When_ItemOutOfStock() { // Arrange CartReposioryMock .Setup(x => x.CheckoutAsync(It.IsAny <string>(), It.IsAny <Func <long, Task <Product> > >())) .Throws(new NotEnoughStockException()); var controller = InitController(); // Act var response = await controller.CheckoutAsync(string.Empty); // Assert response.AssertResponseType <BadRequestObjectResult>(400).AssertMessage("Not enough stock"); }
public async Task Should_Return404_When_ProductInBasketDoesNotExistInRepository() { // Arrange CartReposioryMock .Setup(x => x.CheckoutAsync(It.IsAny <string>(), It.IsAny <Func <long, Task <Product> > >())) .Throws(new ProdcutNotFoundException()); var controller = InitController(); // Act var response = await controller.CheckoutAsync(string.Empty); // Assert response.AssertResponseType <NotFoundObjectResult>(404) .AssertMessage("Cart product not found"); }
public async Task Should_Reutn500_When_ProductFromBasketDoesNotExistInRepository() { CartReposioryMock .Setup(x => x.GetAsync(It.IsAny <Func <Cart, bool> >())) .ReturnsAsync(Fixture.Generate <Cart>()); CartMapperMock.Setup(x => x.Map <CartDto>(It.IsAny <Cart>())) .Throws(new ProdcutNotFoundException()); MapperProviderMock.Setup(x => x.Provide()) .Returns(CartMapperMock.Object); var controller = InitController(); // Act var response = await controller.GetAsync("cart1"); // Assert response.AssertResponseType <NotFoundObjectResult>(404) .AssertMessage("Cart product not found"); }