예제 #1
0
        public static void DoTest1()
        {
            var context = GetDomainContext();

            var id = new TestAggregateId(TestId);

            var executor = context.NewCommandExecutor<SnapshotTestRoot>();

            executor.Execute(new TestCommand1
                {
                    AggregateId = new TestAggregateId(id),
                    Name = Guid.NewGuid().ToString().Substring(0, 8),
                });
        }
예제 #2
0
        public void ClearChanges_NoEventsReturned()
        {
            //Arrange
            var guid = Guid.Parse("5ffdfca6-2cb6-4a22-8943-339a65298a2b");
            var ta   = TestAggregate.Create(TestAggregateId.FromGuid(guid), StringValue.FromString("testtest"), BoolValue.FromBool(true));

            ta.UpdateString(StringValue.FromString("Hello world"));

            //Act
            ta.ClearChanges();
            var changes = ta.GetChanges();

            //Arrange
            Assert.AreEqual(0, changes.Count);
        }
예제 #3
0
        public void Entity_Create_ValidData_ReturnsAggregate()
        {
            //Arrange
            var taGuid = Guid.Parse("5ffdfca6-2cb6-4a22-8943-339a65298a2b");
            var ta     = TestAggregate.Create(TestAggregateId.FromGuid(taGuid), StringValue.FromString("testtest"), BoolValue.FromBool(true));
            var teGuid = Guid.Parse("12c9077f-ddc1-4ded-bbc6-ff816d384788");

            //Act
            ta.AddEntity(TestEntityId.FromGuid(teGuid), StringValue.FromString("entity"));

            //Assert
            Assert.IsNotNull(ta.MyTe);
            Assert.AreEqual(teGuid, ta.MyTe.Id.Value);
            Assert.AreEqual("entity", ta.MyTe.MyString.Value);
        }
예제 #4
0
        public static void DoTest2()
        {
            var context = GetDomainContext();

            var id = new TestAggregateId(TestId);

            var executor = context.NewCommandExecutor<SnapshotTestRoot>();

            executor.Execute(new TestCommand2
                {
                    AggregateId = new TestAggregateId(id),
                    Description = Guid.NewGuid().ToString().Substring(0, 8),
                    Amount = 100,
                });
        }
예제 #5
0
        public void Entity_ClearChanges_NoEventsReturned()
        {
            //Arrange
            var guid   = Guid.Parse("5ffdfca6-2cb6-4a22-8943-339a65298a2b");
            var ta     = TestAggregate.Create(TestAggregateId.FromGuid(guid), StringValue.FromString("testtest"), BoolValue.FromBool(true));
            var teGuid = Guid.Parse("12c9077f-ddc1-4ded-bbc6-ff816d384788");

            ta.AddEntity(TestEntityId.FromGuid(teGuid), StringValue.FromString("entity"));

            //Act
            ta.ClearChanges();
            var changes = ta.GetChanges();

            //Arrange
            Assert.AreEqual(0, changes.Count);
        }
예제 #6
0
        public void GetChanges_CommandsExecuted_EventsReturned()
        {
            //Arrange
            var guid = Guid.Parse("5ffdfca6-2cb6-4a22-8943-339a65298a2b");
            var ta   = TestAggregate.Create(TestAggregateId.FromGuid(guid), StringValue.FromString("testtest"), BoolValue.FromBool(true));

            ta.UpdateString(StringValue.FromString("Hello world"));

            //Act
            var changes = ta.GetChanges();

            //Arrange
            Assert.AreEqual(2, changes.Count);
            Assert.IsTrue(changes[0] is CreatedEvent);
            Assert.IsTrue(changes[1] is StringUpdatedEvent);
        }
예제 #7
0
            protected override void When(IDomainEvent domainEvent)
            {
                switch (domainEvent)
                {
                case TestAggregateCreated testAggregateCreated:
                    SetIdentity(TestAggregateId.Of(Guid.Parse(testAggregateCreated.AggregateId)));
                    break;

                case TransformationDone transformationDone:
                    Value = transformationDone.Value;
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(domainEvent));
                }
            }
예제 #8
0
        public void Entity_GetChanges_CommandsExecuted_EventsReturned()
        {
            //Arrange
            var guid   = Guid.Parse("5ffdfca6-2cb6-4a22-8943-339a65298a2b");
            var ta     = TestAggregate.Create(TestAggregateId.FromGuid(guid), StringValue.FromString("testtest"), BoolValue.FromBool(true));
            var teGuid = Guid.Parse("12c9077f-ddc1-4ded-bbc6-ff816d384788");

            ta.AddEntity(TestEntityId.FromGuid(teGuid), StringValue.FromString("entity"));

            //Act
            var changes = ta.GetChanges();

            //Arrange
            Assert.AreEqual(2, changes.Count);
            Assert.IsTrue(changes[0] is CreatedEvent);
            Assert.IsTrue(changes[1] is TestEntityAddedToTestAggregateEvent);
        }
예제 #9
0
 public static TestAggregate NewFrom(TestAggregateId id) =>
 (TestAggregate) new TestAggregate().ApplyChange(TestAggregateCreated.Of(id));
예제 #10
0
 public TestUpdateCommand(TestAggregateId id)
 {
 }
예제 #11
0
 public TestCreateCommand(TestAggregateId id)
 {
 }
예제 #12
0
 public TestSagaStartedEvent(TestAggregateId sender, TestAggregateId receiver, Test sentTest)
 {
     Sender   = sender;
     Receiver = receiver;
     SentTest = sentTest;
 }
예제 #13
0
 public TestCreateEvent(TestAggregateId id)
 {
     Id = id;
 }
예제 #14
0
 public TestSagaStartedEvent(TestAggregateId sender, TestAggregateId receiver, Abstractions.Entities.Test sentTest)
 {
     Sender   = sender;
     Receiver = receiver;
     SentTest = sentTest;
 }
예제 #15
0
        public void Aggregates_can_be_hydrated()
        {
            var senderTestId = TestId.NewDeterministic(TestIdNamespace, (DateTime.UtcNow.Day - 1).ToString());
            var senderTest   = new Test(senderTestId);
            var receiver     = TestAggregateId.NewDeterministic(TestIdNamespace, (DateTime.UtcNow.Day + 1).ToString());
            var sender       = TestAggregateId.NewDeterministic(TestIdNamespace, DateTime.UtcNow.Day.ToString());

            RunOn(() =>
            {
                //set up event probe
                // set up sender
                var senderProbe = CreateTestProbe("sender-probe");
                var commandId   = CommandId.New;
                _aggregateProxy.Value.Tell(new CreateTestCommand(sender, commandId), senderProbe);

                senderProbe.ExpectMsg <TestExecutionResult>(
                    x => x.Result.IsSuccess &&
                    x.SourceId.Value == commandId.Value, TimeSpan.FromSeconds(10));


                var nextAggregateCommand = new AddTestCommand(sender, CommandId.New, senderTest);
                _aggregateProxy.Value.Tell(nextAggregateCommand, senderProbe);

                senderProbe.ExpectMsg <TestExecutionResult>(
                    x => x.Result.IsSuccess, TimeSpan.FromSeconds(10));

                // set up receiver
                var receiverProbe = CreateTestProbe("receiver-probe");
                var commandId2    = CommandId.New;
                _aggregateProxy.Value.Tell(new CreateTestCommand(receiver, commandId2), receiverProbe);

                receiverProbe.ExpectMsg <TestExecutionResult>(
                    x => x.Result.IsSuccess &&
                    x.SourceId.Value == commandId2.Value, TimeSpan.FromSeconds(10));
            }, _config.Client);


            EnterBarrier("aggregates-hydrated");

            var eventProbe = CreateTestProbe("event-probe");

            RunOn(() =>
            {
                Sys.EventStream.Subscribe(eventProbe, typeof(DomainEvent <TestSaga, TestSagaId, TestSagaStartedEvent>));
                Sys.EventStream.Subscribe(eventProbe, typeof(DomainEvent <TestSaga, TestSagaId, TestSagaCompletedEvent>));
                Sys.EventStream.Subscribe(eventProbe, typeof(DomainEvent <TestSaga, TestSagaId, TestSagaTransactionCompletedEvent>));
            }, _config.Worker);

            RunOn(() =>
            {
                var senderProbe = CreateTestProbe("saga-starting-probe");

                var nextAggregateCommand = new GiveTestCommand(sender, CommandId.New, receiver, senderTest);
                _aggregateProxy.Value.Tell(nextAggregateCommand, senderProbe);

                senderProbe.ExpectMsg <TestExecutionResult>(
                    x => x.Result.IsSuccess, TimeSpan.FromSeconds(10));
            }, _config.Client);

            RunOn(() =>
            {
                eventProbe.
                ExpectMsg <DomainEvent <TestSaga, TestSagaId, TestSagaStartedEvent> >(
                    x => x.AggregateEvent.Sender.Equals(sender) &&
                    x.AggregateEvent.Receiver.Equals(receiver) &&
                    x.AggregateEvent.SentTest.Equals(senderTest), TimeSpan.FromSeconds(20));

                eventProbe.
                ExpectMsg <DomainEvent <TestSaga, TestSagaId, TestSagaTransactionCompletedEvent> >(TimeSpan.FromSeconds(20));

                eventProbe.
                ExpectMsg <DomainEvent <TestSaga, TestSagaId, TestSagaCompletedEvent> >(TimeSpan.FromSeconds(20));
            }, _config.Worker);


            EnterBarrier("saga-finished");
        }
예제 #16
0
        public void Identity_NewComb_IsValid()
        {
            var testId = TestAggregateId.NewComb();

            TestAggregateId.IsValid(testId.Value).Should().BeTrue(testId.Value);
        }
예제 #17
0
        public void Identity_NewDeterministic_IsValid()
        {
            var testId = TestAggregateId.NewDeterministic(Guid.NewGuid(), Guid.NewGuid().ToString());

            TestAggregateId.IsValid(testId.Value).Should().BeTrue(testId.Value);
        }
예제 #18
0
        public TestAggregateRoot(TestAggregateId id)
        {
            var @event = new TestCreateEvent(id);

            Apply(@event);
        }
예제 #19
0
 public TestUpdateEvent(TestAggregateId id, string updatedFieldValue)
 {
     Id = id;
     UpdatedFieldValue = updatedFieldValue;
 }
예제 #20
0
 public void Hydrate(TestAsyncSagaSnapshot aggregateSnapshot)
 {
     Sender   = TestAggregateId.With(aggregateSnapshot.SenderId);
     Receiver = TestAggregateId.With(aggregateSnapshot.ReceiverId);
     Test     = new Entities.Test(TestId.With(aggregateSnapshot.Test.Id));
 }
예제 #21
0
 private void Apply(TestAggregateCreated e)
 {
     SetIdentity(TestAggregateId.Of(Guid.Parse(e.AggregateId)));
 }
예제 #22
0
        public void Identity_CannotCreate_WithBadIds(string badIdValue)
        {
            Action action = () => TestAggregateId.With(badIdValue);

            action.Should().Throw <ArgumentException>();
        }
예제 #23
0
 public static TestAggregateId GenerateTestAggregateId() => TestAggregateId.Of(Guid.NewGuid());
예제 #24
0
 public TestCreatePublicEvent(TestAggregateId id)
 {
     Id     = id;
     Tenant = Id.Tenant;
 }
예제 #25
0
 public TestAggregate(TestAggregateId identity)
     : base(identity)
 {
     testEntity = new TestEntity(this, new TestEntityId(4));
 }