public async Task Report_projections_can_be_created_using_EventHandlerBase_including_dynamic_event_types()
        {
            var projector = new OrderTallyProjector();

            Events.Write(1, _ => new Order.Cancelled());
            Events.Write(20, _ => new Order.Fulfilled());
            Events.Write(4, _ => new Order.Misdelivered());

            using (var catchup = CreateReadModelCatchup(projector))
            {
                await catchup.Run();
            }

            using (var db = ReadModelDbContext())
            {
                db.Set <OrderTally>()
                .Single(t => t.Status == "Fulfilled")
                .Count
                .Should()
                .Be(20);
                db.Set <OrderTally>()
                .Single(t => t.Status == "Misdelivered")
                .Count
                .Should()
                .Be(4);
            }
        }
        public async Task Report_projections_can_be_created_using_EventHandlerBase_over_multiple_event_types()
        {
            var projector = new OrderTallyProjector();

            Events.Write(20, _ => new Order.Cancelled());
            Events.Write(20, _ => new Order.Delivered());
            Events.Write(50, _ => new Order.Placed());

            using (var catchup = CreateReadModelCatchup(projector))
            {
                await catchup.Run();
            }

            using (var db = ReadModelDbContext())
            {
                db.Set <OrderTally>()
                .Single(t => t.Status == "Canceled")
                .Count
                .Should()
                .Be(20);
                db.Set <OrderTally>()
                .Single(t => t.Status == "Delivered")
                .Count
                .Should()
                .Be(20);
                db.Set <OrderTally>()
                .Single(t => t.Status == "Pending")
                .Count
                .Should()
                .Be(10);
            }
        }