public async Task Scatter_gather_produces_a_unique_etag_per_sent_command()
        {
            var repo = configuration.Repository <MarcoPoloPlayerWhoIsIt>();
            var it   = new MarcoPoloPlayerWhoIsIt();
            await repo.Save(it);

            var numberOfPlayers = 6;
            var players         = Enumerable.Range(1, numberOfPlayers)
                                  .Select(_ => new MarcoPoloPlayerWhoIsNotIt());

            foreach (var player in players)
            {
                var joinGame = new MarcoPoloPlayerWhoIsNotIt.JoinGame
                {
                    IdOfPlayerWhoIsIt = it.Id
                };
                await player.ApplyAsync(joinGame).AndSave();
            }

            await repo.Refresh(it);

            await it.ApplyAsync(new MarcoPoloPlayerWhoIsIt.SayMarco()).AndSave();

            await repo.Refresh(it);

            it.Events()
            .OfType <MarcoPoloPlayerWhoIsIt.HeardPolo>()
            .Count()
            .Should()
            .Be(numberOfPlayers);
        }
        public async Task Aggregates_can_schedule_commands_against_themselves_idempotently()
        {
            var it = new MarcoPoloPlayerWhoIsIt();
            await configuration.Repository <MarcoPoloPlayerWhoIsIt>().Save(it);

            await it.ApplyAsync(new MarcoPoloPlayerWhoIsIt.KeepSayingMarcoOverAndOver());

            VirtualClock.Current.AdvanceBy(TimeSpan.FromMinutes(1));

            await configuration.Repository <MarcoPoloPlayerWhoIsIt>().Refresh(it);

            it.Events()
            .OfType <MarcoPoloPlayerWhoIsIt.SaidMarco>()
            .Count()
            .Should()
            .BeGreaterOrEqualTo(5);
        }