public void TrackToPersistentStore_CalledWithAggregateRootAlreadyBeingTracked_ExpectAggregateRootAlreadyBeingTrackedException() { using (var tracker = new LambdaPostPersistenceDomainEventTracker<AggregateRootWithTwoDomainEvents>()) { var tracked = CreateAggregateRootTrackedBy(tracker, DummyPersistentObserver); tracker.Invoking(x => x.TrackToPersistentStore(tracked, DummyPersistentObserver)) .ShouldThrow<AggregateRootAlreadyBeingTrackedException>(); } }
public void ExpectGarbageCollectableAggregateRootsAreNotArtificiallyKeptAliveByTracking() { using (var tracker = new LambdaPostPersistenceDomainEventTracker<object>()) { var weakAggregateRoot = WeakAggregateRootBeingTrackedBy(tracker); Collect.Garbage(); object aggregateRoot; weakAggregateRoot.TryGetTarget(out aggregateRoot).Should().BeFalse(); } }
public void TrackToPersistentStore_CalledAfterDisposeWithAggregateRootPreviouslyBeingTracked_ExpectNewlySourcedDomainEventsAreTrackedToPersistentObserver() { using (var tracker = new LambdaPostPersistenceDomainEventTracker<AggregateRootWithTwoDomainEvents>()) { var persistentObserver = Substitute.For<Source.Of<object>>(); var tracked = CreateAggregateRootTrackedBy(tracker, persistentObserver); tracker.Dispose(); tracker.TrackToPersistentStore(tracked, persistentObserver); var domainEvent = new object(); tracked.SourceFirstDomainEvent(domainEvent); persistentObserver.Received(1)(tracked, domainEvent); } }
public void Dispose_Called_ExpectPreviouslyTrackedAggregateRootsAreNotBeingSilentlyTrackedToPersistentStore() { using (var tracker = new LambdaPostPersistenceDomainEventTracker<AggregateRootWithTwoDomainEvents>()) { var persistentObserver = Substitute.For<Source.Of<object>>(); var aggregateRoots = new[] { CreateAggregateRootTrackedBy(tracker, persistentObserver), CreateAggregateRootTrackedBy(tracker, persistentObserver) }; tracker.Dispose(); aggregateRoots.ForEach(aggregateRoot => aggregateRoot.SourceFirstDomainEvent(new object())); persistentObserver.DidNotReceive()(Arg.Any<object>(), Arg.Any<object>()); } }
public void TrackToPersistentStore_CalledWithDifferentAggregateRoots_ExpectNewlySourcedDomainEventsAreTrackedToPersistentObserverInOrder() { using (var tracker = new LambdaPostPersistenceDomainEventTracker<AggregateRootWithTwoDomainEvents>()) { var persistentObserver = Substitute.For<Source.Of<object>>(); var aggregateRoots = new[] { CreateAggregateRootTrackedBy(tracker, persistentObserver), CreateAggregateRootTrackedBy(tracker, persistentObserver) }; var domainEvents = new[] {new object(), new object()}; aggregateRoots[0].SourceFirstDomainEvent(domainEvents[0]); aggregateRoots[1].SourceFirstDomainEvent(domainEvents[1]); Received.InOrder(() => { persistentObserver.Received(1)(aggregateRoots[0], domainEvents[0]); persistentObserver.Received(1)(aggregateRoots[1], domainEvents[1]); }); } }
public void TrackToPersistentStore_CalledWithNullAggregateRoot_ExpectArgumentNullExceptionWithCorrectParamName() { using (var tracker = new LambdaPostPersistenceDomainEventTracker<object>()) { tracker.Invoking(x => x.TrackToPersistentStore(null, DummyPersistentObserver)) .ShouldThrow<ArgumentNullException>().And.ParamName.Should().Be("aggregateRoot"); } }