Example #1
0
        public void ShouldCreateStockQuantityDocument()
        {
            var warehouseAvailableStock = new WarehouseAvailableStockItem("FC01", "ABC", 20, 0, 0, DateTime.UtcNow);
            var stockQuantity           = new RegionStockDocument(1234, new[] { warehouseAvailableStock }, new[] { new RegionStockItem("US", 20, new RegionStockItemStatus(10, StockStatus.InStock), new[] { warehouseAvailableStock }, DateTime.UtcNow) });

            _stockQuantityDocumentDb.CreateRegionStock(stockQuantity).Wait();
        }
Example #2
0
        public void WhenCreatingStockQuantityAndDuplicateExistsThenShouldThrowException()
        {
            var warehouseAvailableStock = new WarehouseAvailableStockItem("FC01", "ABC", 20, 0, 0, DateTime.UtcNow);
            var stockQuantity           = new RegionStockDocument(123, new[] { warehouseAvailableStock }, new[] { new RegionStockItem("US", 20, new RegionStockItemStatus(10, StockStatus.InStock), new[] { warehouseAvailableStock }, DateTime.UtcNow) });

            Assert.Throws <DocumentClientException>(() => _stockQuantityDocumentDb.CreateRegionStock(stockQuantity).Wait());
        }
Example #3
0
        public void ShouldGetStockQuantity()
        {
            var warehouseAvailableStock = new WarehouseAvailableStockItem("FC01", "ABC", 20, 0, 0, DateTime.UtcNow);
            var expectedStockQuantity   = new RegionStockDocument(123, new[] { warehouseAvailableStock }, new[] { new RegionStockItem("US", 20, new RegionStockItemStatus(10, StockStatus.InStock), new[] { warehouseAvailableStock }, DateTime.UtcNow) });

            var actualStockQuantity = _stockQuantityDocumentDb.GetRegionStockByVariantId(expectedStockQuantity.VariantId);

            Assert.IsNotNull(actualStockQuantity);
            Assert.AreEqual(expectedStockQuantity.VariantId, actualStockQuantity.VariantId);
            Assert.AreEqual(expectedStockQuantity.Id, actualStockQuantity.Id);
        }
Example #4
0
        public void Given_Region_Is_OutofStock_When_Applying_Stock_Changes_Due_To_ITL_Notifications_Should_Return_A_Stock_Status_Not_Equal_To_OutofStock()
        {
            // Arrange
            var regionStock             = new RegionStockItem("UK", 0, new RegionStockItemStatus(10, StockStatus.OutOfStock), new List <WarehouseAvailableStockItem>(), DateTime.UtcNow);
            var warehouseAvailableStock = new WarehouseAvailableStockItem("FC01", "123", 10, 0, 0, DateTime.Now);

            // Act
            regionStock.ApplyStockChanges(warehouseAvailableStock);

            // Assert
            Assert.AreEqual(regionStock.Status.Value, StockStatus.InStock);
            Assert.AreEqual(regionStock.Quantity, 10);
            Assert.AreEqual(regionStock.Version, warehouseAvailableStock.Version);
        }
Example #5
0
        public void Given_Region_Is_InStock_When_Applying_Low_In_Stock_StockChange_Should_Return_A_Stock_Status_Is_Equal_To_Low_In_Stock()
        {
            // Arrange
            var regionStock = new RegionStockItem("UK", 10, new RegionStockItemStatus(10, StockStatus.InStock), new List <WarehouseAvailableStockItem> {
                new WarehouseAvailableStockItem("FC01", "123", 10, 0, 0, DateTime.UtcNow)
            }, DateTime.UtcNow);
            var warehouseAvailableStock = new WarehouseAvailableStockItem("FC01", "123", 9, 1, 0, DateTime.Now);

            // Act
            regionStock.ApplyStockChanges(warehouseAvailableStock);

            // Assert
            Assert.AreEqual(regionStock.Status.Value, StockStatus.LowInStock);
            Assert.AreEqual(regionStock.Quantity, 9);
            Assert.AreEqual(regionStock.Version, warehouseAvailableStock.Version);
        }
Example #6
0
        public void ReplaceStockQuantity_ConcurrentWrites_ShouldThrowException()
        {
            var warehouseAvailableStock = new WarehouseAvailableStockItem("FC01", "ABC", 25, 0, 0, DateTime.UtcNow);
            var result1 = _stockQuantityDocumentDb.GetRegionStockByVariantId(123);
            var result2 = _stockQuantityDocumentDb.GetRegionStockByVariantId(123);

            result1.WarehouseAvailableStocks
            .ForEach(x => x.ApplyStockChanges(warehouseAvailableStock));

            result1.RegionStocks
            .ForEach(x => x.ApplyStockChanges(warehouseAvailableStock));

            result2.WarehouseAvailableStocks
            .ForEach(x => x.ApplyStockChanges(warehouseAvailableStock));

            result2.RegionStocks
            .ForEach(x => x.ApplyStockChanges(warehouseAvailableStock));

            _stockQuantityDocumentDb.UpdateRegionStock(result1).Wait();

            Assert.Throws <OptimisticConcurrencyException>(() => _stockQuantityDocumentDb.UpdateRegionStock(result2).Wait());
        }
Example #7
0
        public void ShouldReplaceStockQuantity()
        {
            var pickable = new Random().Next(1, 200);
            var warehouseAvailableStock = new WarehouseAvailableStockItem("FC02", "ABC", pickable, 0, 0, DateTime.UtcNow);
            var result1 = _stockQuantityDocumentDb.GetRegionStockByVariantId(123);

            var list = result1.WarehouseAvailableStocks.ToList();

            list.Add(warehouseAvailableStock);


            result1.WarehouseAvailableStocks = list.AsEnumerable();

            result1.WarehouseAvailableStocks
            .ForEach(x => x.ApplyStockChanges(warehouseAvailableStock));
            result1.RegionStocks
            .ForEach(x => x.ApplyStockChanges(warehouseAvailableStock));

            _stockQuantityDocumentDb.UpdateRegionStock(result1).Wait();

            var result2 = _stockQuantityDocumentDb.GetRegionStockByVariantId(123);

            Assert.AreEqual(result1.WarehouseAvailableStocks.FirstOrDefault().Pickable, result2.WarehouseAvailableStocks.FirstOrDefault().Pickable);
        }