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)); }
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)); }
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); }