public void AddMapper_ThrowsWithNoInterfaces()
        {
            var container = new SimpleIocContainer();

            Assert.ThrowsException <InvalidOperationException>(
                () => NotSoAutoMapperIocContainerUtilities.AddMapper(typeof(object), container.Register));
        }
        public void AddNotSoAutoMapper_AddsRequiredServices()
        {
            var container = new SimpleIocContainer();

            NotSoAutoMapperIocContainerUtilities.AddNotSoAutoMapper(container.Register);

            // Yay!
        }
        public void AddMappersFrom_DoesNotAddExcludedMethods()
        {
            var methods = new List <MethodInfo>();

            NotSoAutoMapperIocContainerUtilities.AddMappersFrom(typeof(AddMappersFromTestClass),
                                                                (m, _, __) => methods.Add(m));

            CollectionAssert.DoesNotContain(methods, AddMappersFromTestClass.InvalidMapperExcludedMethodInfo);
        }
        public void AddMappersFrom_AddsValidMappers()
        {
            var methods = new List <MethodInfo>();

            NotSoAutoMapperIocContainerUtilities.AddMappersFrom(typeof(AddMappersFromTestClass),
                                                                (m, _, __) => methods.Add(m));

            CollectionAssert.Contains(methods, AddMappersFromTestClass.ValidMapperSimpleMethodInfo);
            CollectionAssert.Contains(methods, AddMappersFromTestClass.ValidMapperWithDependenciesMethodInfo);
        }
 /// <inheritdoc cref="NotSoAutoMapperIocContainerUtilities.AddMappersFrom" />
 /// <param name="services">The <see cref="IServiceCollection" /> to register with.</param>
 /// <param name="type">The type containing the static methods.</param>
 /// <returns>The original <see cref="IServiceCollection" />.</returns>
 public static IServiceCollection AddMappersFrom(this IServiceCollection services, Type type)
 {
     NotSoAutoMapperIocContainerUtilities.AddMappersFrom(type, (method, types, methodGetter) =>
     {
         services.AddSingleton(types.ServiceType, provider =>
         {
             var expression = methodGetter(provider.GetRequiredService);
             return(ActivatorUtilities.CreateInstance(provider, types.ImplementationType, expression));
         });
     });
     return(services);
 }
        public void AddMapper_AddsAllInterfaces()
        {
            var container    = new SimpleIocContainer();
            var imapperTypes = new[] { typeof(IMapper <object, int>), typeof(IMapper <double, int>) };
            var mapper       = Substitute.For(imapperTypes, Array.Empty <object>());

            NotSoAutoMapperIocContainerUtilities.AddMapper(mapper.GetType(), container.Register);

            var expectedRegistrations = imapperTypes.Select(x => (x, mapper.GetType())).ToList();

            CollectionAssert.AreEquivalent(expectedRegistrations, container.Registrations);
        }
        public void AddMappersFrom_ResolvesMethodsWithParameters()
        {
            LambdaExpression expression = null;
            var dependency = new Mapper <object, int>(AddMappersFromTestClass.ValidMapperSimple());

            NotSoAutoMapperIocContainerUtilities.AddMappersFrom(typeof(AddMappersFromTestClass), (m, _, getter) =>
            {
                if (m != AddMappersFromTestClass.ValidMapperWithDependenciesMethodInfo)
                {
                    return;
                }

                expression = getter(__ => dependency);
            });

            Assert.AreSame(dependency, AddMappersFromTestClass.ValidMapperWithDependenciesLastParameterValue);
            Assert.AreSame(expression, AddMappersFromTestClass.ValidMapperWithDependencies(dependency));
        }
        public void AddMappersFrom_ResolvesMethodsWithoutParameters()
        {
            LambdaExpression expression = null;

            NotSoAutoMapperIocContainerUtilities.AddMappersFrom(typeof(AddMappersFromTestClass), (m, _, getter) =>
            {
                if (m != AddMappersFromTestClass.ValidMapperSimpleMethodInfo)
                {
                    return;
                }

                expression = getter(__ =>
                {
                    Assert.Fail("There aren't any services to resolve.");
                    return(null);
                });
            });

            Assert.AreSame(expression, AddMappersFromTestClass.ValidMapperSimple());
        }
        public void AddMappersFrom_HasCorrectRegistrationDescriptor()
        {
            NotSoAutoMapperIocContainerUtilities.AddMappersFrom(typeof(AddMappersFromTestClass), (m, descriptor, _) =>
            {
                void MustBe <TInput, TOutput>()
                {
                    Assert.AreEqual(typeof(IMapper <TInput, TOutput>), descriptor.ServiceType);
                    Assert.AreEqual(typeof(Mapper <TInput, TOutput>), descriptor.ImplementationType);
                }

                if (m == AddMappersFromTestClass.ValidMapperSimpleMethodInfo)
                {
                    MustBe <object, int>();
                }
                else if (m == AddMappersFromTestClass.ValidMapperWithDependenciesMethodInfo)
                {
                    MustBe <object, double>();
                }
                else
                {
                    Assert.Inconclusive("Unknown method: " + m);
                }
            });
 /// <summary>
 ///     Adds basic NotSoAutoMapper functionality.
 /// </summary>
 /// <param name="registrator">The registrator.</param>
 public static void RegisterNotSoAutoMapper(this IRegistrator registrator) =>
 NotSoAutoMapperIocContainerUtilities.AddNotSoAutoMapper(GetRegisterSingletonService(registrator));
 /// <summary>
 ///     Registers the mapper of the specified <paramref name="mapperType" /> to the specified
 ///     <see cref="IServiceCollection" />.
 /// </summary>
 /// <param name="services">The <see cref="IServiceCollection" /> to register with.</param>
 /// <param name="mapperType">The type of the mapper.</param>
 /// <returns>The original <see cref="IServiceCollection" />.</returns>
 public static IServiceCollection AddMapper(this IServiceCollection services, Type mapperType)
 {
     NotSoAutoMapperIocContainerUtilities.AddMapper(mapperType, GetRegisterSingletonService(services));
     return(services);
 }