public async Task Advancing_the_clock_blocks_until_triggered_commands_on_the_InMemoryCommandScheduler_are_completed() { VirtualClock.Start(); var repository = new InMemoryEventSourcedRepository <Order>(); var scheduler = new InMemoryCommandScheduler <Order>(repository); var aggregateId = Any.Guid(); await scheduler.Schedule(new CommandScheduled <Order> { Command = new CreateOrder(Any.FullName()) { AggregateId = aggregateId }, DueTime = Clock.Now().AddHours(1), AggregateId = aggregateId }); VirtualClock.Current.AdvanceBy(TimeSpan.FromDays(1)); var order = await repository.GetLatest(aggregateId); order.Should().NotBeNull(); }
public async Task Scheduled_commands_are_reserialized_and_invoked_by_a_command_scheduler() { // arrange var bus = new FakeEventBus(); var shipmentId = Any.AlphanumericString(10); var repository = new InMemoryEventSourcedRepository <Order>(bus: bus); var scheduler = new InMemoryCommandScheduler <Order>(repository); bus.Subscribe(scheduler); var order = CreateOrder(); order.Apply(new ShipOn(shipDate: Clock.Now().AddMonths(1).Date) { ShipmentId = shipmentId }); await repository.Save(order); // act VirtualClock.Current.AdvanceBy(TimeSpan.FromDays(32)); //assert order = await repository.GetLatest(order.Id); var lastEvent = order.Events().Last(); lastEvent.Should().BeOfType <Order.Shipped>(); order.ShipmentId.Should().Be(shipmentId, "Properties should be transferred correctly from the serialized command"); }
public async Task Scheduled_commands_are_reserialized_and_invoked_by_a_command_scheduler() { // arrange var bus = new FakeEventBus(); var shipmentId = Any.AlphanumericString(10); var repository = new InMemoryEventSourcedRepository<Order>(bus: bus); var scheduler = new InMemoryCommandScheduler<Order>(repository); bus.Subscribe(scheduler); var order = CreateOrder(); order.Apply(new ShipOn(shipDate: Clock.Now().AddMonths(1).Date) { ShipmentId = shipmentId }); await repository.Save(order); // act VirtualClock.Current.AdvanceBy(TimeSpan.FromDays(32)); //assert order = await repository.GetLatest(order.Id); var lastEvent = order.Events().Last(); lastEvent.Should().BeOfType<Order.Shipped>(); order.ShipmentId.Should().Be(shipmentId, "Properties should be transferred correctly from the serialized command"); }
public void InMemoryCommandScheduler_executes_scheduled_commands_immediately_if_no_due_time_is_specified() { // arrange var bus = new InProcessEventBus(); var repository = new InMemoryEventSourcedRepository <Order>(bus: bus); var scheduler = new InMemoryCommandScheduler <Order>(repository); bus.Subscribe(scheduler); var order = CreateOrder(); // act order.Apply(new ShipOn(Clock.Now().Subtract(TimeSpan.FromDays(2)))); repository.Save(order); //assert order = repository.GetLatest(order.Id); var lastEvent = order.Events().Last(); lastEvent.Should().BeOfType <Order.Shipped>(); }
public async Task Advancing_the_clock_blocks_until_triggered_commands_on_the_InMemoryCommandScheduler_are_completed() { VirtualClock.Start(); var repository = new InMemoryEventSourcedRepository<Order>(); var scheduler = new InMemoryCommandScheduler<Order>(repository); var aggregateId = Any.Guid(); await scheduler.Schedule(new CommandScheduled<Order> { Command = new CreateOrder(Any.FullName()) { AggregateId = aggregateId }, DueTime = Clock.Now().AddHours(1), AggregateId = aggregateId }); VirtualClock.Current.AdvanceBy(TimeSpan.FromDays(1)); var order = await repository.GetLatest(aggregateId); order.Should().NotBeNull(); }
public async Task InMemoryCommandScheduler_executes_scheduled_commands_immediately_if_no_due_time_is_specified() { // arrange var bus = new InProcessEventBus(); var repository = new InMemoryEventSourcedRepository<Order>(bus: bus); var scheduler = new InMemoryCommandScheduler<Order>(repository); bus.Subscribe(scheduler); var order = CreateOrder(); // act order.Apply(new ShipOn(Clock.Now().Subtract(TimeSpan.FromDays(2)))); await repository.Save(order); await scheduler.Done(); //assert order = await repository.GetLatest(order.Id); var lastEvent = order.Events().Last(); lastEvent.Should().BeOfType<Order.Shipped>(); }