Beispiel #1
0
        public override async Task When_a_constructor_command_fails_with_a_ConcurrencyException_it_is_not_retried()
        {
            // arrange
            var deliveredEtags = new List <string>();

            Configuration.Current.AddToCommandSchedulerPipeline <NonEventSourcedCommandTarget>(
                deliver: async(scheduled, next) =>
            {
                deliveredEtags.Add(scheduled.Command.ETag);
                await next(scheduled);
            });

            var id       = Any.CamelCaseName();
            var etag1    = Any.Word().ToETag();
            var etag2    = Any.Word().ToETag();
            var command1 = new CreateCommandTarget(id, etag: etag1);
            var command2 = new CreateCommandTarget(id, etag: etag2);

            // act
            await Schedule(id, command1);
            await Schedule(id, command2);

            await AdvanceClock(1.Days());
            await AdvanceClock(1.Days());
            await AdvanceClock(1.Days());

            // assert
            deliveredEtags.Should()
            .ContainSingle(e => e == etag1)
            .And
            .ContainSingle(e => e == etag2);
        }
        public override async Task When_a_clock_is_set_on_a_command_then_it_takes_precedence_over_GetClockName()
        {
            // arrange
            var clockName        = Any.CamelCaseName();
            var targetId         = Any.CamelCaseName();
            var command          = new CreateCommandTarget(targetId);
            var scheduledCommand = new ScheduledCommand <CommandTarget>(
                targetId: targetId,
                command: command,
                dueTime: DateTimeOffset.Parse("2016-03-20 09:00:00 AM"))
            {
                Clock = new CommandScheduler.Clock
                {
                    Name   = clockName,
                    UtcNow = DateTimeOffset.Parse("2016-03-01 02:00:00 AM")
                }
            };

            // act
            await scheduler.Schedule(scheduledCommand);

            await Configuration.Current.SchedulerClockTrigger()
            .AdvanceClock(clockName, by: 30.Days());

            //assert
            var target = await store.Get(targetId);

            target.Should().NotBeNull();
        }
        public override async Task When_a_clock_is_set_on_a_command_then_it_takes_precedence_over_GetClockName()
        {
            // arrange
            var clockName = Any.CamelCaseName();
            var targetId = Any.CamelCaseName();
            var command = new CreateCommandTarget(targetId);
            var clock = new CommandScheduler.Clock
            {
                Name = clockName,
                UtcNow = DateTimeOffset.Parse("2016-03-01 02:00:00 AM")
            };

            using (var commandScheduler = Configuration.Current.CommandSchedulerDbContext())
            {
                commandScheduler.Clocks.Add(clock);
                commandScheduler.SaveChanges();
            }

            var scheduledCommand = new ScheduledCommand<CommandTarget>(
                targetId: targetId,
                command: command,
                dueTime: DateTimeOffset.Parse("2016-03-20 09:00:00 AM"))
            {
                Clock = clock
            };

            // act
            await scheduler.Schedule(scheduledCommand);

            await Configuration.Current.SchedulerClockTrigger()
                .AdvanceClock(clockName, by: 30.Days());

            //assert 
            var target = await store.Get(targetId);

            target.Should().NotBeNull();
        }
        public override async Task When_a_constructor_command_fails_with_a_ConcurrencyException_it_is_not_retried()
        {
            // arrange
            var deliveredEtags = new List<string>();
            Configuration.Current.AddToCommandSchedulerPipeline<CommandTarget>(
                deliver: async (scheduled, next) =>
                {
                    deliveredEtags.Add(scheduled.Command.ETag);
                    await next(scheduled);
                });

            var id = Any.CamelCaseName();
            var etag1 = Any.Word().ToETag();
            var etag2 = Any.Word().ToETag();
            var command1 = new CreateCommandTarget(id, etag: etag1);
            var command2 = new CreateCommandTarget(id, etag: etag2);

            // act
            await scheduler.Schedule(id, command1);
            await scheduler.Schedule(id, command2);

            await AdvanceClock(1.Days());
            await AdvanceClock(1.Days());
            await AdvanceClock(1.Days());

            // assert
            deliveredEtags.Should()
                          .ContainSingle(e => e == etag1)
                          .And
                          .ContainSingle(e => e == etag2);
        }