Exemple #1
0
        public void ShouldExtractItemResultDetailsFromGardenOrgWebPageSearchItem()
        {
            var data            = TestHelper.GetDataFile("gardenorg-search-result-details.html");
            var gardenOrgParser = new GardenOrgSearchResultDetailsParser();
            var itemResults     = gardenOrgParser.ParseData(data);

            Assert.NotNull(itemResults);
            Assert.NotEmpty(itemResults.PlantHabit);
            Assert.NotEmpty(itemResults.SunRequirements);
            Assert.NotEmpty(itemResults.Leaves);
            Assert.Equal("Herb/Forb", itemResults.PlantHabit[0]);
            Assert.Equal("Full Sun to Partial Shade", itemResults.SunRequirements[0]);
            Assert.Equal(2, itemResults.Leaves.Length);
            Assert.Equal("Unusual foliage color", itemResults.Leaves[0]);
            Assert.Equal("Fragrant", itemResults.Leaves[1]);
        }
Exemple #2
0
        public async Task StartAsync(string queryTerm)
        {
            // Get some search results.
            var content = await _commsProxy.GetExternalContentAsync($"https://{_host}/plants/search/text/?q={queryTerm}");

            //Note: use Polly or some retry mechanism here - try..catch for now
            try
            {
                _progress = 20;

                if (string.IsNullOrWhiteSpace(content))
                {
                    _progress = 100;
                    return;
                }
                var searchResultParser = new GardenOrgSearchResultsParser();
                var searchResults      = searchResultParser.ParseData(content);
                if (searchResults?.Count == 0 || searchResults.All(r => string.IsNullOrEmpty(r.Href)))
                {
                    _logger.LogWarning("No results from GardenOrg query or invalid results return using term [{0}]", queryTerm);
                    _progress = 100;
                    return;
                }
                _progress = 40;

                // 1. Pass search results into next component to make additional queries against GardenOrg to create a GardenOrgPlantItem for each result
                foreach (var result in searchResults)
                {
                    var detailContent = await _commsProxy.GetExternalContentAsync($"https://{_host}{result.Href}");

                    var parsedDetail = new GardenOrgSearchResultDetailsParser().ParseData(detailContent);
                    // TODO: Add to list of results to return
                }
                _progress = 80;

                // 2. Store results into storage
                _progress = 100;
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Problem querying GardenOrg site");
            }
        }