コード例 #1
0
        public async Task Verify_Correct_save_of_aggregate_version()
        {
            var rm = new SampleReadModelTest();

            rm.Id    = new TestId(1);
            rm.Value = "test";
            await sut.InsertAsync(new SampleAggregateCreated()
            {
                Version = 1,
            }, rm).ConfigureAwait(false);

            rm = sut.All.Single();
            Assert.That(rm.AggregateVersion, Is.EqualTo(1));
            Assert.That(rm.Version, Is.EqualTo(1));

            //now generate another event in the very same commit
            var touchedEvent = new SampleAggregateTouched()
            {
                Version = 1,
            };

            await sut.SaveAsync(touchedEvent, rm).ConfigureAwait(false);

            rm = sut.All.Single();
            Assert.That(rm.AggregateVersion, Is.EqualTo(1));
            Assert.That(rm.Version, Is.EqualTo(2));
        }
コード例 #2
0
        protected Task <Changeset> GenerateTouchedEvent(String issuedBy = null)
        {
            var evt = new SampleAggregateTouched();

            SetBasePropertiesToEvent(evt, issuedBy);
            return(ProcessEvent(evt));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        private void On(SampleAggregateTouched evt)
        {
            if (TouchCount >= TouchMax)
            {
                throw new Exception();
            }

            TouchCount += FakeSignature;
        }
コード例 #5
0
        public async Task Verify_correctly_return_of_handled_event_even_if_a_single_Event_is_handled()
        {
            var cs = await GenerateCreatedEvent().ConfigureAwait(false);

            var rm = new SimpleTestAtomicReadModel(new SampleAggregateId(_aggregateIdSeed));

            rm.ProcessChangeset(cs);

            var evta = new SampleAggregateDerived1();
            var evtb = new SampleAggregateTouched();
            var cs2  = await ProcessEvents(new DomainEvent[] { evta, evtb }, p => new AtomicAggregateId(p)).ConfigureAwait(false);

            Assert.IsTrue(rm.ProcessChangeset(cs2));
        }
        protected Changeset GenerateTouchedEvent(Boolean inSameCommitAsPrevious)
        {
            SampleAggregateTouched evt = new SampleAggregateTouched();

            return(ProcessEvent(evt, inSameCommitAsPrevious));
        }
コード例 #7
0
 protected void When(SampleAggregateTouched evt)
 {
     TouchCount++;
 }
コード例 #8
0
 public void On(SampleAggregateTouched e)
 {
 }
コード例 #9
0
#pragma warning disable S1144 // Unused private types or members should be removed
#pragma warning disable S1172 // Unused method parameters should be removed

        private void On(SampleAggregateTouched _)
        {
            TouchCount += 1;
        }
 public void On(SampleAggregateTouched e)
 {
     // Method intentionally left empty.
 }