Beispiel #1
0
        public void BingSearchEngine_GetSearchResultsAsync_MultipleResults_HappyPath()
        {
            // arrange
            var searchTerm = "hello";

            var urlSelector          = "h2 > a";
            var titleSelector        = "h2 > a";
            var captionSelector      = "div.b_caption > p";
            var searchResultSelector = "li.b_algo";

            var htmlParserMock     = new AngleSharpHtmlParser();
            var queryStringEncoder = new QueryStringEncoder();

            var bingEngineSearchSelector = new BingSearchEngineSelector(urlSelector, titleSelector, captionSelector);

            var searchEngine = new SearchEngine(htmlParserMock,
                                                bingEngineSearchSelector,
                                                queryStringEncoder,
                                                "https://www.bing.com/search?q=",
                                                searchResultSelector);

            // act
            var results = searchEngine.GetSearchResults(searchTerm);

            // assert
            Assert.IsNotNull(results);
            Assert.IsTrue(results.Count() > 1);
            Assert.IsTrue(!String.IsNullOrEmpty(results.First().Url));
            Assert.IsTrue(!String.IsNullOrEmpty(results.First().Title));
        }
Beispiel #2
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddCors();
            services.AddMediatR(Assembly.GetExecutingAssembly(),
                                Assembly.GetAssembly(typeof(GetSearchResultsQueryHandler)));

            services.AddSingleton <IQueryStringEncoder, QueryStringEncoder>();
            services.AddSingleton <IAngleSharpHtmlParser, AngleSharpHtmlParser>();
            services.AddSingleton <IValidator <string>, SearchTermValidator>();
            services.AddSingleton <Microsoft.Extensions.Caching.Memory.IMemoryCache, Microsoft.Extensions.Caching.Memory.MemoryCache>();
            services.AddSingleton <ICacheWrapper, CacheWrapper>();

            var provider           = services.BuildServiceProvider();
            var htmlParser         = provider.GetService <IAngleSharpHtmlParser>();
            var queryStringEncoder = provider.GetService <IQueryStringEncoder>();

            var bingSelector = new BingSearchEngineSelector(Configuration.GetValue <string>("BingUrlSelector"),
                                                            Configuration.GetValue <string>("BingTitleSelector"),
                                                            Configuration.GetValue <string>("BingCaptionSelector"));

            var yahooSelector = new YahooSearchEngineSelector(Configuration.GetValue <string>("YahooUrlSelector"),
                                                              Configuration.GetValue <string>("YahooTitleSelector"),
                                                              Configuration.GetValue <string>("YahooCaptionSelector"));

            // Bing search
            services.AddSingleton <ISearchEngine>(new SearchEngine(htmlParser,
                                                                   bingSelector,
                                                                   queryStringEncoder,
                                                                   Configuration.GetValue <string>("BingUrl"),
                                                                   Configuration.GetValue <string>("BingSearchResultSelector")
                                                                   ));

            // Yahoo search
            services.AddSingleton <ISearchEngine>(new SearchEngine(htmlParser,
                                                                   yahooSelector,
                                                                   queryStringEncoder,
                                                                   Configuration.GetValue <string>("YahooUrl"),
                                                                   Configuration.GetValue <string>("YahooSearchResultSelector")));


            services.AddSwaggerGen(c => {
                c.SwaggerDoc("v1", new OpenApiInfo
                {
                    Version     = "v1",
                    Title       = "Blackdot Search API",
                    Description = "A meta search engine for investigation searches",
                    Contact     = new OpenApiContact
                    {
                        Name  = "Lee Walton",
                        Email = "*****@*****.**",
                        Url   = new Uri("http://kitedeveloper.blogspot.com/"),
                    }
                });

                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                c.IncludeXmlComments(xmlPath);
            });
        }
Beispiel #3
0
        public void Init()
        {
            var config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();

            IServiceCollection services = new ServiceCollection();

            services.AddSingleton <IAngleSharpHtmlParser, AngleSharpHtmlParser>();
            services.AddSingleton <IQueryStringEncoder, QueryStringEncoder>();

            var provider           = services.BuildServiceProvider();
            var htmlParser         = provider.GetService <IAngleSharpHtmlParser>();
            var queryStringEncoder = provider.GetService <IQueryStringEncoder>();

            var bingSelector = new BingSearchEngineSelector(config.GetValue <string>("BingUrlSelector"),
                                                            config.GetValue <string>("BingTitleSelector"),
                                                            config.GetValue <string>("BingCaptionSelector"));

            var yahooSelector = new YahooSearchEngineSelector(config.GetValue <string>("YahooUrlSelector"),
                                                              config.GetValue <string>("YahooTitleSelector"),
                                                              config.GetValue <string>("YahooCaptionSelector"));

            // Bing search
            services.AddSingleton <ISearchEngine>(new SearchEngine(htmlParser,
                                                                   bingSelector,
                                                                   queryStringEncoder,
                                                                   config.GetValue <string>("BingUrl"),
                                                                   config.GetValue <string>("BingSearchResultSelector")
                                                                   ));

            // Yahoo search
            services.AddSingleton <ISearchEngine>(new SearchEngine(htmlParser,
                                                                   yahooSelector,
                                                                   queryStringEncoder,
                                                                   config.GetValue <string>("YahooUrl"),
                                                                   config.GetValue <string>("YahooSearchResultSelector")));

            services.AddMediatR(Assembly.GetExecutingAssembly(),
                                Assembly.GetAssembly(typeof(GetSearchResultsQueryHandler)));

            services.AddSingleton <IValidator <string>, SearchTermValidator>();

            provider      = services.BuildServiceProvider();
            this.mediator = provider.GetService <IMediator>();
        }