예제 #1
0
        public void ThrowsIfHandlerIsAlreadyRegistered()
        {
            var manager = new InMemoryEventBusSubscriptionsManager();

            manager.AddSubscription <TestEvent, TestEventHandler>();
            Assert.Throws <ArgumentException>(() => manager.AddSubscription <TestEvent, TestEventHandler>());
        }
        public void Get_Handlers_For_Event_Should_Return_All_Handlers()
        {
            var manager = new InMemoryEventBusSubscriptionsManager();

            manager.AddSubscription <TestIntegrationEvent, TestIntegrationEventHandler>();
            manager.AddSubscription <TestIntegrationEvent, TestIntegrationOtherEventHandler>();
            var handlers = manager.GetHandlersForEvent <TestIntegrationEvent>();

            Assert.Equal(2, handlers.Count());
        }
            public void AddSubscription_HandlerAlreadyRegistered_ThrowArgumentException(
                InMemoryEventBusSubscriptionsManager sut
                )
            {
                //Arrange
                sut.AddSubscription <TestIntegrationEvent, TestIntegrationEventHandler>();

                //Act
                Action act = () => sut.AddSubscription <TestIntegrationEvent, TestIntegrationEventHandler>();

                //Assert
                act.Should().Throw <ArgumentException>();
            }
예제 #4
0
        public static void AddIntegrationEventHandlers(this IServiceCollection services, IEnumerable <Assembly> assemblies)
        {
            List <Type> integrationEventHandlerTypes = assemblies.SelectMany(assembly => assembly.GetTypes())
                                                       .Where(x => x.GetInterfaces().Any(y => IsHandlerInterface(y)))
                                                       .Where(x => x.Name.EndsWith("Handler"))
                                                       .ToList();

            foreach (Type integrationEventHandlerType in integrationEventHandlerTypes)
            {
                AddHandlerAsService(services, integrationEventHandlerType);
            }

            services.AddSingleton <IEventBusSubscriptionsManager>(sp => {
                var subManager = new InMemoryEventBusSubscriptionsManager();
                foreach (Type integrationEventHandlerType in integrationEventHandlerTypes.Where(x => x.GetInterfaces().Any(y => IsIntegrationEventHandlerInterface(y))))
                {
                    IEnumerable <Type> interfaceTypes = integrationEventHandlerType.GetInterfaces().Where(y => IsHandlerInterface(y));
                    foreach (var interfaceType in interfaceTypes)
                    {
                        Type eventType = interfaceType.GetGenericArguments()[0];

                        subManager.AddSubscription(eventType, integrationEventHandlerType);
                    }
                }
                return(subManager);
            });
        }
예제 #5
0
        public void IsEmptyReturnsFalseWhenNotEmpty()
        {
            var manager = new InMemoryEventBusSubscriptionsManager();

            manager.AddSubscription <TestEvent, TestEventHandler>();
            Assert.False(manager.IsEmpty);
        }
        public void After_One_Event_Subscription_Should_Contain_The_Event()
        {
            var manager = new InMemoryEventBusSubscriptionsManager();

            manager.AddSubscription <TestIntegrationEvent, TestIntegrationEventHandler>();
            Assert.True(manager.HasSubscriptionsForEvent <TestIntegrationEvent>());
        }
예제 #7
0
        public void HasSubscriptionsForEventByNameReturnsTrueIfItHasSubscription()
        {
            var manager = new InMemoryEventBusSubscriptionsManager();

            manager.AddSubscription <TestEvent, TestEventHandler>();
            Assert.True(manager.HasSubscriptionsForEvent("TestEvent"));
        }
        public void After_All_Subscriptions_Are_Deleted_Event_Should_No_Longer_Exists()
        {
            var manager = new InMemoryEventBusSubscriptionsManager();

            manager.AddSubscription <TestIntegrationEvent, TestIntegrationEventHandler>();
            manager.RemoveSubscription <TestIntegrationEvent, TestIntegrationEventHandler>();
            Assert.False(manager.HasSubscriptionsForEvent <TestIntegrationEvent>());
        }
예제 #9
0
        public void IsEmptyAfterClear()
        {
            var manager = new InMemoryEventBusSubscriptionsManager();

            manager.AddSubscription <TestEvent, TestEventHandler>();
            manager.Clear();
            Assert.True(manager.IsEmpty);
        }
예제 #10
0
        public void GetEventTypeByNameReturnsCorrectType()
        {
            var manager = new InMemoryEventBusSubscriptionsManager();

            manager.AddSubscription <TestEvent, TestEventHandler>();
            var eventType = manager.GetEventTypeByName("TestEvent");

            Assert.Equal(typeof(TestEvent), eventType);
        }
예제 #11
0
        public void CanGetHandlersForEventByName()
        {
            var manager = new InMemoryEventBusSubscriptionsManager();

            manager.AddSubscription <TestEvent, TestEventHandler>();
            var handlerTypes = manager.GetHandlersForEvent("TestEvent");

            Assert.Equal(typeof(TestEventHandler), handlerTypes.First());
        }
        public void Deleting_Last_Subscription_Should_Raise_On_Deleted_Event()
        {
            bool raised  = false;
            var  manager = new InMemoryEventBusSubscriptionsManager();

            manager.OnEventRemoved += (o, e) => raised = true;
            manager.AddSubscription <TestIntegrationEvent, TestIntegrationEventHandler>();
            manager.RemoveSubscription <TestIntegrationEvent, TestIntegrationEventHandler>();
            Assert.True(raised);
        }
예제 #13
0
        public void After_Deleting_Last_Subscription_Should_Raise_OnEventRemoved()
        {
            var manager = new InMemoryEventBusSubscriptionsManager();

            var raised = false;

            manager.OnEventRemoved += (sender, eventArgs) => raised = true;
            manager.AddSubscription <TestIntegrationEvent, TestIntegrationEventHandler>();
            manager.RemoveSubscription <TestIntegrationEvent, TestIntegrationEventHandler>();
            Assert.True(raised);
        }
예제 #14
0
        public void After_One_Subscription_Are_Removed_Event_Shoule_No_Longer_Exists()
        {
            var manager = new InMemoryEventBusSubscriptionsManager();

            manager.AddSubscription <TestIntegrationEvent, TestIntegrationEventHandler>();
            manager.RemoveSubscription <TestIntegrationEvent, TestIntegrationEventHandler>();
            Assert.False(manager.HasSubscriptionsForEvent <TestIntegrationEvent>());

            manager.AddDynamicSubscription <TestDynamicIntegrationEventHandler>(nameof(TestIntegrationEvent));
            manager.RemoveDynamicSubscription <TestDynamicIntegrationEventHandler>(nameof(TestIntegrationEvent));
            Assert.False(manager.HasSubscriptionsForEvent(nameof(TestIntegrationEvent)));
        }
            public void AddSubscription_NoHandlersRegistered_HandlerIsRegistered(
                InMemoryEventBusSubscriptionsManager sut
                )
            {
                //Arrange

                //Act
                sut.AddSubscription <TestIntegrationEvent, TestIntegrationEventHandler>();

                //Assert
                sut.GetHandlersForEvent <TestIntegrationEvent>().ToList().Count.Should().Be(1);
            }
            public void Clear_HandlersRegistered_IsEmptyTrue(
                InMemoryEventBusSubscriptionsManager sut
                )
            {
                //Arrange
                sut.AddSubscription <TestIntegrationEvent, TestIntegrationEventHandler>();

                //Act
                sut.Clear();

                //Assert
                sut.IsEmpty.Should().BeTrue();
            }
            public void IsEmpty_HandlersRegistered_ReturnsFalse(
                InMemoryEventBusSubscriptionsManager sut
                )
            {
                //Arrange
                sut.AddSubscription <TestIntegrationEvent, TestIntegrationEventHandler>();

                //Act
                var result = sut.IsEmpty;

                //Assert
                result.Should().BeFalse();
            }
            public void RemoveDynamicSubscription_HandlerRegistered_HandlerIsRemoved(
                InMemoryEventBusSubscriptionsManager sut
                )
            {
                //Arrange
                bool eventRemoved = false;

                sut.OnEventRemoved += new EventHandler <string>(delegate
                {
                    eventRemoved = true;
                });
                sut.AddSubscription <TestIntegrationEvent, TestIntegrationEventHandler>();

                //Act
                sut.RemoveSubscription <TestIntegrationEvent, TestIntegrationEventHandler>();

                //Assert
                eventRemoved.Should().BeTrue();
            }