public void YahooSearchEngine_GetSearchResultsAsync_MultipleResults_HappyPath() { // arrange var searchTerm = "hello"; var urlSelector = "div.compTitle > h3.title > a"; var titleSelector = "div.compTitle > h3.title > a"; var captionSelector = "div.compText > p"; var searchResultSelector = "div.dd.algo"; var htmlParser = new AngleSharpHtmlParser(); var queryStringEncoder = new QueryStringEncoder(); var yahooEngineSearchSelector = new YahooSearchEngineSelector(urlSelector, titleSelector, captionSelector); var searchEngine = new SearchEngine(htmlParser, yahooEngineSearchSelector, queryStringEncoder, "https://uk.search.yahoo.com/search?p=", 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)); }
// 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); }); }
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>(); }