From 769e6f208364be8ee54e4d5e67b1443ba1e57513 Mon Sep 17 00:00:00 2001 From: Christopher Demicoli Date: Sat, 13 Oct 2018 20:36:30 +0200 Subject: [PATCH] Added scraping Unit Test for #20 --- ...NewsletterCurator.HTMLScraper.Tests.csproj | 19 ++++++++++ .../UnitTests.cs | 37 +++++++++++++++++++ NewsletterCurator.sln | 6 +++ azure-pipelines.yml | 8 +++- 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 NewsletterCurator.HTMLScraper.Tests/NewsletterCurator.HTMLScraper.Tests.csproj create mode 100644 NewsletterCurator.HTMLScraper.Tests/UnitTests.cs diff --git a/NewsletterCurator.HTMLScraper.Tests/NewsletterCurator.HTMLScraper.Tests.csproj b/NewsletterCurator.HTMLScraper.Tests/NewsletterCurator.HTMLScraper.Tests.csproj new file mode 100644 index 00000000..e23668f0 --- /dev/null +++ b/NewsletterCurator.HTMLScraper.Tests/NewsletterCurator.HTMLScraper.Tests.csproj @@ -0,0 +1,19 @@ + + + + netcoreapp2.1 + + false + + + + + + + + + + + + + diff --git a/NewsletterCurator.HTMLScraper.Tests/UnitTests.cs b/NewsletterCurator.HTMLScraper.Tests/UnitTests.cs new file mode 100644 index 00000000..1a4c043e --- /dev/null +++ b/NewsletterCurator.HTMLScraper.Tests/UnitTests.cs @@ -0,0 +1,37 @@ +using System.Net.Http; +using System.Threading.Tasks; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace NewsletterCurator.HTMLScraper.Tests +{ + [TestClass] + public class UnitTests + { + private readonly HttpClient httpClient; + + public UnitTests() + { + httpClient = new HttpClient(new HttpClientHandler + { + AutomaticDecompression = System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate | System.Net.DecompressionMethods.None + }); + httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"); + httpClient.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); + httpClient.DefaultRequestHeaders.Add("Accept-Language", "en-US,en;q=0.9"); + + + } + + [TestMethod] + public async Task ScrapeCdemiBlog() + { + var scraperService = new HTMLScraperService(httpClient); + var urlMetaData = await scraperService.Scrape("https://blog.cdemi.io/whats-coming-in-c-8-0-nullable-reference-types/?src=NewsletterCuratorTest"); + + Assert.AreEqual(urlMetaData.CanonicalURL, "https://blog.cdemi.io/whats-coming-in-c-8-0-nullable-reference-types/"); + Assert.AreEqual(urlMetaData.Images.Count, 2); + Assert.AreEqual(urlMetaData.Summary, "One of the features being discussed for introduction in C# 8.0 is Nullable Reference Types. A proficient C# Developer might say \"What?! Aren't all reference types nullable?\" "); + Assert.AreEqual(urlMetaData.Title, "What's Coming in C# 8.0? Nullable Reference Types"); + } + } +} diff --git a/NewsletterCurator.sln b/NewsletterCurator.sln index cb218e5e..e38967c8 100644 --- a/NewsletterCurator.sln +++ b/NewsletterCurator.sln @@ -20,6 +20,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewsletterCurator.Data.SqlS EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NewsletterCurator.HTMLScraper", "NewsletterCurator.HTMLScraper\NewsletterCurator.HTMLScraper.csproj", "{F3D9D261-91B4-4B2B-B62E-CA696F141F4B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NewsletterCurator.HTMLScraper.Tests", "NewsletterCurator.HTMLScraper.Tests\NewsletterCurator.HTMLScraper.Tests.csproj", "{31F35EE2-DB0B-4301-B000-AE1D09C6BF55}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -42,6 +44,10 @@ Global {F3D9D261-91B4-4B2B-B62E-CA696F141F4B}.Debug|Any CPU.Build.0 = Debug|Any CPU {F3D9D261-91B4-4B2B-B62E-CA696F141F4B}.Release|Any CPU.ActiveCfg = Release|Any CPU {F3D9D261-91B4-4B2B-B62E-CA696F141F4B}.Release|Any CPU.Build.0 = Release|Any CPU + {31F35EE2-DB0B-4301-B000-AE1D09C6BF55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {31F35EE2-DB0B-4301-B000-AE1D09C6BF55}.Debug|Any CPU.Build.0 = Debug|Any CPU + {31F35EE2-DB0B-4301-B000-AE1D09C6BF55}.Release|Any CPU.ActiveCfg = Release|Any CPU + {31F35EE2-DB0B-4301-B000-AE1D09C6BF55}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 0edc1f4e..abc8cdf4 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -6,8 +6,14 @@ variables: steps: - script: dotnet build --configuration $(buildConfiguration) - displayName: dotnet build + displayName: dotnet build +- script: dotnet test NewsletterCurator.HTMLScraper.Tests --configuration $(buildConfiguration) --logger trx + displayName: dotnet test - script: dotnet publish --configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory) displayName: dotnet publish +- task: PublishTestResults@2 + inputs: + testRunner: VSTest + testResultsFiles: '**/*.trx' - task: PublishBuildArtifacts@1 displayName: Publishing Artifacts