public void When_a_CommandContext_does_not_specify_a_command_then_by_default_new_events_have_null_etags()
 {
     using (CommandContext.Establish(clock: Clock.Create(() => DateTimeOffset.UtcNow)))
     {
         var created = new Order.Created();
         created.ETag.Should().BeNull();
     }
 }
        public void If_no_aggregate_id_is_specified_when_adding_events_then_a_default_is_chosen_and_reused()
        {
            var created             = new Order.Created();
            var customerInfoChanged = new Order.CustomerInfoChanged();

            CreateScenarioBuilder()
            .AddEvents(created, customerInfoChanged);

            created.AggregateId.Should().NotBeEmpty();
            customerInfoChanged.AggregateId.Should().Be(created.AggregateId);
        }
        public async Task If_no_aggregate_id_is_specified_when_calling_GetLatest_and_a_single_instance_is_in_the_scenario_then_it_is_returned()
        {
            var aggregateId = Any.Guid();
            var created     = new Order.Created
            {
                AggregateId = aggregateId
            };

            var scenario = CreateScenarioBuilder().AddEvents(created).Prepare();

            var aggregate = await scenario.GetLatestAsync <Order>();

            aggregate.Should().NotBeNull();
            aggregate.Id.Should().Be(aggregateId);
        }
        public async Task If_Schedule_is_dependent_on_an_event_with_no_ETag_then_it_sets_one()
        {
            var created = new Order.Created
            {
                AggregateId = Any.Guid(),
                ETag = null
            };

            await Schedule(
                Any.Guid(),
                new SendOrderConfirmationEmail(Any.Word()),
                deliveryDependsOn: created);

            created.ETag.Should().NotBeNullOrEmpty();
        }
        public async Task If_Schedule_is_dependent_on_an_event_with_no_ETag_then_it_sets_one()
        {
            var created = new Order.Created
            {
                AggregateId = Any.Guid(),
                ETag        = null
            };

            await Schedule(
                Any.Guid(),
                new SendOrderConfirmationEmail(Any.Word()),
                deliveryDependsOn : created);

            created.ETag.Should().NotBeNullOrEmpty();
        }
Example #6
0
        public void If_Schedule_is_dependent_on_an_event_with_no_ETag_then_it_sets_one()
        {
            var scheduler = new ImmediateCommandScheduler <CustomerAccount>(new InMemoryEventSourcedRepository <CustomerAccount>());

            var created = new Order.Created
            {
                AggregateId = Any.Guid(),
                ETag        = null
            };

            scheduler.Schedule(
                Any.Guid(),
                new SendOrderConfirmationEmail(Any.Word()),
                deliveryDependsOn: created);

            created.ETag.Should().NotBeNullOrEmpty();
        }
        public async Task If_Schedule_is_dependent_on_an_event_with_no_ETag_then_it_sets_one()
        {
            var scheduler = new Configuration()
                            .UseInMemoryEventStore()
                            .UseInMemoryCommandScheduling()
                            .CommandScheduler <CustomerAccount>();

            var created = new Order.Created
            {
                AggregateId = Any.Guid(),
                ETag        = null
            };

            await scheduler.Schedule(
                Any.Guid(),
                new SendOrderConfirmationEmail(Any.Word()),
                deliveryDependsOn : created);

            created.ETag.Should().NotBeNullOrEmpty();
        }
        public async Task Events_in_the_currently_configured_event_stream_can_be_queried_from_the_In_memory_context()
        {
            var aggregateId = Any.Guid();

            var storableEvent = new Order.Created
            {
                CustomerName = Any.FullName(),
                AggregateId = aggregateId
            }.ToStorableEvent();

            var eventStream = new InMemoryEventStream();
            await eventStream.Append(new[] { storableEvent.ToInMemoryStoredEvent() });

            Configuration.Current.UseDependency(_ => eventStream);

            using (var db = new InMemoryEventStoreDbContext())
            {
                var orderCreated = db.Events.Single(e => e.AggregateId == aggregateId);

                orderCreated.Should().NotBeNull();
            }
        }
        public async Task Events_in_the_currently_configured_event_stream_can_be_queried_from_the_In_memory_context()
        {
            var aggregateId = Any.Guid();

            var storableEvent = new Order.Created
            {
                CustomerName = Any.FullName(),
                AggregateId  = aggregateId
            }.ToStorableEvent();

            var eventStream = new InMemoryEventStream();
            await eventStream.Append(new[] { storableEvent.ToInMemoryStoredEvent() });

            Configuration.Current.UseDependency(_ => eventStream);

            using (var db = new InMemoryEventStoreDbContext())
            {
                var orderCreated = db.Events.Single(e => e.AggregateId == aggregateId);

                orderCreated.Should().NotBeNull();
            }
        }
        public async Task Events_can_be_added_to_the_context_and_queried_back()
        {
            var aggregateId = Any.Guid();

            var storableEvent = new Order.Created
            {
                CustomerName = Any.FullName(),
                AggregateId = aggregateId
            }.ToStorableEvent();

            var eventStream = new InMemoryEventStream();

            using (var db = new InMemoryEventStoreDbContext(eventStream))
            {
                db.Events.Add(storableEvent);

                await db.SaveChangesAsync();

                var orderCreated = db.Events.Single(e => e.AggregateId == aggregateId);

                orderCreated.Should().NotBeNull();
            }
        }
        public async Task Events_can_be_added_to_the_context_and_queried_back()
        {
            var aggregateId = Any.Guid();

            var storableEvent = new Order.Created
            {
                CustomerName = Any.FullName(),
                AggregateId  = aggregateId
            }.ToStorableEvent();

            var eventStream = new InMemoryEventStream();

            using (var db = new InMemoryEventStoreDbContext(eventStream))
            {
                db.Events.Add(storableEvent);

                await db.SaveChangesAsync();

                var orderCreated = db.Events.Single(e => e.AggregateId == aggregateId);

                orderCreated.Should().NotBeNull();
            }
        }
        public async Task If_Schedule_is_dependent_on_an_event_with_no_ETag_then_it_sets_one()
        {
            var scheduler = new Configuration()
                .UseInMemoryEventStore()
                .UseInMemoryCommandScheduling()
                .CommandScheduler<CustomerAccount>();

            var created = new Order.Created
            {
                AggregateId = Any.Guid(),
                ETag = null
            };

            await scheduler.Schedule(
                Any.Guid(),
                new SendOrderConfirmationEmail(Any.Word()),
                deliveryDependsOn: created);

            created.ETag.Should().NotBeNullOrEmpty();
        }
Example #13
0
 public void HaveConsequences(Order.Created @event)
 {
     onCreated(@event);
 }
Example #14
0
 public void UpdateProjection(Order.Created @event)
 {
     onCreated(@event);
 }
        public void If_Schedule_is_dependent_on_an_event_with_no_ETag_then_it_sets_one()
        {
            var scheduler = new ImmediateCommandScheduler<CustomerAccount>(new InMemoryEventSourcedRepository<CustomerAccount>());

            var created = new Order.Created
            {
                AggregateId = Any.Guid(), 
                ETag = null
            };

            scheduler.Schedule(
                Any.Guid(),
                new SendOrderConfirmationEmail(Any.Word()),
                deliveryDependsOn: created);

            created.ETag.Should().NotBeNullOrEmpty();
        }