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 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 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 CreateFilter_Succeeds()
        {
            var services = new ServiceCollection();
            var builder  = new GenericSearchServicesBuilder(services);

            builder.AddDefaultActivators()
            .AddDefaultServices();
            builder.ConfigureOptions(x => x.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>();
        }