Test both dev and published apps

This commit is contained in:
Steve Sanderson 2017-09-06 12:14:26 +01:00
parent 7e8d48cd80
commit 9174ca79fa
7 changed files with 73 additions and 33 deletions

View File

@ -11,9 +11,12 @@ namespace Templates.Test
{ {
RunDotNetNew("web", targetFrameworkOverride); RunDotNetNew("web", targetFrameworkOverride);
using (var aspNetProcess = StartAspNetProcess(targetFrameworkOverride)) foreach (var publish in new[] { false, true })
{ {
aspNetProcess.AssertOk("/"); using (var aspNetProcess = StartAspNetProcess(targetFrameworkOverride, publish))
{
aspNetProcess.AssertOk("/");
}
} }
} }
} }

View File

@ -18,26 +18,45 @@ namespace Templates.Test.Helpers
private readonly Uri _listeningUri; private readonly Uri _listeningUri;
private readonly HttpClient _httpClient; private readonly HttpClient _httpClient;
public AspNetProcess(string workingDirectory, string projectName, string targetFrameworkOverride) public AspNetProcess(string workingDirectory, string projectName, string targetFrameworkOverride, bool publish)
{ {
_httpClient = new HttpClient(); _httpClient = new HttpClient();
var buildProcess = ProcessEx.Run(workingDirectory, "dotnet", "build --no-restore -c Debug"); var framework = string.IsNullOrEmpty(targetFrameworkOverride) ? DefaultFramework : targetFrameworkOverride;
buildProcess.WaitForExit(assertSuccess: true); if (publish)
{
ProcessEx
.Run(workingDirectory, "dotnet", "publish -c Release")
.WaitForExit(assertSuccess: true);
workingDirectory = Path.Combine(workingDirectory, "bin", "Release", framework, "publish");
}
else
{
ProcessEx
.Run(workingDirectory, "dotnet", "build --no-restore -c Debug")
.WaitForExit(assertSuccess: true);
}
var envVars = new Dictionary<string, string> var envVars = new Dictionary<string, string>
{ {
{ "ASPNETCORE_URLS", "http://127.0.0.1:0" } { "ASPNETCORE_URLS", "http://127.0.0.1:0" }
}; };
var framework = string.IsNullOrEmpty(targetFrameworkOverride) ? DefaultFramework : targetFrameworkOverride; if (!publish)
{
envVars["ASPNETCORE_ENVIRONMENT"] = "Development";
}
if (framework.StartsWith("netcore")) if (framework.StartsWith("netcore"))
{ {
_process = ProcessEx.Run(workingDirectory, "dotnet", $"exec bin/Debug/{framework}/{projectName}.dll", envVars: envVars); var dllPath = publish ? $"{projectName}.dll" : $"bin/Debug/{framework}/{projectName}.dll";
_process = ProcessEx.Run(workingDirectory, "dotnet", $"exec {dllPath}", envVars: envVars);
} }
else else
{ {
var exeFullPath = Path.Combine(workingDirectory, "bin", "Debug", framework, $"{projectName}.exe"); var exeFullPath = publish
? Path.Combine(workingDirectory, $"{projectName}.exe")
: Path.Combine(workingDirectory, "bin", "Debug", framework, $"{projectName}.exe");
_process = ProcessEx.Run(workingDirectory, exeFullPath, envVars: envVars); _process = ProcessEx.Run(workingDirectory, exeFullPath, envVars: envVars);
} }
@ -71,6 +90,7 @@ namespace Templates.Test.Helpers
public IWebDriver VisitInBrowser() public IWebDriver VisitInBrowser()
{ {
Console.WriteLine($"Opening browser at {_listeningUri}...");
var driver = WebDriverFactory.CreateWebDriver(); var driver = WebDriverFactory.CreateWebDriver();
driver.Navigate().GoToUrl(_listeningUri); driver.Navigate().GoToUrl(_listeningUri);
return driver; return driver;

View File

@ -105,9 +105,9 @@ namespace Templates.Test
return File.ReadAllText(Path.Combine(TemplateOutputDir, path)); return File.ReadAllText(Path.Combine(TemplateOutputDir, path));
} }
protected AspNetProcess StartAspNetProcess(string targetFrameworkOverride) protected AspNetProcess StartAspNetProcess(string targetFrameworkOverride, bool publish = false)
{ {
return new AspNetProcess(TemplateOutputDir, ProjectName, targetFrameworkOverride); return new AspNetProcess(TemplateOutputDir, ProjectName, targetFrameworkOverride, publish);
} }
public void Dispose() public void Dispose()

View File

@ -26,11 +26,14 @@ namespace Templates.Test
Assert.DoesNotContain("Microsoft.EntityFrameworkCore.Tools.DotNet", projectFileContents); Assert.DoesNotContain("Microsoft.EntityFrameworkCore.Tools.DotNet", projectFileContents);
Assert.DoesNotContain("Microsoft.Extensions.SecretManager.Tools", projectFileContents); Assert.DoesNotContain("Microsoft.Extensions.SecretManager.Tools", projectFileContents);
using (var aspNetProcess = StartAspNetProcess(targetFrameworkOverride)) foreach (var publish in new[] { false, true })
{ {
aspNetProcess.AssertOk("/"); using (var aspNetProcess = StartAspNetProcess(targetFrameworkOverride, publish))
aspNetProcess.AssertOk("/Home/About"); {
aspNetProcess.AssertOk("/Home/Contact"); aspNetProcess.AssertOk("/");
aspNetProcess.AssertOk("/Home/About");
aspNetProcess.AssertOk("/Home/Contact");
}
} }
} }
@ -52,11 +55,14 @@ namespace Templates.Test
Assert.Contains("Microsoft.EntityFrameworkCore.Tools.DotNet", projectFileContents); Assert.Contains("Microsoft.EntityFrameworkCore.Tools.DotNet", projectFileContents);
Assert.Contains("Microsoft.Extensions.SecretManager.Tools", projectFileContents); Assert.Contains("Microsoft.Extensions.SecretManager.Tools", projectFileContents);
using (var aspNetProcess = StartAspNetProcess(targetFrameworkOverride)) foreach (var publish in new[] { false, true })
{ {
aspNetProcess.AssertOk("/"); using (var aspNetProcess = StartAspNetProcess(targetFrameworkOverride, publish))
aspNetProcess.AssertOk("/Home/About"); {
aspNetProcess.AssertOk("/Home/Contact"); aspNetProcess.AssertOk("/");
aspNetProcess.AssertOk("/Home/About");
aspNetProcess.AssertOk("/Home/Contact");
}
} }
} }
} }

View File

@ -21,11 +21,14 @@ namespace Templates.Test
Assert.DoesNotContain("Microsoft.EntityFrameworkCore.Tools.DotNet", projectFileContents); Assert.DoesNotContain("Microsoft.EntityFrameworkCore.Tools.DotNet", projectFileContents);
Assert.DoesNotContain("Microsoft.Extensions.SecretManager.Tools", projectFileContents); Assert.DoesNotContain("Microsoft.Extensions.SecretManager.Tools", projectFileContents);
using (var aspNetProcess = StartAspNetProcess(targetFrameworkOverride)) foreach (var publish in new[] { false, true })
{ {
aspNetProcess.AssertOk("/"); using (var aspNetProcess = StartAspNetProcess(targetFrameworkOverride, publish))
aspNetProcess.AssertOk("/About"); {
aspNetProcess.AssertOk("/Contact"); aspNetProcess.AssertOk("/");
aspNetProcess.AssertOk("/About");
aspNetProcess.AssertOk("/Contact");
}
} }
} }
@ -46,11 +49,14 @@ namespace Templates.Test
Assert.Contains("Microsoft.EntityFrameworkCore.Tools.DotNet", projectFileContents); Assert.Contains("Microsoft.EntityFrameworkCore.Tools.DotNet", projectFileContents);
Assert.Contains("Microsoft.Extensions.SecretManager.Tools", projectFileContents); Assert.Contains("Microsoft.Extensions.SecretManager.Tools", projectFileContents);
using (var aspNetProcess = StartAspNetProcess(targetFrameworkOverride)) foreach (var publish in new[] { false, true })
{ {
aspNetProcess.AssertOk("/"); using (var aspNetProcess = StartAspNetProcess(targetFrameworkOverride, publish))
aspNetProcess.AssertOk("/About"); {
aspNetProcess.AssertOk("/Contact"); aspNetProcess.AssertOk("/");
aspNetProcess.AssertOk("/About");
aspNetProcess.AssertOk("/Contact");
}
} }
} }
} }

View File

@ -1,5 +1,4 @@
using OpenQA.Selenium; using OpenQA.Selenium;
using System;
using Templates.Test.Helpers; using Templates.Test.Helpers;
using Xunit; using Xunit;
@ -21,15 +20,18 @@ namespace Templates.Test
{ {
RunDotNetNew(template, targetFrameworkOverride); RunDotNetNew(template, targetFrameworkOverride);
RunNpmInstall(); RunNpmInstall();
TestApplication(targetFrameworkOverride, publish: false);
TestApplication(targetFrameworkOverride, publish: true);
}
using (var aspNetProcess = StartAspNetProcess(targetFrameworkOverride)) private void TestApplication(string targetFrameworkOverride, bool publish)
{
using (var aspNetProcess = StartAspNetProcess(targetFrameworkOverride, publish))
{ {
aspNetProcess.AssertOk("/"); aspNetProcess.AssertOk("/");
if (WebDriverFactory.HostSupportsBrowserAutomation) if (WebDriverFactory.HostSupportsBrowserAutomation)
{ {
Console.WriteLine("Starting browser automation tests...");
using (var browser = aspNetProcess.VisitInBrowser()) using (var browser = aspNetProcess.VisitInBrowser())
{ {
TestBasicNavigation(browser); TestBasicNavigation(browser);

View File

@ -11,10 +11,13 @@ namespace Templates.Test
{ {
RunDotNetNew("api", targetFrameworkOverride); RunDotNetNew("api", targetFrameworkOverride);
using (var aspNetProcess = StartAspNetProcess(targetFrameworkOverride)) foreach (var publish in new[] { false, true })
{ {
aspNetProcess.AssertOk("/api/values"); using (var aspNetProcess = StartAspNetProcess(targetFrameworkOverride, publish))
aspNetProcess.AssertNotFound("/"); {
aspNetProcess.AssertOk("/api/values");
aspNetProcess.AssertNotFound("/");
}
} }
} }
} }