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