Пример #1
0
        public AsyncEventQueueManagerTests()
        {
            crudRepository  = new InMemoryCrudRepository();
            eventSerializer = Substitute.For <IEventSerializer>();

            sut = new AsyncEventQueueManager(crudRepository, eventSerializer, null); // TODO test
        }
Пример #2
0
        public CrudAggregateStoreTests()
        {
            crudRepository     = new InMemoryCrudRepository();
            entityTypeManager  = Substitute.For <IEntityTypeManager>();
            publishEventBuffer = Substitute.For <IPublishEventBuffer>();

            domainClasses = new List <DomainClassInfo>()
            {
                new DomainClassInfo(TestAggregateClassId, null, typeof(TestAggregate))
            };

            entityTypeManager.GetClassInfoByClassId(Guid.Empty)
            .ReturnsForAnyArgs(ci => domainClasses.Single(x => x.Id == ci.Arg <Guid>()));
            entityTypeManager.TryGetClassInfoByClrType(null)
            .ReturnsForAnyArgs(ci => domainClasses.SingleOrDefault(x => x.ClrType == ci.Arg <Type>()));
            entityTypeManager.GetClassInfoByClrType(null)
            .ReturnsForAnyArgs(ci => domainClasses.Single(x => x.ClrType == ci.Arg <Type>()));

            eventMessageFactory = Substitute.For <IEventMessageFactory>();
            eventMessageFactory.CreateMessageAsync(null).ReturnsForAnyArgs(ci =>
            {
                var @event       = ci.ArgAt <IEvent>(0);
                Type messageType = typeof(EventMessageDraft <>).MakeGenericType(@event.GetType());
                IEventMessageDraft messageDraft = (IEventMessageDraft)messageType.GetConstructor(new[] { @event.GetType() }).Invoke(new[] { @event });
                messageDraft.SetMetadata("TestKey", "TestValue");
                return(messageDraft);
            }); // TODO something more lightweight?


            sut = new CrudAggregateStore(crudRepository, entityTypeManager, publishEventBuffer, eventMessageFactory);
        }
Пример #3
0
        public EventStoreTests()
        {
            inMemoryCrudRepository = Substitute.ForPartsOf <InMemoryCrudRepository>();

            eventStreams = new[]
            {
                new EventStream(Guid.NewGuid()),
                new EventStream(Guid.NewGuid()),
                new EventStream(Guid.NewGuid())
            };
            inMemoryCrudRepository.AttachRange(eventStreams);

            eventSerializer = Substitute.For <IEventSerializer>();

            eventSerializer.SerializeEvent(null)
            .ReturnsForAnyArgs(ci => ("{\"bar\":" + ci.ArgAt <Event1>(0).Foo + "}", new VersionedTypeId("EventName", 5)));
            eventSerializer.DeserializeEvent(Arg.Any <string>(), new VersionedTypeId("EventName", 5))
            .Returns(ci => new Event1((int)JObject.Parse(ci.ArgAt <string>(0))["bar"]));
            eventSerializer.SerializeEventMetadata(null)
            .ReturnsForAnyArgs(ci => JsonConvert.SerializeObject(ci.Arg <IReadOnlyDictionary <string, string> >()
                                                                 .Append(new KeyValuePair <string, string>("fakeSer", "true"))
                                                                 .ToDictionary(x => x.Key, x => x.Value)));
            eventSerializer.DeserializeEventMetadata(null)
            .ReturnsForAnyArgs(ci =>
            {
                var json          = JObject.Parse(ci.Arg <string>());
                json["fakeDeser"] = "true";
                return(new JsonMetadata(json));
            });

            FakeClock.Setup();

            eventStreamRows = new[]
            {
                new EventStreamRow(Guid.NewGuid(), "{\"bar\":1}", "EventName", 5, eventStreams[0].Id, 1, Clock.Current.Now, "{\"doh\":\"1\"}"),
                new EventStreamRow(Guid.NewGuid(), "{\"bar\":2}", "EventName", 5, eventStreams[0].Id, 2, Clock.Current.Now, "{\"doh\":\"2\"}"),
                new EventStreamRow(Guid.NewGuid(), "{\"bar\":3}", "EventName", 5, eventStreams[1].Id, 3, Clock.Current.Now, "{\"doh\":\"3\"}"),
                new EventStreamRow(Guid.NewGuid(), "{\"bar\":4}", "EventName", 5, eventStreams[1].Id, 2, Clock.Current.Now, "{\"doh\":\"4\"}"),
                new EventStreamRow(Guid.NewGuid(), "{\"bar\":5}", "EventName", 5, eventStreams[1].Id, 4, Clock.Current.Now, "{\"doh\":\"5\"}"),
                new EventStreamRow(Guid.NewGuid(), "{\"bar\":6}", "EventName", 5, eventStreams[1].Id, 5, Clock.Current.Now, "{\"doh\":\"6\"}")
            };

            expectedStoreRecords = eventStreamRows.Select((x, i) =>
                                                          new FakeEventStoreRecord()
            {
                Event = eventSerializer.DeserializeEvent(x.EventJson, new VersionedTypeId(x.EventName, x.EventVersion)),
                AdditionalMetadata = new Dictionary <string, string>()
                {
                    { "doh", (i + 1).ToString() }, { "fakeDeser", "true" }
                },
                EventId = eventStreamRows[i].Id,
                StreamSequenceNumber = eventStreamRows[i].StreamSequenceNumber
            })
                                   .ToArray();

            inMemoryCrudRepository.AttachRange(eventStreamRows);

            sut = new EventStore(inMemoryCrudRepository, eventSerializer);
        }
Пример #4
0
        public ChangeTrackerTests()
        {
            crudRepository = new InMemoryCrudRepository();
            actorContext   = Substitute.For <IActorContext>();
            actorContext.CurrentActorName.Returns("actor");
            eventBus = Substitute.For <IEventBus>();
            FakeClock.Setup();
            FakeClock.Now = DateTime.Today;
            trackedChangeRecordConverter = Substitute.For <ITrackedChangeRecordConverter>();

            Mapper.Reset(); // TODO will break if other parallel tests call this too
            Mapper.Initialize(cfg => cfg.AddProfile(new HistoryAutoMapperProfile(trackedChangeRecordConverter)));

            sut = new ChangeTracker(crudRepository, actorContext, trackedChangeRecordConverter, eventBus);
        }
Пример #5
0
        public DbMessageLoaderTests()
        {
            inMemoryCrudRepository = new InMemoryCrudRepository();
            dbMessageCache         = Substitute.For <IDbMessageCache>();

            messages = new[]
            {
                new LocalizationMessage(Guid.NewGuid(), null, "hello", "ahoj", new Locale("cs-CZ"), null),
                new LocalizationMessage(Guid.NewGuid(), null, "coffee", "kafe", new Locale("cs-CZ"), null)
            };

            inMemoryCrudRepository.AttachRange(messages);

            sut = new DbMessageLoader(dbMessageCache, inMemoryCrudRepository);
        }
Пример #6
0
        public ChangeTrackerTests()
        {
            crudRepository = new InMemoryCrudRepository();
            actorContext   = Substitute.For <IActorContext>();
            actorContext.CurrentActorName.Returns("actor");
            eventBus = Substitute.For <IEventBus>();
            FakeClock.Setup();
            FakeClock.Now = DateTime.Today;
            trackedChangeRecordConverter = Substitute.For <ITrackedChangeRecordConverter>();

            var mapperConfig = new MapperConfiguration(configurationExpression =>
            {
                configurationExpression.AddProfile(new HistoryAutoMapperProfile(trackedChangeRecordConverter));
            });

            mapper = mapperConfig.CreateMapper();

            sut = new ChangeTracker(crudRepository, actorContext,
                                    trackedChangeRecordConverter, eventBus, mapper);
        }
Пример #7
0
        public BufferedNotificationProcessJobTests()
        {
            bufferGovernor1 = Substitute.For <IBufferGovernor>();
            bufferGovernor1.Id.Returns(Guid.NewGuid());
            inMemoryCrudRepository = new InMemoryCrudRepository();
            notificationSerializer = Substitute.For <INotificationSerializer>();
            notificationPipeline1  = Substitute.For <INotificationPipeline>();
            notificationPipeline1.Id.Returns(Guid.NewGuid());
            notificationPipeline2 = Substitute.For <INotificationPipeline>();
            notificationPipeline2.Id.Returns(Guid.NewGuid());

            notificationSerializer.FromJson(null).ReturnsForAnyArgs(ci =>
                                                                    new TestNotification()
            {
                Data     = ci.ArgAt <SerializedNotification>(0).NotificationJson,
                TypeName = ci.ArgAt <SerializedNotification>(0).NotificationClassName
            });

            sut = new BufferedNotificationProcessJob(new[] { bufferGovernor1 }, inMemoryCrudRepository,
                                                     new[] { notificationPipeline1, notificationPipeline2 }, notificationSerializer);
        }
Пример #8
0
 public SagaMetadataRepositoryTests()
 {
     inMemoryCrudRepository = new InMemoryCrudRepository();
     sut = new SagaMetadataRepository(inMemoryCrudRepository);
 }
Пример #9
0
 public EntityAttributeChangeLoggerTests()
 {
     crudRepository = new InMemoryCrudRepository();
     changeTracker  = Substitute.For <IChangeTracker>();
     sut            = new EntityAttributeChangeLogger(changeTracker, crudRepository);
 }
Пример #10
0
 public BufferedNotificationStoreTests()
 {
     inMemoryCrudRepository = Substitute.ForPartsOf <InMemoryCrudRepository>();
     sut = new BufferedNotificationStore(inMemoryCrudRepository);
 }
Пример #11
0
 public AggregatingBufferGovernorTests()
 {
     sut = new AggregatingBufferGovernor(governorId, TimeSpan.FromMinutes(5));
     inMemoryCrudRepository = new InMemoryCrudRepository();
 }