public void Given_negative_stock_change_When_try_update_stock_quantity_with_change_bigger_than_existing_quantity_Then_exception_is_throwed() { // Given var product = new ProductSeed().GetSeedObject(); product.Id = 1; product.UpdateStock(StockChange.CreateChange(quantity: 0, product, new StockEntry { Id = 1 })); var posOrder = new POSOrder { Id = 1 }; int quantity = -2; var stockChange = StockChange.CreateChange(quantity, product, posOrder); // When..., then Assert.Throws <ArgumentException>(() => product.UpdateStock(stockChange)); }
public void If_quantity_is_bigger_than_product_stock_use_remaining_stock() { //Given var posOrder = new POSOrder(); var product = new ProductSeed().GetSeedObject(); product.Id = 1; product.UpdateStock(StockChange.CreateChange(5, product, product)); product.UpdateStock(StockChange.CreateChange(-2, product, product)); var quantity = 4; var repository = MockRepository((mock) => { mock.Setup(m => m.GetBy(It.IsAny <int>())) .Returns(product); }); //When var posOrderItemResult = POSOrderItem.Create(product.Id, quantity, posOrder, repository); //Then Assert.NotEqual(posOrderItemResult.Value.Quantity, quantity); Assert.Equal(posOrderItemResult.Value.Quantity, product.QuantityInStock); }
public void Given_negative_stock_change_When_try_update_stock_quantity_of_a_product_Then_current_stock_quantity_should_be_actual_stock_quantity_minus_stock_change() { // Given var product = new ProductSeed().GetSeedObject(); product.Id = 1; product.UpdateStock(StockChange.CreateChange(4, product, new StockEntry { Id = 1 })); var posOrder = new POSOrder { Id = 1 }; int quantity = -2; int expectedQuantity = 2; var stockChange = StockChange.CreateChange(quantity, product, posOrder); // When product.UpdateStock(stockChange); // Then Assert.Equal(expectedQuantity, product.QuantityInStock); }
private POSOrder GetBasicPOSOrder() { var product = new ProductSeed().GetSeedObject(); product.Id = 1; product.UpdateStock(10, product); var repository = MockRepository((mock) => mock.Setup(m => m.GetBy(It.IsAny <int>())) .Returns(product)); var posOrder = new POSOrder(); posOrder.AddItem(product.Id, 1, repository); return(posOrder); }
public void If_Product_is_out_of_stock_don_t_create_item() { //Given var posOrder = new POSOrder(); var product = new ProductSeed().GetSeedObject(); product.Id = 1; product.UpdateStock(-product.QuantityInStock, product); // When var posOrderItemResult = POSOrderItem.Create(product.Id, 1, posOrder, MockRepository()); // Then Assert.False(posOrderItemResult.Success); Assert.Null(posOrderItemResult.Value); }
public void When_add_new_item_of_already_present_product_sum_items() { // Given var product = new ProductSeed().GetSeedObject(); product.Id = 1; product.UpdateStock(14, product); var posOrder = new POSOrder(); var repository = MockRepository((mock) => mock.Setup(m => m.GetBy(It.IsAny <int>())) .Returns(product)); posOrder.AddItem(product.Id, 2, repository); var expectedOrderTotal = product.EndCustomerPrice * 6; // When posOrder.AddItem(product.Id, 4, repository); // Then Assert.Equal(1, posOrder.Items.Count); Assert.Equal(expectedOrderTotal, posOrder.OrderTotal); }
public void Create_Item_from_product_id_and_quantity() { //Given var posOrder = new POSOrder(); var product = new ProductSeed().GetSeedObject(); product.Id = 1; product.UpdateStock(4, product); var quantity = 4; var expectedOrderTotal = product.EndCustomerPrice * quantity; var repository = MockRepository((mock) => { mock.Setup(m => m.GetBy(It.IsAny <int>())) .Returns(product); }); //When var item = POSOrderItem.Create(product.Id, quantity, posOrder, repository); //Then Assert.True(item.Success); Assert.NotNull(item.Value); Assert.Equal(expectedOrderTotal, item.Value.Total); Assert.Equal(item.Value.POSOrderId, posOrder.Id); }
public void When_try_add_item_to_cancelled_item_shouldnt_update_object() { //Given var product = new ProductSeed().GetSeedObject(); product.Id = 1; product.UpdateStock(3, product); var posOrder = new POSOrder(); var repository = MockRepository((mock) => mock.Setup(m => m.GetBy(It.IsAny <int>())) .Returns(product)); var expectedQuantity = 1; posOrder.AddItem(product.Id, expectedQuantity, repository); posOrder.Cancel(); //When posOrder.AddItem(product.Id, 1, repository); //Then var item = posOrder.Items.FirstOrDefault(); Assert.Equal(expectedQuantity, item.Quantity); }