Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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());
        }
Beispiel #4
0
        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");
        }
Beispiel #5
0
        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");
        }
Beispiel #6
0
        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");
        }
Beispiel #7
0
        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");
        }
Beispiel #8
0
        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");
        }
Beispiel #9
0
        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");
        }