public void ConfigureOptions_Succeeds()
        {
            var services = new ServiceCollection();
            var builder  = new GenericSearchServicesBuilder(services);

            builder.ConfigureOptions(x =>
            {
                x.ListActionName            = "List";
                x.DefaultPage               = 10;
                x.DefaultRows               = 100;
                x.PagePropertyName          = "CurrentPage";
                x.RowsPropertyName          = "CurrentRows";
                x.SortColumnPropertyName    = "Sortx";
                x.SortDirectionPropertyName = "Sortd";
                x.SortDirection             = Direction.Descending;
                x.PostRedirectGetEnabled    = false;
                x.TransferValuesEnabled     = false;
            });

            var provider = services.BuildServiceProvider();

            var options = provider.GetService <IOptions <GenericSearchOptions> >();

            options.Value.ListActionName.Should().Be("List");
            options.Value.DefaultPage.Should().Be(10);
            options.Value.DefaultRows.Should().Be(100);
            options.Value.PagePropertyName.Should().Be("CurrentPage");
            options.Value.RowsPropertyName.Should().Be("CurrentRows");
            options.Value.SortColumnPropertyName.Should().Be("Sortx");
            options.Value.SortDirectionPropertyName.Should().Be("Sortd");
            options.Value.SortDirection.Should().Be(Direction.Descending);
            options.Value.PostRedirectGetEnabled.Should().BeFalse();
            options.Value.TransferValuesEnabled.Should().BeFalse();
        }
            public AddDefaultActivators()
            {
                var services = new ServiceCollection();
                var builder  = new GenericSearchServicesBuilder(services);

                builder.AddDefaultActivators();
                provider = services.BuildServiceProvider().CreateScope().ServiceProvider;
            }
        public void AddSearchActivator_Duplicate_Throws()
        {
            var services = new ServiceCollection();

            var builder = new GenericSearchServicesBuilder(services);

            builder.Invoking(x => x.AddSearchActivator <ActivatorBar>())
            .Should()
            .ThrowExactly <ArgumentException>();
        }
        public static IGenericSearchServicesBuilder AddGenericSearch(this IServiceCollection services, params Assembly[] assemblies)
        {
            var builder = new GenericSearchServicesBuilder(services);

            foreach (var assembly in assemblies)
            {
                builder.AddProfilesFromAssembly(assembly);
            }

            return(builder);
        }
        public void AddProfilesFromAssemblyOf_T_Succeeds()
        {
            var services = new ServiceCollection();

            var builder = new GenericSearchServicesBuilder(services);

            builder.AddProfilesFromAssemblyOf <ProfileBaz>();

            var service = services.Single(x => x.ServiceType == typeof(IListDefinitionSource));

            service.ImplementationType.Should().Be <ProfileBaz>();
        }
        public void ConfigureOptions_UseModelActivator_Generic_Succeeds()
        {
            var services = new ServiceCollection();
            var builder  = new GenericSearchServicesBuilder(services);

            builder.ConfigureOptions(x => x.UseModelActivator((sp, t) => Activator.CreateInstance(t)));

            var provider = services.BuildServiceProvider();
            var options  = provider.GetService <IOptions <GenericSearchOptions> >();

            options.Value.DefaultModelActivatorResolver.Should().NotBeNull();
        }
        public void ConfigureOptions_UseModelFactory_Type_Succeeds()
        {
            var services = new ServiceCollection();
            var builder  = new GenericSearchServicesBuilder(services);

            builder.ConfigureOptions(x => x.UseModelFactory(typeof(TestModelFactory)));

            var provider = services.BuildServiceProvider();
            var options  = provider.GetService <IOptions <GenericSearchOptions> >();

            options.Value.DefaultModelActivatorType.Should().Be <TestModelFactory>();
        }
        public void AddModelBinder_Executes_Once()
        {
            var services = new ServiceCollection();
            var builder  = new GenericSearchServicesBuilder(services);

            builder.AddModelBinder();

            var count = services.Count;

            builder.AddModelBinder();

            services.Count.Should().Be(count);
        }
        public void AddDefaultServices_Succeeds()
        {
            var services = new ServiceCollection();
            var builder  = new GenericSearchServicesBuilder(services);

            builder.AddDefaultServices();

            var provider = services.BuildServiceProvider();

            var configurationProvider = provider.GetService <IListConfigurationProvider>();

            configurationProvider.Should().NotBeNull();
        }
        public void ConfigureOptions_UseModelFactory_Type_Throws()
        {
            var services = new ServiceCollection();
            var builder  = new GenericSearchServicesBuilder(services);

            builder.ConfigureOptions(x => x.UseModelFactory(typeof(Request)));
            var provider = services.BuildServiceProvider();
            var options  = provider.GetService <IOptions <GenericSearchOptions> >();

            options.Invoking(x => x.Value)
            .Should()
            .ThrowExactly <ArgumentException>();
        }
        public void AddPostToGetRedirects_Executes_Once()
        {
            var services = new ServiceCollection();
            var builder  = new GenericSearchServicesBuilder(services);

            builder.AddTransferValuesActionFilter();

            var count = services.Count;

            builder.AddTransferValuesActionFilter();

            services.Count.Should().Be(count);
        }
        public void AddSearchActivator_Succeeds()
        {
            var services = new ServiceCollection();

            var builder = new GenericSearchServicesBuilder(services);

            builder.AddSearchActivator <ActivatorFoo>();

            var service = services.Single(x => x.ServiceType == typeof(ISearchActivator <TextSearch>));

            service.ServiceType.Should().Be(typeof(ISearchActivator <TextSearch>));
            service.ImplementationType.Should().Be(typeof(ActivatorFoo));
        }
        public void AddDefaultActivators_Executes_Once()
        {
            var services = new ServiceCollection();
            var builder  = new GenericSearchServicesBuilder(services);

            builder.AddDefaultActivators();

            var count = services.Count;

            builder.AddDefaultActivators();

            services.Count.Should().Be(count);
        }
        public void AddProfile_Profile_Succeeds()
        {
            var services = new ServiceCollection();

            var builder = new GenericSearchServicesBuilder(services);
            var profile = new ProfileBaz();

            builder.AddProfile(profile);

            var service = services.Single(x => x.ServiceType == typeof(IListDefinitionSource));

            service.ImplementationInstance.Should().Be(profile);
        }
        public void AddRequestFactory_Succeeds()
        {
            var services = new ServiceCollection();
            var builder  = new GenericSearchServicesBuilder(services);

            builder.AddDefaultActivators()
            .AddDefaultServices();
            builder.AddModelFactory <TestModelFactory>();

            var provider = services.BuildServiceProvider();

            var requestFactory = provider.CreateScope().ServiceProvider.GetRequiredService <IModelFactory>();

            requestFactory.Should().BeOfType <TestModelFactory>();
        }
        public void Configure_Succeeds()
        {
            var services = new ServiceCollection();
            var builder  = new GenericSearchServicesBuilder(services);

            builder.Configure(x =>
            {
                x.AddList <Request, Item, Result>();
            });

            var service = services.SingleOrDefault(x => x.ServiceType == typeof(IListDefinition));

            service.Should().NotBeNull();

            Debug.Assert(service != null, nameof(service) + " != null");
            service.Lifetime.Should().Be(ServiceLifetime.Singleton);
        }
        public static IGenericSearchServicesBuilder AddDefaultGenericSearch(this IServiceCollection services, Action <GenericSearchOptions> configureOptions, params Assembly[] assemblies)
        {
            var builder = new GenericSearchServicesBuilder(services)
                          .AddDefaultServices()
                          .AddDefaultActivators()
                          .AddModelBinder()
                          .AddTransferValuesActionFilter()
                          .AddPostRedirectGetActionFilter()
                          .ConfigureOptions(configureOptions);

            foreach (var assembly in assemblies)
            {
                builder.AddProfilesFromAssembly(assembly);
            }

            return(builder);
        }
        public void AddList_Succeeds()
        {
            var services = new ServiceCollection();
            var builder  = new GenericSearchServicesBuilder(services);

            builder.AddDefaultActivators()
            .AddDefaultServices();
            builder.AddList <Request, Item, Result>();

            var provider = services.BuildServiceProvider();

            var configurationProvider =
                provider.CreateScope().ServiceProvider.GetRequiredService <IListConfigurationProvider>();

            var configuration = configurationProvider.GetConfiguration(typeof(Request));

            configuration.Should().NotBeNull();
            configuration.ItemType.Should().Be <Item>();
            configuration.ResultType.Should().Be <Result>();
        }