Exemplo n.º 1
0
        public virtual async Task SaveAndLoadContainsAllEventsForAnAggregate()
        {
            _logger.LogInformation("Running SaveAndLoadContainsAllEventsForAnAggregate");
            await Task.Delay(0).ConfigureAwait(false);

            var store = CreateInstance();

            {
                var @event = FakeEvent.Create();
                await store.SaveEventsAsync <FakeAggregate>(@event.AggregateId, new IDomainEvent[] { @event }, 0).ConfigureAwait(false);

                var loaded = await store.GetEventsForAggregateAsync <FakeAggregate>(@event.AggregateId).ConfigureAwait(false);

                loaded.Should().Contain(x => x.EventData.Id == @event.Id);
            }


            {
                var save = FakeEvent.CreateList(155).ToArray();
                await store.SaveEventsAsync <FakeAggregate>(save.First().AggregateId, save, 154).ConfigureAwait(false);

                var loaded = await store.GetEventsForAggregateAsync <FakeAggregate>(save.First().AggregateId).ConfigureAwait(false);

                foreach (var savedEvent in save)
                {
                    loaded.Should().Contain(x => x.EventData.Id == savedEvent.Id);
                }
            }
        }
        public void CanCreateDomainEventMessages()
        {
            var ev  = FakeEvent.Create();
            var agg = FakeAggregate.Factory.Create("1");

            {
                var de = ev.CreateAggregateDomainEventMessage(agg);

                de.AggregateId.Should().Be(agg.AggregateId);
                de.AggregateType.Should().Be(agg.GetType().GetTypeShortName());
                de.DomainEventType.Should().Be("SoftwarePioniere.FakeDomain.FakeEvent, SoftwarePioniere.TestHarness");

                var pev = de.GetEvent <FakeEvent>();
                pev.Id.Should().Be(ev.Id);
                pev.Text.Should().Be(ev.Text);
                pev.AggregateId.Should().Be(ev.AggregateId);
                pev.TimeStampUtc.Should().Be(ev.TimeStampUtc);
                pev.UserId.Should().Be(ev.UserId);
            }

            //{
            //    var de = (AggregateDomainEventMessage<FakeAggregate, FakeEvent>)ev.CreateTypedAggregateDomainEventMessage(agg);
            //    de.Should().NotBeNull();

            //    de.AggregateId.Should().Be(agg.Id);
            //    de.AggregateType.Should().Be(agg.GetType().GetTypeShortName());
            //    de.DomainEventType.Should().Be("SoftwarePioniere.Messaging.FakeEvent, SoftwarePioniere.Messaging.TestHarness");

            //    de.DomainEventContent.Id.Should().Be(ev.Id);
            //    de.DomainEventContent.Text.Should().Be(ev.Text);
            //    de.DomainEventContent.AggregateId.Should().Be(ev.AggregateId);
            //    de.DomainEventContent.TimeStampUtc.Should().Be(ev.TimeStampUtc);
            //    de.DomainEventContent.UserId.Should().Be(ev.UserId);
            //}
        }
        public void CanParseToIMessage()
        {
            object message     = FakeEvent.Create();
            Type   messageType = message.GetType();

            var isIMessage = typeof(IMessage).IsAssignableFrom(messageType);

            isIMessage.Should().BeTrue();
        }
Exemplo n.º 4
0
        public virtual async Task SavesEventsWithExpectedVersion()
        {
            _logger.LogInformation("Running SavesEventsWithExpectedVersion");


            var store = CreateInstance();
            await Task.Delay(0).ConfigureAwait(false);

            {
                var agg = FakeAggregate.Factory.Create();
                for (int i = 0; i < 133; i++)
                {
                    agg.DoFakeEvent($"schleife {i}");
                }
                await store.SaveEventsAsync <FakeAggregate>(agg.AggregateId, agg.GetUncommittedChanges(), agg.Version).ConfigureAwait(false);

                agg.MarkChangesAsCommitted();

                agg.DoFakeEvent2("fake 2");
                await store.SaveEventsAsync <FakeAggregate>(agg.AggregateId, agg.GetUncommittedChanges(), agg.Version).ConfigureAwait(false);

                agg.MarkChangesAsCommitted();

                var events = await store.GetEventsForAggregateAsync <FakeAggregate>(agg.AggregateId).ConfigureAwait(false);

                var lastEvent = events.Last();

                agg.Version.Should().Be(lastEvent.Version);


                agg.DoFakeEvent2("fake 3");

                Func <Task> f = async() =>
                {
                    await store.SaveEventsAsync <FakeAggregate>(agg.AggregateId,
                                                                agg.GetUncommittedChanges(),
                                                                agg.Version + 99).ConfigureAwait(false);
                };

                f.Should().Throw <ConcurrencyException>();
            }

            {
                var event1 = FakeEvent.Create();
                await store.SaveEventsAsync <FakeAggregate>(event1.AggregateId, new IDomainEvent[] { event1 }, 0).ConfigureAwait(false);

                await store.SaveEventsAsync <FakeAggregate>(event1.AggregateId, new IDomainEvent[] { FakeEvent.Create() }, 1).ConfigureAwait(false);

                await store.SaveEventsAsync <FakeAggregate>(event1.AggregateId, new IDomainEvent[] { FakeEvent.Create() }, 2).ConfigureAwait(false);

                await store.SaveEventsAsync <FakeAggregate>(event1.AggregateId, new IDomainEvent[] { FakeEvent.Create(), FakeEvent.Create() }, 4).ConfigureAwait(false);
            }
        }
        public void ApplyHistoryEvents()
        {
            var agg = new FakeAggregate();

            var @event = FakeEvent.Create();

            agg.SetAggregateId(@event.AggregateId);

            agg.LoadFromHistory(new[] { new EventDescriptor(@event, 1) });

            agg.AggregateId.Should().Be(@event.AggregateId);
            agg.Text.Should().Be(@event.Text);
        }
Exemplo n.º 6
0
        public virtual async Task CheckAggregateExists()
        {
            _logger.LogInformation("Running CheckAggregateExists");
            var @event = FakeEvent.Create();

            var store  = CreateInstance();
            var exists = await store.CheckAggregateExists <FakeAggregate>(@event.AggregateId).ConfigureAwait(false);

            exists.Should().BeFalse();

            await store.SaveEventsAsync <FakeAggregate>(@event.AggregateId, new IDomainEvent[] { @event }, 0).ConfigureAwait(false);

            exists = await store.CheckAggregateExists <FakeAggregate>(@event.AggregateId).ConfigureAwait(false);

            exists.Should().BeTrue();
        }
Exemplo n.º 7
0
        public virtual async Task SaveThrowsErrorIfVersionsNotMatch()
        {
            _logger.LogInformation("Running SaveThrowsErrorIfVersionsNotMatch");

            var store = CreateInstance();

            await Task.Delay(0).ConfigureAwait(false);

            var event1 = FakeEvent.Create();
            await store.SaveEventsAsync <FakeAggregate>(event1.AggregateId, new IDomainEvent[] { event1 }, 0).ConfigureAwait(false);

            var event2 = FakeEvent.Create();

            Func <Task> f = async() => { await store.SaveEventsAsync <FakeAggregate>(event1.AggregateId, new IDomainEvent[] { event2 }, 42).ConfigureAwait(false); };

            f.Should().Throw <ConcurrencyException>(); //.WithInnerException<ConcurrencyException>();
        }
        public virtual async Task RegisteredEventHandlerWillBeCalledAsync()
        {
            ServiceCollection
            .AddSingleton <IMessageSubscriber>(c => c.GetService <IMessageBus>())
            .AddSingleton <IMessageHandler, FakeEventHandler>()
            ;


            var bus = await CreateInstance().ConfigureAwait(false);

            var @event = FakeEvent.Create();
            await bus.PublishAsync(@event).ConfigureAwait(false);

            await Task.Delay(1000).ConfigureAwait(false);

            FakeEventHandler.HandledBy.Should().Contain(x => x == @event.Id);
        }
Exemplo n.º 9
0
        public async Task LoadCreatesAggregateAsync()
        {
            var @event = FakeEvent.Create();
            IList <EventDescriptor> list = new List <EventDescriptor> {
                new EventDescriptor(@event, 0)
            };

            var mockStore = new Mock <IEventStore>();

            mockStore.Setup(x => x.GetEventsForAggregateAsync <FakeAggregate>(@event.AggregateId))
            .ReturnsAsync(list);

            ServiceCollection
            .AddSingleton(mockStore.Object)
            .AddSingleton(Mock.Of <IMessagePublisher>())
            ;

            var repo = CreateInstance();


            var agg = await repo.GetByIdAsync <FakeAggregate>(@event.AggregateId);

            agg.AggregateId.Should().Be(@event.AggregateId);
        }