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 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); }
public async Task Given_aggregate_When_executing_same_command_twice_Then_second_commands_fails() { var cmd = new WriteTitleCommand(43, Guid.NewGuid().ToString()); await Node.Execute(cmd); await Node.Execute(cmd).ShouldThrow <CommandAlreadyExecutedException>(); }
public async Task When_async_method_is_called_other_commands_can_be_executed_before_async_results() { var aggregateId = Guid.NewGuid().ToString(); var asyncCommand = new PlanTitleChangeCommand(43, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), TimeSpan.FromSeconds(1)); var syncCommand = new WriteTitleCommand(42, aggregateId); var asyncCommandTask = Node.Prepare(asyncCommand) .Expect <BalloonTitleChanged>() .Execute(); await Node.Prepare(syncCommand) .Expect <BalloonTitleChanged>() .Execute(); var sampleAggregate = await this.LoadAggregateByActor <Balloon>(syncCommand.AggregateId); Assert.Equal(syncCommand.Parameter.ToString(), sampleAggregate.Title); var changedEvent = (await asyncCommandTask).Message <BalloonTitleChanged>(); Assert.Equal(asyncCommand.Parameter.ToString(), changedEvent.Value); }