public async Task Verify_update_idempotency()
        {
            var rm = new SampleReadModelTest
            {
                Id      = new TestId(1),
                Value   = "test",
                Counter = 10,
            };
            await sut.InsertAsync(new SampleAggregateCreated(), rm).ConfigureAwait(false);

            //now try to update counter with an event
            SampleAggregateTouched e = new SampleAggregateTouched();

            await sut.FindAndModifyAsync(e, rm.Id, _ => _.Counter++).ConfigureAwait(false);

            var reloaded = await sut.FindOneByIdAsync(rm.Id).ConfigureAwait(false);

            Assert.That(reloaded.Counter, Is.EqualTo(11));

            //idempotency on the very same event
            await sut.FindAndModifyAsync(e, rm.Id, _ => _.Counter++).ConfigureAwait(false);

            reloaded = await sut.FindOneByIdAsync(rm.Id).ConfigureAwait(false);

            Assert.That(reloaded.Counter, Is.EqualTo(11));

            //increment on different event
            SampleAggregateTouched anotherEvent = new SampleAggregateTouched();
            await sut.FindAndModifyAsync(anotherEvent, rm.Id, _ => _.Counter++).ConfigureAwait(false);

            reloaded = await sut.FindOneByIdAsync(rm.Id).ConfigureAwait(false);

            Assert.That(reloaded.Counter, Is.EqualTo(12));
        }
示例#2
0
        public async Task  Verify_population_of_basic_properties_on_insert()
        {
            var rm = CreateNew();
            SampleAggregateCreated evt = HandleEvent(new SampleAggregateCreated());
            await sut.InsertAsync(evt, rm);

            var reloaded = await sut.FindOneByIdAsync(rm.Id);

            Assert.That(reloaded.CheckpointToken, Is.EqualTo(1L));
            Assert.That(reloaded.SecondaryToken, Is.GreaterThan(0));
        }
示例#3
0
        public async Task delete_is_idempotent()
        {
            var insert = new InsertEvent()
            {
                Text = "one"
            };
            var delete = new DeleteEvent();

            await _projection.On(insert);

            await _projection.On(delete);

            await _projection.On(delete);

            var loaded = await _collection.FindOneByIdAsync(delete.AggregateId.AsString());

            Assert.IsNull(loaded);
        }