コード例 #1
0
        public async Task Snapshots_include_etags_for_events_that_have_been_persisted_to_the_event_store()
        {
            var etag = Guid.NewGuid().ToString().ToETag();

            var configuration = Configuration.Current;
            var addPlayer     = new MarcoPoloPlayerWhoIsNotIt.JoinGame
            {
                IdOfPlayerWhoIsIt = Any.Guid(),
                ETag = etag
            };

            var player = await new MarcoPoloPlayerWhoIsNotIt()
                         .ApplyAsync(addPlayer);
            await configuration.Repository <MarcoPoloPlayerWhoIsNotIt>().Save(player);

            await configuration.SnapshotRepository().SaveSnapshot(player);

            var snapshot = await configuration.SnapshotRepository()
                           .GetSnapshot(player.Id);

            snapshot.ETags
            .MayContain(etag)
            .Should()
            .BeTrue();
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        public async Task When_sourced_from_a_snapshot_and_applying_a_command_that_is_already_in_the_bloom_filter_then_a_precondition_check_is_used_to_rule_out_false_positives()
        {
            var verifierWasCalled = false;

            var preconditionVerifier = new TestEventStoreETagChecker(() =>
            {
                verifierWasCalled = true;
                return(true);
            });

            var configuration = Configuration.Current;

            configuration.UseDependency <IETagChecker>(_ => preconditionVerifier);

            var etag = Guid.NewGuid().ToString().ToETag();

            var addPlayer = new MarcoPoloPlayerWhoIsNotIt.JoinGame
            {
                IdOfPlayerWhoIsIt = Any.Guid(),
                ETag = etag
            };

            var player = await new MarcoPoloPlayerWhoIsNotIt()
                         .ApplyAsync(addPlayer);
            await configuration.Repository <MarcoPoloPlayerWhoIsNotIt>().Save(player);

            // don't call player.ConfirmSave

            await configuration.SnapshotRepository()
            .SaveSnapshot(player);

            var snapshot = await configuration.SnapshotRepository().GetSnapshot(player.Id);

            player = new MarcoPoloPlayerWhoIsNotIt(snapshot);

            player.HasETag(etag).Should().BeTrue();
            verifierWasCalled.Should().BeTrue();
        }