public async Task conditional_deletes_through_lambda_conditions_on_aggregate()
        {
            var shortTrip    = new TripStream().TravelIsUnder(200);
            var longTrip     = new TripStream().TravelIsOver(2000);
            var initialCount = shortTrip.Events.Count + longTrip.Events.Count;

            _output.WriteLine($"Initially publishing {initialCount} events");

            var projection = new TripAggregationWithoutCustomName();

            projection.ProjectionName = "Trip";

            StoreOptions(x => x.Projections.Add(projection, ProjectionLifecycle.Async), true);

            var agent = await StartDaemon();



            var waiter1 = agent.Tracker.WaitForShardState("Trip:All", initialCount);

            using (var session = theStore.LightweightSession())
            {
                session.Events.Append(shortTrip.StreamId, shortTrip.Events.ToArray());
                session.Events.Append(longTrip.StreamId, longTrip.Events.ToArray());
                await session.SaveChangesAsync();
            }

            await waiter1;

            // This should not trigger a delete
            theSession.Events.Append(shortTrip.StreamId, new VacationOver());

            // This should trigger a delete
            theSession.Events.Append(longTrip.StreamId, new VacationOver());

            await theSession.SaveChangesAsync();

            var totalNumberOfEvents = initialCount + 2;
            var waiter2             = agent.Tracker.WaitForShardState(new ShardState("Trip:All", totalNumberOfEvents), 30.Seconds());

            await waiter2;



            using var query = theStore.QuerySession();

            (await query.LoadAsync <Trip>(shortTrip.StreamId)).ShouldNotBeNull();
            (await query.LoadAsync <Trip>(longTrip.StreamId)).ShouldBeNull();
        }
        public async Task conditional_deletes_through_lambda_conditions_on_event_only()
        {
            NumberOfStreams = 2;

            Logger.LogDebug("The expected number of events is {NumberOfEvents}", NumberOfEvents);

            var projection = new TripAggregationWithoutCustomName();

            projection.ProjectionName = "Trip";

            StoreOptions(x => x.Projections.Add(projection, ProjectionLifecycle.Async), true);

            var agent = await StartDaemon();

            await PublishSingleThreaded();

            var waiter = agent.Tracker.WaitForShardState(new ShardState("Trip:All", NumberOfEvents), 30.Seconds());

            await waiter;

            var days = await theSession.Query <Trip>().ToListAsync();

            var notCriticalBreakdownStream = days[0].Id;
            var criticalBreakdownStream    = days[1].Id;

            theSession.Events.Append(notCriticalBreakdownStream, new Breakdown {
                IsCritical = false
            });
            theSession.Events.Append(criticalBreakdownStream, new Breakdown {
                IsCritical = true
            });

            await theSession.SaveChangesAsync();

            var waiter2 = agent.Tracker.WaitForShardState(new ShardState("Trip:All", NumberOfEvents + 2), 300.Seconds());

            await waiter2;



            using var query = theStore.QuerySession();

            (await query.LoadAsync <Trip>(notCriticalBreakdownStream)).ShouldNotBeNull();
            (await query.LoadAsync <Trip>(criticalBreakdownStream)).ShouldBeNull();
        }