public SkuStock_taken_tests()// Given_sku_created_and_taken_messages_When_projected() { var stockId = Guid.NewGuid(); _stockCreatedEvent = new SkuStockCreated(stockId, Guid.NewGuid(), 5, TimeSpan.FromDays(2)); _stockTakenEvent = new StockTaken(stockId, 3); ProjectionBuilder.Handle(_stockCreatedEvent).Wait(); ProjectionBuilder.Handle(_stockTakenEvent).Wait(); }
public async Task Given_sku_created_and_taken_messages_When_projected_Then_another_history_is_added() { var stockId = Guid.NewGuid(); var stockCreatedEvent = new SkuStockCreated(stockId, Guid.NewGuid(), 7, TimeSpan.FromDays(2)); var stockTaken = new StockTaken(stockId, 3); await ProjectionBuilder.Handle(stockCreatedEvent); await ProjectionBuilder.Handle(stockTaken); await ProjectionBuilder.Handle(stockTaken); using (var context = CreateContext()) { Assert.Equal(3, context.StockHistory.Count()); Assert.Equal(1, context.SkuStocks.Find(stockId).AvailableQuantity); } }
public async Task Handle(StockTaken msg, IMessageMetadata metadata = null) { using (var context = _contextFactory()) { var skuStock = await context.SkuStocks.FindAsync(msg.SourceId); if (skuStock == null) { throw new SkuStockEntryNotFoundException(msg.SourceId); } var history = CreateHistory(skuStock, StockOperation.Taken, msg.Quantity); skuStock.AvailableQuantity -= msg.Quantity; skuStock.TotalQuantity -= msg.Quantity; skuStock.LastModified = msg.CreatedTime; FillNewQuantities(history, skuStock); context.StockHistory.Add(history); await context.SaveChangesAsync(); } }