public void GivenEventsThatOccurAfterTheCurrentSequeneThenAnAggregateHistoryInvalidForStateExceptionIsThrown()
        {
            var first   = new SerializableEventCentricAggregateRoot();
            var second  = new SerializableEventCentricAggregateRoot(first.Id);
            var context = new SerializableMessage();

            IEnumerable <DomainEvent> events = first.ApplyChanges(context, times: 5);

            second.LoadFromHistory(events.Take(2));

            AggregateHistoryInvalidForStateException exception = Assert.Throws <AggregateHistoryInvalidForStateException>(
                () => second.LoadFromHistory(events.Skip(3)));

            Assert.True(exception.Aggregate.IsMatch(second));
        }
        public void GivenAnInstanceThenAllPropertiesAreSerialized()
        {
            var first   = new SerializableEventCentricAggregateRoot();
            var second  = new SerializableEventCentricAggregateRoot(first.Id);
            var context = new SerializableMessage();

            IEnumerable <DomainEvent> events = first.ApplyChanges(context, times: 5);

            second.LoadFromHistory(events.Take(2));

            AggregateHistoryInvalidForStateException original = Assert.Throws <AggregateHistoryInvalidForStateException>(
                () => second.LoadFromHistory(events.Skip(3)));

            AggregateHistoryInvalidForStateException deserialized = original.Clone();

            Assert.NotSame(original, deserialized);
            Assert.Equal(original.Aggregate, deserialized.Aggregate);
            Assert.Equal(original.Events, deserialized.Events);
            Assert.Equal(original.StartingVersion, deserialized.StartingVersion);
        }
        public void GivenUnorderedEventsThenAnAggregateEventSequenceUnorderedExceptionIsThrown()
        {
            var aggregate = new SerializableEventCentricAggregateRoot();
            var context   = new SerializableMessage();

            IEnumerable <DomainEvent> events = aggregate.ApplyChanges(context, times: 3);

            AggregateEventSequenceUnorderedException exception = Assert.Throws <AggregateEventSequenceUnorderedException>(
                () => aggregate.LoadFromHistory(events.OrderByDescending(@event => @event.Aggregate.Version)));

            Assert.True(exception.Aggregate.IsMatch(aggregate));
        }
        public void GivenAnAggregateThatHasChangesThenAnAggregateHasUncommittedChangesExceptionIsThrown()
        {
            var aggregate = new SerializableEventCentricAggregateRoot();
            var context   = new SerializableMessage();

            IEnumerable <DomainEvent> events = aggregate.ApplyChanges(context, commit: false, times: 1);

            AggregateHasUncommittedChangesException exception = Assert.Throws <AggregateHasUncommittedChangesException>(
                () => aggregate.LoadFromHistory(events));

            Assert.True(exception.Aggregate.IsMatch(aggregate));
        }
        public void GivenEventsForADifferentAggregateIdThenAnAggregateEventMismatchExceptionIsThrown()
        {
            var first   = new SerializableEventCentricAggregateRoot();
            var second  = new SerializableEventCentricAggregateRoot();
            var context = new SerializableMessage();

            IEnumerable <DomainEvent> events = first.ApplyChanges(context, times: 1);

            AggregateEventMismatchException exception = Assert.Throws <AggregateEventMismatchException>(
                () => second.LoadFromHistory(events));

            Assert.True(exception.Aggregate.IsMatch(second));
        }
        public void GivenAnInstanceThenAllPropertiesAreSerialized()
        {
            var aggregate = new SerializableEventCentricAggregateRoot();
            var context   = new SerializableMessage();

            IEnumerable <DomainEvent> events = aggregate.ApplyChanges(context, commit: false, times: 1);

            AggregateHasUncommittedChangesException original = Assert.Throws <AggregateHasUncommittedChangesException>(
                () => aggregate.LoadFromHistory(events));

            AggregateHasUncommittedChangesException deserialized = original.Clone();

            Assert.NotSame(original, deserialized);
            Assert.Equal(original.Aggregate, deserialized.Aggregate);
        }
Exemple #7
0
        public void GivenAnInstanceThenAllPropertiesAreSerialized()
        {
            var aggregate = new SerializableEventCentricAggregateRoot();
            var context   = new SerializableMessage();

            IEnumerable <DomainEvent> events = aggregate.ApplyChanges(context, times: 3);

            AggregateEventSequenceUnorderedException original = Assert.Throws <AggregateEventSequenceUnorderedException>(
                () => aggregate.LoadFromHistory(events.OrderByDescending(@event => @event.Aggregate.Version)));

            AggregateEventSequenceUnorderedException deserialized = original.Clone();

            Assert.NotSame(original, deserialized);
            Assert.Equal(original.Aggregate, deserialized.Aggregate);
            Assert.Equal(original.Events, deserialized.Events);
        }
        public void GivenEventsStartingFromTheBeginningContainingMultipleVersionsThenTheHydratedAggregateMatchesTheOriginal()
        {
            const ulong ExpectedVersionNumer = 3;

            var original = new SerializableEventCentricAggregateRoot();
            var context  = new SerializableMessage();

            IEnumerable <DomainEvent> events = original.ApplyChanges(context);

            var hydrated = new SerializableEventCentricAggregateRoot(original.Id);

            hydrated.LoadFromHistory(events);

            Assert.Equal(original, hydrated);
            Assert.Equal(original.Value, hydrated.Value);
            Assert.Equal(ExpectedVersionNumer, hydrated.Version.Number);
        }
        public void GivenEventsStartingFromAPreviouslyCommittedVersionThenTheHydratedAggregateMatchesTheOriginal()
        {
            const ulong ExpectedVersionNumer = 4;

            var original = new SerializableEventCentricAggregateRoot();
            var context  = new SerializableMessage();

            _ = original.ApplyChanges(context, times: 1);

            SerializableEventCentricAggregateRoot hydrated = original.Clone();

            IEnumerable <DomainEvent> events = original.ApplyChanges(context);

            hydrated.LoadFromHistory(events);

            Assert.Equal(original, hydrated);
            Assert.Equal(original.Value, hydrated.Value);
            Assert.Equal(ExpectedVersionNumer, hydrated.Version.Number);
        }