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(); }
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()); }
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); }
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); }
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); }
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()); }
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); }