/// <summary>
 /// Initializes a new instance of the <see cref="T:R4RAPI.Controllers.ResourcesController"/> class.
 /// </summary>
 /// <param name="environment">Environment.</param>
 /// <param name="logger">Logger.</param>
 /// /// <param name="apiOptionsAccessor">API Options.</param>
 /// <param name="queryService">Query service.</param>
 /// <param name="aggService">Agg service.</param>
 /// <param name="urlHelper">URL helper.</param>
 public ResourcesController(
     IHostingEnvironment environment,
     ILogger <ResourcesController> logger,
     IOptions <R4RAPIOptions> apiOptionsAccessor,
     IResourceQueryService queryService,
     IResourceAggregationService aggService,
     IUrlHelper urlHelper)
 {
     _environment  = environment;
     _logger       = logger;
     _apiOptions   = apiOptionsAccessor.Value.IsValid() ? apiOptionsAccessor.Value : throw new Exception("R4RAPIOptions is misconfigured.");
     _queryService = queryService;
     _aggService   = aggService;
     _urlHelper    = urlHelper;
 }
        /// <summary>
        /// Helper method to create a mocked up CGBBIndexOptions object.
        /// </summary>
        /// <returns></returns>
        protected IOptions <R4RAPIOptions> GetMockConfig()
        {
            var options = new R4RAPIOptions
            {
                AliasName       = "r4r_v1",
                AvailableFacets = new Dictionary <string, R4RAPIOptions.FacetConfig> {
                    {
                        "toolTypes", new R4RAPIOptions.FacetConfig {
                            FilterName       = "toolTypes",
                            Label            = "Tool Types",
                            FacetType        = R4RAPIOptions.FacetTypes.Single,
                            IncludeInDefault = true
                        }
                    },
                    {
                        "toolSubtypes", new R4RAPIOptions.FacetConfig {
                            FilterName       = "toolSubtypes",
                            Label            = "Tool Sub-Types",
                            FacetType        = R4RAPIOptions.FacetTypes.Multiple,
                            IncludeInDefault = true,
                            RequiresFilter   = "toolTypes"
                        }
                    },
                    {
                        "researchAreas", new R4RAPIOptions.FacetConfig {
                            FilterName       = "researchAreas",
                            Label            = "Research Areas",
                            FacetType        = R4RAPIOptions.FacetTypes.Multiple,
                            IncludeInDefault = true
                        }
                    },
                    {
                        "researchTypes", new R4RAPIOptions.FacetConfig {
                            FilterName       = "researchTypes",
                            Label            = "Research Types",
                            FacetType        = R4RAPIOptions.FacetTypes.Multiple,
                            IncludeInDefault = true
                        }
                    },
                    {
                        "docs", new R4RAPIOptions.FacetConfig {
                            FilterName       = "docs",
                            Label            = "Division, Offices, and Centers",
                            FacetType        = R4RAPIOptions.FacetTypes.Multiple,
                            IncludeInDefault = false
                        }
                    }
                },
                AvailableFields = new string[]
                {
                    "id",
                    "title",
                    "website",
                    "body",
                    "description",
                    "toolTypes",
                    "researchAreas",
                    "researchTypes",
                    "resourceAccess",
                    "docs",
                    "pocs"
                },
                AvailableFullTextFields = new Dictionary <string, R4RAPIOptions.FullTextFieldConfig> {
                    {
                        "title", new R4RAPIOptions.FullTextFieldConfig {
                            FieldName  = "title._fulltext",
                            Boost      = 1,
                            MatchTypes = new string[] { "common", "match", "match_phrase" }
                        }
                    },
                    {
                        "body", new R4RAPIOptions.FullTextFieldConfig {
                            FieldName  = "body._fulltext",
                            Boost      = 1,
                            MatchTypes = new string[] { "common", "match", "match_phrase" }
                        }
                    },
                    {
                        "pocs.lastname", new R4RAPIOptions.FullTextFieldConfig {
                            FieldName  = "pocs.lastname._fulltext",
                            Boost      = 1,
                            MatchTypes = new string[] { "match" }
                        }
                    },
                    {
                        "pocs.firstname", new R4RAPIOptions.FullTextFieldConfig {
                            FieldName  = "pocs.firstname._fulltext",
                            Boost      = 1,
                            MatchTypes = new string[] { "match" }
                        }
                    },
                    {
                        "pocs.middlename", new R4RAPIOptions.FullTextFieldConfig {
                            FieldName  = "pocs.middlename._fulltext",
                            Boost      = 1,
                            MatchTypes = new string[] { "match" }
                        }
                    }
                }
            };

            Moq.Mock <IOptions <R4RAPIOptions> > config = new Mock <IOptions <R4RAPIOptions> >();
            config
            .SetupGet(o => o.Value)
            .Returns(options);

            return(config.Object);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="T:R4RAPI.Services.ESResourceServiceBase"/> class.
 /// </summary>
 /// <param name="client">An instance of a <see cref="T:Nest.ElasticClient"/>Client.</param>
 /// <param name="apiOptionsAccessor">API options accessor.</param>
 /// <param name="logger">Logger.</param>
 public ESResourceServiceBase(IElasticClient client, IOptions <R4RAPIOptions> apiOptionsAccessor, ILogger logger)
 {
     this._elasticClient = client;
     this._apiOptions    = apiOptionsAccessor.Value.IsValid() ? apiOptionsAccessor.Value : throw new Exception("R4RAPIOptions is misconfigured.");
     this._logger        = logger;
 }