public void When_Handler_Exists_In_Same_Assembly_Can_Find()
        {
            // Arrange
            var scanner = new ApiOperationHandlerExecutorBuilderScanner();

            var handlers = scanner.FindHandlers(
                new ServiceCollection(),
                typeof(OperationA),
                Enumerable.Empty <Assembly>());

            handlers.Should().NotBeEmpty();
        }
        public void When_Handler_Exists_In_IoC_Finds()
        {
            // Arrange
            var scanner = new ApiOperationHandlerExecutorBuilderScanner();

            var services = new ServiceCollection();

            services.AddSingleton <ScanOperationHandler, ScanOperationHandler>();

            var handlers = scanner.FindHandlers(
                services,
                typeof(OperationA),
                Enumerable.Empty <Assembly>());

            handlers.Should().NotBeEmpty();
        }
        public void When_Handler_Registered_As_Interface_Exists_In_IoC_Finds()
        {
            // Arrange
            var scanner = new ApiOperationHandlerExecutorBuilderScanner();

            var services = new ServiceCollection();

            services.AddSingleton <IApiOperationHandler <OperationA>, ScanOperationHandler>();

            var handlers = scanner.FindHandlers(
                services,
                typeof(OperationA),
                Enumerable.Empty <Assembly>());

            handlers.Should().NotBeEmpty();
            handlers.OfType <ApiOperationHandlerExecutorBuilder>().Should().Contain(b =>
                                                                                    b.ApiOperationHandlerType == typeof(ScanOperationHandler) &&
                                                                                    b.ToString().StartsWith("IoC"));
        }
        public void When_Handler_Exists_In_Assembly_And_IoC_Single_Returned()
        {
            // Arrange
            var scanner = new ApiOperationHandlerExecutorBuilderScanner();

            // Act
            var services = new ServiceCollection();

            services.AddSingleton <IApiOperationHandler <OperationA>, ScanOperationHandler>();

            var operationAHandlers = scanner.FindHandlers(
                services,
                typeof(OperationA),
                Enumerable.Empty <Assembly>());

            // Assert
            operationAHandlers.Should().NotBeEmpty();
            operationAHandlers.Should().HaveCount(1);
        }
        public void When_Handler_Exists_In_Same_Assembly_And_Implements_Multiple_Interfaces_Can_Find_For_All()
        {
            // Arrange
            var scanner = new ApiOperationHandlerExecutorBuilderScanner();

            // Act
            var operationAHandlers = scanner.FindHandlers(
                new ServiceCollection(),
                typeof(OperationA),
                Enumerable.Empty <Assembly>());

            var operationBHandlers = scanner.FindHandlers(
                new ServiceCollection(),
                typeof(OperationB),
                Enumerable.Empty <Assembly>());

            // Assert
            operationAHandlers.Should().NotBeEmpty();
            operationBHandlers.Should().NotBeEmpty();
        }