Exemplo n.º 1
0
        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();
            }
        }