示例#1
0
        public async Task When_execute_aggregate_command_with_metadata()
        {
            _command         = new InflateNewBallonCommand(1, Guid.NewGuid().ToString());
            _commandMetadata = MessageMetadata.New(_command.Id, Guid.NewGuid().ToString(), null);

            var res = await Node.Prepare(_command, _commandMetadata)
                      .Expect <BalloonCreated>()
                      .And <BalloonCreatedNotification>()
                      .Execute();

            _answer         = res.MessageWithMetadata <BalloonCreatedNotification>();
            _aggregateEvent = res.MessageWithMetadata <BalloonCreated>();
            //Result_contains_metadata()
            Assert.NotNull(_answer.Metadata);
            //Result_message_has_expected_type()
            Assert.IsAssignableFrom <BalloonCreatedNotification>(_answer.Message);
            //Result_message_has_expected_id()
            Assert.Equal(_command.AggregateId, _answer.Message.BallonId);
            //Result_metadata_has_command_id_as_casuation_id()
            Assert.Equal(_aggregateEvent.Metadata.MessageId, _answer.Metadata.CasuationId);
            //Result_metadata_has_correlation_id_same_as_command_metadata()
            Assert.Equal(_commandMetadata.CorrelationId, _answer.Metadata.CorrelationId);
            // Result_metadata_has_processed_history_filled_from_aggregate()
            //Assert.Equal(1, _answer.Metadata.History?.Steps.Count);
            ////Result_metadata_has_processed_correct_filled_history_step()
            //var step = _answer.Metadata.History.Steps.First();
            //Assert.Equal(nameof(BalloonCreatedNotificator), step.Who);
            //Assert.Equal(BalloonCreatedNotificator.Why, step.Why);
            //Assert.Equal(BalloonCreatedNotificator.MessageProcessed, step.What);
        }
        public async Task Given_timeout_only_default_policy()
        {
            var aggregateId = Guid.NewGuid().ToString();

            var cmd = new InflateNewBallonCommand(1, aggregateId);
            await Node.Prepare(cmd).Expect <BalloonCreated>().Execute();

            //checking "time-out" rule for policy, snapshots should be saved once on second command
            await Task.Delay(1000);

            var changedParameter             = 2;
            var changeSampleAggregateCommand = new WriteTitleCommand(changedParameter, aggregateId);

            await Node.Prepare(changeSampleAggregateCommand).Expect <BalloonTitleChanged>().Execute();

            await Task.Delay(1000);

            var snapshots =
                await
                new AggregateSnapshotRepository(AutoTestNodeDbConfiguration.Default.JournalConnectionString,
                                                new BalloonAggregateFactory(),
                                                new BalloonAggregateFactory()).Load <Balloon>(aggregateId);

            //Snapshots_should_be_saved_one_time()
            Assert.Empty(snapshots);
        }
        public async Task When_execute_aggregate_command_with_metadata()
        {
            var command         = new InflateNewBallonCommand(1, Guid.NewGuid().ToString());
            var commandMetadata = MessageMetadata.New(command.Id, Guid.NewGuid().ToString(), null);

            var res = await Node.Prepare(command, commandMetadata)
                      .Expect <BalloonCreated>()
                      .And <Fault <BalloonCreated> >()
                      .Execute(null, false);

            var answer         = res.MessageWithMetadata <IFault <BalloonCreated> >();
            var aggregateEvent = res.MessageWithMetadata <BalloonCreated>();

            //Result_contains_metadata()
            Assert.NotNull(answer.Metadata);
            //Result_message_has_expected_type()
            Assert.IsAssignableFrom <IFault <BalloonCreated> >(answer.Message);
            //Produced_fault_produced_by_projection_builder()
            Assert.Equal(typeof(BalloonCreatedFaultyProjection), answer.Message.Processor);
            //Result_message_has_expected_id()
            Assert.Equal(command.AggregateId, answer.Message.Message.SourceId);
            //Result_metadata_has_aggregate_event_id_as_casuation_id()
            Assert.Equal(aggregateEvent.Metadata.MessageId, answer.Metadata.CasuationId);
            //Result_metadata_has_correlation_id_same_as_command_metadata()
            Assert.Equal(commandMetadata.CorrelationId, answer.Metadata.CorrelationId);
            //Result_metadata_has_processed_history_filled_from_aggregate()
            //Assert.Equal(1, answer.Metadata.History?.Steps.Count);
            ////Result_metadata_has_processed_correct_filled_history_step()
            //var step = answer.Metadata.History.Steps.First();
            //
            //Assert.Equal(nameof(BalloonCreatedFaultyProjection), step.Who);
            //Assert.Equal(MessageHandlingConstants.MessageProcessCasuedAnError, step.Why);
            //Assert.Equal(MessageHandlingConstants.PublishingFault, step.What);
        }
示例#4
0
        public async Task When_Executing_command_events_should_be_projected()
        {
            var autoTestDb = ConnectionStrings.AutoTestDb;

            var dbOptions = new DbContextOptionsBuilder <BalloonContext>().UseSqlServer(autoTestDb).Options;

            //warm up EF
            using (var context = new BalloonContext(dbOptions))
            {
                context.BalloonCatalog.Add(new BalloonCatalogItem()
                {
                    BalloonId = Guid.NewGuid().ToString(), LastChanged = DateTime.UtcNow, Title = "WarmUp"
                });
                await context.SaveChangesAsync();
            }

            await TestDbTools.Truncate(autoTestDb, "BalloonCatalog");

            var cmd = new InflateNewBallonCommand(123, Guid.NewGuid().ToString());
            await Node.Prepare(cmd)
            .Expect <BalloonCreatedNotification>()
            .Execute(TimeSpan.FromSeconds(30));

            using (var context = new BalloonContext(dbOptions))
            {
                var catalogItem = await context.BalloonCatalog.FindAsync(cmd.AggregateId);

                Assert.Equal(cmd.Title.ToString(), catalogItem.Title);
            }
        }
示例#5
0
        public async Task When_execute_aggregate_command_with_metadata()
        {
            _command         = new InflateNewBallonCommand(1, Guid.NewGuid().ToString());
            _commandMetadata = MessageMetadata.New(_command.Id, Guid.NewGuid().ToString(), null);

            var res = await Node.Prepare(_command, _commandMetadata)
                      .Expect <BalloonCreated>()
                      .Execute();

            var messageMetadata = res.ReceivedMetadata;
            var balloonCreated  = res.Received;

            Assert.NotNull(messageMetadata);
            //Result_contains_message()

            Assert.NotNull(balloonCreated);
            //Result_message_has_expected_type()
            Assert.IsAssignableFrom <BalloonCreated>(balloonCreated);
            //Result_message_has_expected_id()
            Assert.Equal(_command.AggregateId, balloonCreated.SourceId);
            //Result_message_has_expected_value()
            Assert.Equal(_command.Title.ToString(), balloonCreated.Value);
            //Result_metadata_has_command_id_as_casuation_id()
            Assert.Equal(_command.Id, messageMetadata.CasuationId);
            //Result_metadata_has_correlation_id_same_as_command_metadata()
            Assert.Equal(_commandMetadata.CorrelationId, messageMetadata.CorrelationId);
            //Result_metadata_has_processed_history_filled_from_aggregate()
            //Assert.Equal(1, messageMetadata.History?.Steps.Count);
            ////Result_metadata_has_processed_correct_filled_history_step()
            //var step = messageMetadata.History.Steps.First();
            //
            //Assert.Equal(AggregateActorName.New<Balloon>(_command.AggregateId).Name, step.Who);
            //Assert.Equal(AggregateActorConstants.CommandExecutionCreatedAnEvent, step.Why);
            //Assert.Equal(AggregateActorConstants.PublishingEvent, step.What);
        }
示例#6
0
        public async Task Given_default_policy()
        {
            var aggregateId      = Guid.NewGuid().ToString();
            var initialParameter = 1;
            var cmd = new InflateNewBallonCommand(initialParameter, aggregateId);
            await Node.Prepare(cmd)
            .Expect <BalloonCreated>()
            .Execute();

            var changedParameter             = 2;
            var changeSampleAggregateCommand = new WriteTitleCommand(changedParameter, aggregateId);

            await Node.Prepare(changeSampleAggregateCommand)
            .Expect <BalloonTitleChanged>()
            .Execute();

            Thread.Sleep(1000);

            var aggregates = await AggregateSnapshotRepository.New(AutoTestNodeDbConfiguration.Default.JournalConnectionString,
                                                                   BalloonAggregateFactory.Default)
                             .Load <Balloon>(aggregateId);

            //Snapshots_should_be_saved_two_times()
            Assert.Equal(2, aggregates.Length);
            //Restored_aggregates_should_have_same_ids()
            Assert.True(aggregates.All(s => s.Payload.Id == aggregateId));
            //First_snapshot_should_have_parameters_from_first_command()
            Assert.Equal(initialParameter.ToString(), aggregates.First().Payload.Title);
            //Second_snapshot_should_have_parameters_from_second_command()
            Assert.Equal(changedParameter.ToString(), aggregates.Skip(1).First().Payload.Title);
        }
示例#7
0
            public Isolated_Console_can_execute_commands()
            {
                var connector = new GridNodeConnector(new ServerConfiguration(),
                                                      new NodeConfiguration("Console", new NodeNetworkAddress()));

                connector.Connect().Wait();
                var command = new InflateNewBallonCommand(42, Guid.NewGuid().ToString());

                connector.Execute(command).Wait();

                Success = true;
            }
示例#8
0
        public async Task Then_domain_events_should_be_upgraded_by_json_custom_adapter()
        {
            var cmd = new InflateNewBallonCommand(1, Guid.NewGuid().ToString());

            await Node.Prepare(cmd).
            Expect <BalloonCreated>().
            Execute();

            var aggregate = await Node.LoadAggregate <Balloon>(cmd.AggregateId);

            Assert.Equal("101", aggregate.Title);
        }
示例#9
0
            public ClientLaunch_wait_for_command_produced_events()
            {
                var connector = new GridNodeConnector(new ServerConfiguration(),
                                                      new NodeConfiguration("Console", new NodeNetworkAddress()));

                connector.Connect().Wait();
                var command = new InflateNewBallonCommand(42, Guid.NewGuid().ToString());

                connector.Prepare(command)
                .Expect <BalloonCreated>()
                .Execute().Wait();

                Success = true;
            }