コード例 #1
0
        private void InitializeEventJournal(TIdentity aggregateId, params IAggregateEvent <TIdentity>[] events)
        {
            var writerGuid = Guid.NewGuid().ToString();
            var writes     = new AtomicWrite[events.Length];

            for (var i = 0; i < events.Length; i++)
            {
                var committedEvent = new CommittedEvent <TIdentity, IAggregateEvent <TIdentity> >(aggregateId, events[i], new EventMetadata(), DateTimeOffset.UtcNow, i + 1);
                writes[i] = new AtomicWrite(new Persistent(committedEvent, i + 1, aggregateId.Value, String.Empty, false, ActorRefs.NoSender, writerGuid));
            }
            var journal = Persistence.Instance.Apply(_testKit.Sys).JournalFor(null);

            journal.Tell(new WriteMessages(writes, AggregateEventTestProbe.Ref, 1));

            AggregateEventTestProbe.ExpectMsg <WriteMessagesSuccessful>();

            for (var i = 0; i < events.Length; i++)
            {
                var seq = i;
                AggregateEventTestProbe.ExpectMsg <WriteMessageSuccess>(x =>
                                                                        x.Persistent.PersistenceId == aggregateId.ToString() &&
                                                                        x.Persistent.Payload is CommittedEvent <TIdentity, IAggregateEvent <TIdentity> > &&
                                                                        x.Persistent.SequenceNr == (Int64)seq + 1);
            }
        }
コード例 #2
0
        public IFixtureArranger <TAggregate, TIdentity> Using <TAggregateManager>(
            Expression <Func <TAggregateManager> > aggregateManagerFactory, TIdentity aggregateId)
            where TAggregateManager : ReceiveActor, IAggregateManager <TAggregate, TIdentity>
        {
            if (aggregateId == null)
            {
                throw new ArgumentNullException(nameof(aggregateId));
            }
            if (!AggregateEventTestProbe.IsNobody())
            {
                throw new InvalidOperationException(nameof(AggregateEventTestProbe));
            }
            if (!AggregateReplyTestProbe.IsNobody())
            {
                throw new InvalidOperationException(nameof(AggregateReplyTestProbe));
            }

            AggregateId             = aggregateId;
            AggregateEventTestProbe = _testKit.CreateTestProbe("aggregate-event-test-probe");
            AggregateReplyTestProbe = _testKit.CreateTestProbe("aggregate-reply-test-probe");
            AggregateRef            = _testKit.Sys.ActorOf(Props.Create(aggregateManagerFactory), "aggregate-manager");
            UsesAggregateManager    = false;
            AggregateProps          = Props.Empty;

            return(this);
        }
コード例 #3
0
        private void InitializeSnapshotStore <TAggregateSnapshot>(TIdentity aggregateId, TAggregateSnapshot aggregateSnapshot, Int64 sequenceNumber)
            where TAggregateSnapshot : IAggregateSnapshot <TAggregate, TIdentity>
        {
            var snapshotStore     = Persistence.Instance.Apply(_testKit.Sys).SnapshotStoreFor(null);
            var committedSnapshot = new CommittedSnapshot <TAggregate, TIdentity, TAggregateSnapshot>(aggregateId, aggregateSnapshot, new SnapshotMetadata(), DateTimeOffset.UtcNow, sequenceNumber);

            var metadata = new AkkaSnapshotMetadata(aggregateId.ToString(), sequenceNumber);

            snapshotStore.Tell(new SaveSnapshot(metadata, committedSnapshot), AggregateEventTestProbe.Ref);

            AggregateEventTestProbe.ExpectMsg <SaveSnapshotSuccess>(x =>
                                                                    x.Metadata.SequenceNr == sequenceNumber &&
                                                                    x.Metadata.PersistenceId == aggregateId.ToString());
        }
コード例 #4
0
        public IFixtureAsserter <TAggregate, TIdentity> ThenExpectDomainEvent <TAggregateEvent>(Predicate <IDomainEvent <TIdentity, TAggregateEvent> > domainEventPredicate = null, TimeSpan?timeout = null)
            where TAggregateEvent : class, IAggregateEvent <TIdentity>
        {
            _testKit.Sys.EventStream.Subscribe(AggregateEventTestProbe, typeof(IDomainEvent <TIdentity, TAggregateEvent>));

            if (domainEventPredicate == null)
            {
                AggregateEventTestProbe.ExpectMsg <DomainEvent <TIdentity, TAggregateEvent> >(duration: timeout);
            }
            else
            {
                AggregateEventTestProbe.ExpectMsg <DomainEvent <TIdentity, TAggregateEvent> >(domainEventPredicate, timeout: timeout);
            }

            return(this);
        }
コード例 #5
0
        public IFixtureAsserter <TAggregate, TIdentity> ThenExpect <TAggregateEvent>(Predicate <TAggregateEvent> aggregateEventPredicate = null)
            where TAggregateEvent : class, IAggregateEvent <TAggregate, TIdentity>
        {
            _testKit.Sys.EventStream.Subscribe(AggregateEventTestProbe, typeof(IDomainEvent <TAggregate, TIdentity, TAggregateEvent>));

            if (aggregateEventPredicate == null)
            {
                AggregateEventTestProbe.ExpectMsg <DomainEvent <TAggregate, TIdentity, TAggregateEvent> >();
            }
            else
            {
                AggregateEventTestProbe.ExpectMsg <DomainEvent <TAggregate, TIdentity, TAggregateEvent> >(x => aggregateEventPredicate(x.AggregateEvent));
            }

            return(this);
        }
コード例 #6
0
        public IFixtureArranger <TAggregate, TIdentity> For(TIdentity aggregateId)
        {
            if (aggregateId == null)
            {
                throw new ArgumentNullException(nameof(aggregateId));
            }
            if (!AggregateEventTestProbe.IsNobody())
            {
                throw new InvalidOperationException(nameof(AggregateEventTestProbe));
            }

            AggregateId             = aggregateId;
            AggregateEventTestProbe = _testKit.CreateTestProbe("aggregate-event-test-probe");
            AggregateReplyTestProbe = _testKit.CreateTestProbe("aggregate-reply-test-probe");

            return(this);
        }
コード例 #7
0
        public IFixtureArranger <TAggregate, TIdentity> For(TIdentity aggregateId)
        {
            if (aggregateId == null)
            {
                throw new ArgumentNullException(nameof(aggregateId));
            }

            if (!AggregateEventTestProbe.IsNobody())
            {
                throw new InvalidOperationException(nameof(AggregateEventTestProbe));
            }

            AggregateId             = aggregateId;
            AggregateEventTestProbe = _testKit.CreateTestProbe("aggregate-event-test-probe");
            AggregateReplyTestProbe = _testKit.CreateTestProbe("aggregate-reply-test-probe");
            AggregateProps          = Props.Create <TAggregate>(args: aggregateId);
            AggregateRef            = ActorRefs.Nobody;
            UsesAggregateManager    = false;

            return(this);
        }