public void TestAddOrderWithWarehouseCheckThrowException()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <IntegrationEventDbContext>();

            using var context = new IntegrationEventDbContext(options, new WarehouseEventHandler());
            context.Database.EnsureCreated();

            //ATTEMPT
            context.Add(CreateTestOrder(true));
            var ex = Assert.Throws <OutOfStockException>(() => context.SaveChanges());

            //VERIFY
            ex.Message.ShouldEqual("Order 1: We are out of stock of B2x8Red.Order 1: We only have 20 B1x2Blue in stock");
            context.Orders.Count().ShouldEqual(0);
        }
        public void TestAddOrderWithWarehouseCheckOk()
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <IntegrationEventDbContext>();

            using var context = new IntegrationEventDbContext(options, new WarehouseEventHandler());
            context.Database.EnsureCreated();

            //ATTEMPT
            context.Add(CreateTestOrder(false));
            context.SaveChanges();

            //VERIFY
            var order = context.Orders.Include(x => x.LineItems).Single();

            order.LineItems.Count.ShouldEqual(1);
        }
        public void TestAddOrderDummyWarehouseCheckOk(bool failInWarehouse, int lineCount)
        {
            //SETUP
            var options = SqliteInMemory.CreateOptions <IntegrationEventDbContext>();

            using var context = new IntegrationEventDbContext(options, new DummyWarehouseService());
            context.Database.EnsureCreated();

            //ATTEMPT
            context.Add(CreateTestOrder(failInWarehouse));
            context.SaveChanges();

            //VERIFY
            var order = context.Orders.Include(x => x.LineItems).Single();

            order.LineItems.Count.ShouldEqual(lineCount);
        }