示例#1
0
        public async Task ReadModelFeed()
        {
            var mockHttp = new MockHttpMessageHandler();

            mockHttp.When("http://localost:5000/api/DomainEvents/?lastVersion=0")
            .Respond("application/json", "[{ \"domainEventType\": \"UNKNOWN_TYPE\",\"entityStreamVersion\": 12, \"overallVersion\": \"1\", \"domainEvent\": {\"EntityId\" : \"5a8b63c8-0f7f-4de7-a9e5-b6b377aa2180\"}}, { \"domainEventType\": \"TestEv\",\"entityStreamVersion\": 12, \"overallVersion\": \"2\", \"domainEvent\": {\"EntityId\" : \"5a8b63c8-0f7f-4de7-a9e5-b6b377aa2180\" }}]");

            var domainOverallEventClient = new HttpClient(mockHttp);

            domainOverallEventClient.BaseAddress = new Uri("http://localost:5000/api/DomainEvents/");

            var factoryMock = new Mock <IDomainEventClientFactory>();

            factoryMock.Setup(m => m.GetClient <ReadModelEventHandler <TestReadModel> >()).ReturnsAsync(domainOverallEventClient);
            var domainEventFactory = new DomainEventFactory(_eventTypeRegistration);
            var readModelFeed      = new EventFeed <ReadModelEventHandler <TestReadModel> >(
                domainEventFactory,
                factoryMock.Object, new MicrowaveLogger <EventFeed <ReadModelEventHandler <TestReadModel> > >());
            var domainEvents = await readModelFeed.GetEventsAsync();

            var domainEventWrappers = domainEvents.ToList();

            Assert.AreEqual(1, domainEventWrappers.Count);
            Assert.AreEqual(new Guid("5a8b63c8-0f7f-4de7-a9e5-b6b377aa2180").ToString(), domainEventWrappers[0].DomainEvent
                            .EntityId);
        }
        public void SetUp()
        {
            var factory           = new DomainEventFactory();
            var definitionService = new EventDefinitionService(new NullLog());

            definitionService.Load(typeof(ThingyPingEvent));

            _serializer = new EventJsonSerializer(new JsonSerializer(), definitionService, factory);
        }
示例#3
0
    public async Task <TEntity> GetByIdAsync(TKey id)
    {
        var streamId     = GenerateStreamId(id);
        var streamEvents = await EventStreamReader.Read(_connection, streamId, StreamPosition.Start, 200);

        var domainEvents = DomainEventFactory.Create(streamEvents, _eventTypeResolver);

        return(AggregateFactory.Create <TEntity>(domainEvents));
    }
示例#4
0
        public void SetUp()
        {
            var factory           = new DomainEventFactory();
            var definitionService = new EventDefinitionService(
                Mock <ILogger <EventDefinitionService> >(),
                Mock <ILoadedVersionedTypes>());

            definitionService.Load(typeof(ThingyPingEvent));

            _serializer = new EventJsonSerializer(new JsonSerializer(), definitionService, factory);
        }
示例#5
0
        public void ParseDomainEventWrapper_NoKeyInRegistration()
        {
            var domainEventWrapper = new [] { new DomainEventWrapper
                                              {
                                                  EntityStreamVersion = 12,
                                                  OverallVersion      = 0,
                                                  DomainEvent         = new Event1(Guid.NewGuid(), "Name")
                                              } };

            var serializeObject       = JsonConvert.SerializeObject(domainEventWrapper);
            var eventTypeRegistration = new EventRegistration();
            var domainEventFactory    = new DomainEventFactory(eventTypeRegistration);
            var ev = domainEventFactory.Deserialize(serializeObject);
            var domainEventWrappers = ev.ToList();

            Assert.AreEqual(0, domainEventWrappers.Count);
        }
示例#6
0
        public void ParseDomainEventWrapper_StringKey()
        {
            var domainEventWrapper = new [] { new DomainEventWrapper
                                              {
                                                  EntityStreamVersion = 12,
                                                  OverallVersion      = 0,
                                                  DomainEvent         = new Event2("luls", "Name")
                                              } };

            var serializeObject       = JsonConvert.SerializeObject(domainEventWrapper);
            var eventTypeRegistration = new EventRegistration {
                { nameof(Event2), typeof(Event2) }
            };
            var domainEventFactory  = new DomainEventFactory(eventTypeRegistration);
            var domainEventWrappers = domainEventFactory.Deserialize(serializeObject).ToList();
            var wrapperActual       = domainEventWrappers.Single();

            Assert.AreEqual("luls", wrapperActual.DomainEvent.EntityId);
        }
        private EventStoreBase CreateStore()
        {
            var aggregateFactory  = Mock.Of <IAggregateFactory>();
            var resolver          = Mock.Of <IResolver>();
            var metadataProviders = Enumerable.Empty <IMetadataProvider>();
            var snapshotStore     = Mock.Of <ISnapshotStore>();
            var log               = new NullLog();
            var factory           = new DomainEventFactory();
            var persistence       = new InMemoryEventPersistence(log);
            var upgradeManager    = new EventUpgradeManager(log, resolver);
            var definitionService = new EventDefinitionService(log);

            definitionService.Load(typeof(ThingyPingEvent));
            var serializer = new EventJsonSerializer(new JsonSerializer(), definitionService, factory);

            var store = new EventStoreBase(log, aggregateFactory,
                                           serializer, upgradeManager, metadataProviders,
                                           persistence, snapshotStore);

            return(store);
        }
示例#8
0
        public async Task UpdateMultiple(
            bool pingFirst,
            bool injectPing)
        {
            // Arrange
            var readStoreManager = Resolver.Resolve <IReadStoreManager>();
            var thingyId         = ThingyId.New;
            var thingyMessage    = Fixture.Create <ThingyMessage>();
            var pingId           = PingId.New;
            var command          = new ThingyAddMessageAndPingCommand(
                thingyId,
                thingyMessage,
                pingId,
                pingFirst);
            var metadata = new Metadata
            {
                Timestamp = DateTimeOffset.Now,
                AggregateSequenceNumber = 1,
                AggregateName           = typeof(ThingyAggregate).GetAggregateName().Value,
                AggregateId             = thingyId.Value,
                EventId = EventId.New,
            };
            var domainEvent = injectPing
                ? DomainEventFactory.Create(new ThingyPingEvent(pingId), metadata, thingyId.Value, 1)
                : DomainEventFactory.Create(new ThingyMessageAddedEvent(thingyMessage), metadata, thingyId.Value, 1);
            await readStoreManager.UpdateReadStoresAsync(
                new[] { domainEvent },
                CancellationToken.None);

            // Act
            await CommandBus.PublishAsync(command, CancellationToken.None);

            // Assert
            var returnedThingyMessages = await QueryProcessor.ProcessAsync(new ThingyGetMessagesQuery(thingyId)).ConfigureAwait(false);

            returnedThingyMessages.Should().HaveCount(1);
            var readModel = await QueryProcessor.ProcessAsync(new ThingyGetQuery(thingyId)).ConfigureAwait(false);

            readModel.PingsReceived.Should().Be(1);
        }
示例#9
0
        private EventStoreBase CreateStore()
        {
            var aggregateFactory  = Mock <IAggregateFactory>();
            var serviceProvider   = Mock <IServiceProvider>();
            var metadataProviders = Enumerable.Empty <IMetadataProvider>();
            var snapshotStore     = Mock <ISnapshotStore>();
            var factory           = new DomainEventFactory();
            var persistence       = new InMemoryEventPersistence(Logger <InMemoryEventPersistence>());
            var upgradeManager    = new EventUpgradeManager(Logger <EventUpgradeManager>(), serviceProvider);
            var definitionService = new EventDefinitionService(Logger <EventDefinitionService>(), Mock <ILoadedVersionedTypes>());

            definitionService.Load(typeof(ThingyPingEvent));
            var serializer = new EventJsonSerializer(new JsonSerializer(), definitionService, factory);

            var store = new EventStoreBase(
                Logger <EventStoreBase>(),
                aggregateFactory,
                serializer, upgradeManager, metadataProviders,
                persistence, snapshotStore);

            return(store);
        }
示例#10
0
        public async Task ReadModelFeed_Unauthorized()
        {
            var mockHttp = new MockHttpMessageHandler();

            mockHttp.When("http://localost:5000/api/DomainEvents/?timeStamp=0001-01-01T00:00:00.0000000+00:00")
            .Respond(HttpStatusCode.Unauthorized);
            var domainOverallEventClient = new HttpClient(mockHttp);

            domainOverallEventClient.BaseAddress = new Uri("http://localost:5000/api/DomainEvents/");

            var factoryMock = new Mock <IDomainEventClientFactory>();

            factoryMock.Setup(m => m.GetClient <ReadModelEventHandler <TestReadModel> >()).ReturnsAsync(domainOverallEventClient);

            var domainEventFactory = new DomainEventFactory(_eventTypeRegistration);
            var readModelFeed      = new EventFeed <ReadModelEventHandler <TestReadModel> >(domainEventFactory, factoryMock
                                                                                            .Object, new MicrowaveLogger <EventFeed <ReadModelEventHandler <TestReadModel> > >());
            var domainEvents = await readModelFeed.GetEventsAsync();

            var domainEventWrappers = domainEvents.ToList();

            Assert.AreEqual(0, domainEventWrappers.Count);
        }
示例#11
0
        public async Task ReadModelFeed_Exception()
        {
            var mockHttp = new MockHttpMessageHandler();

            mockHttp.When("http://localost:5000/api/DomainEvents/?lastVersion=0")
            .Throw(new HttpRequestException());
            var domainOverallEventClient = new HttpClient(mockHttp);

            domainOverallEventClient.BaseAddress = new Uri("http://localost:5000/api/DomainEvents/");

            var factoryMock = new Mock <IDomainEventClientFactory>();

            factoryMock.Setup(m => m.GetClient <ReadModelEventHandler <TestReadModel> >()).ReturnsAsync(domainOverallEventClient);

            var domainEventFactory = new DomainEventFactory(_eventTypeRegistration);
            var readModelFeed      = new EventFeed <ReadModelEventHandler <TestReadModel> >(domainEventFactory, factoryMock
                                                                                            .Object, new MicrowaveLogger <EventFeed <ReadModelEventHandler <TestReadModel> > >());
            var domainEvents = await readModelFeed.GetEventsAsync();

            var domainEventWrappers = domainEvents.ToList();

            Assert.AreEqual(0, domainEventWrappers.Count);
        }
示例#12
0
        public void ParseDomainEventWrapper()
        {
            var domainEventWrapper = new [] { new DomainEventWrapper
                                              {
                                                  EntityStreamVersion = 12,
                                                  OverallVersion      = 1,
                                                  DomainEvent         = new Event1(Guid.NewGuid(), "Name")
                                              } };

            var serializeObject       = JsonConvert.SerializeObject(domainEventWrapper);
            var eventTypeRegistration = new EventRegistration {
                { nameof(Event1), typeof(Event1) }
            };
            var domainEventFactory = new DomainEventFactory(eventTypeRegistration);
            var ev = domainEventFactory.Deserialize(serializeObject);
            var domainEventWrappers = ev.ToList();
            var wrapperActual       = domainEventWrappers.Single();
            var wrapperExpected     = domainEventWrapper.Single();

            Assert.AreEqual(wrapperExpected.DomainEvent.EntityId, wrapperActual.DomainEvent.EntityId);
            Assert.AreEqual(wrapperExpected.EntityStreamVersion, wrapperActual.EntityStreamVersion);
            Assert.AreEqual(wrapperExpected.OverallVersion, wrapperActual.OverallVersion);
            Assert.AreEqual(((Event1)wrapperExpected.DomainEvent).Name, ((Event1)wrapperActual.DomainEvent).Name);
        }