public async Task SubtractAvailabilityAsync_ShouldFail_WhenValueToSubtractIsBiggerThanProductAvailableValue() { // Arrange _fixture.Behaviors.Add(new OmitOnRecursionBehavior()); var subtractProductAvailabilities = _fixture.Create <IReadOnlyCollection <SubtractProductAvailability> >(); var product = _fixture.Create <Product>(); product.Id = subtractProductAvailabilities.First().Id; product.AvailableQuantity = 0; var expectedResult = new ExceededProductQuantityException(product.Name, product.PackageType, product.AvailableQuantity, subtractProductAvailabilities.First().SubtractQuantity); _productRepository.GetAsync(subtractProductAvailabilities.Select(_ => _.Id).ToList()) .ReturnsForAnyArgs(new List <Product> { product }); // Act var result = await Assert.ThrowsAnyAsync <ExceededProductQuantityException>(async() => await _sut.SubtractAvailabilityAsync(subtractProductAvailabilities)); // Assert Assert.Equal(expectedResult.Message, result.Message); }
public async Task CreateAsync_ShouldFailAndDeleteOrder_WhenOrderedProductsExceedAvailability() { // Arrange var cartOverview = _fixture.Create <CartOverview>(); var payment = _fixture.Create <PaymentDto>(); var address = _fixture.Create <AddressDto>(); var productAvailabilities = _fixture.CreateMany <SubtractProductAvailability>(); _fixture.Behaviors.Add(new OmitOnRecursionBehavior()); var order = _fixture.Create <Order>(); var product = order.OrderProducts.First().Product; var expectedResult = new ExceededProductQuantityException(product.Name, product.PackageType, product.AvailableQuantity, 1); _orderRepository.CreateAsync(new Order()).ReturnsForAnyArgs(order); _productService.SubtractAvailabilityAsync(productAvailabilities.ToList()).ThrowsForAnyArgs(expectedResult); // Act var result = await Assert.ThrowsAsync <ExceededProductQuantityException>(async() => await _sut.CreateAsync(cartOverview, address, payment)); // Assert result.Should().BeEquivalentTo(expectedResult); await _orderRepository.Received(1).DeleteAsync(order); }
public async Task AddProductAsync_ShouldFail_WhenCartHasProductAndProductQuantityExceedsAvailability() { // Arrange _fixture.Behaviors.Add(new OmitOnRecursionBehavior()); var cart = _fixture.Create <Cart>(); var product = _fixture.Create <Product>(); cart.CartProducts.Add(new CartProduct { ProductId = product.Id, CartId = cart.Id, Quantity = product.AvailableQuantity }); var requestedQuantity = _fixture.Create <int>() + product.AvailableQuantity; var expectedResult = new ExceededProductQuantityException(product.Name, product.PackageType, product.AvailableQuantity, requestedQuantity); _cartRepository.GetAsync(cart.Id).Returns(cart); _productRepository.GetAsync(product.Id).Returns(product); // Act var result = await Assert.ThrowsAsync <ExceededProductQuantityException>(async() => await _sut.AddProductAsync(cart.Id, product.Id, requestedQuantity)); // Assert Assert.Equal(expectedResult.Message, result.Message); }