functional tests
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp1.1</TargetFramework>
|
<TargetFramework>netcoreapp1.1</TargetFramework>
|
||||||
@@ -8,6 +8,17 @@
|
|||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
|
||||||
<PackageReference Include="xunit" Version="2.2.0" />
|
<PackageReference Include="xunit" Version="2.2.0" />
|
||||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
|
<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="1.1.1" />
|
||||||
|
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\src\ApplicationCore\ApplicationCore.csproj" />
|
||||||
|
<ProjectReference Include="..\..\src\Web\Web.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
72
tests/FunctionalTests/Web/Controllers/BaseWebTest.cs
Normal file
72
tests/FunctionalTests/Web/Controllers/BaseWebTest.cs
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Reflection;
|
||||||
|
using Microsoft.Extensions.PlatformAbstractions;
|
||||||
|
using Microsoft.eShopWeb;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.AspNetCore.TestHost;
|
||||||
|
|
||||||
|
namespace FunctionalTests.Web.Controllers
|
||||||
|
{
|
||||||
|
public abstract class BaseWebTest
|
||||||
|
{
|
||||||
|
protected readonly HttpClient _client;
|
||||||
|
protected string _contentRoot;
|
||||||
|
|
||||||
|
public BaseWebTest()
|
||||||
|
{
|
||||||
|
_client = GetClient();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected HttpClient GetClient()
|
||||||
|
{
|
||||||
|
var startupAssembly = typeof(Startup).GetTypeInfo().Assembly;
|
||||||
|
_contentRoot = GetProjectPath("src", startupAssembly);
|
||||||
|
var builder = new WebHostBuilder()
|
||||||
|
.UseContentRoot(_contentRoot)
|
||||||
|
.UseStartup<Startup>();
|
||||||
|
|
||||||
|
var server = new TestServer(builder);
|
||||||
|
var client = server.CreateClient();
|
||||||
|
|
||||||
|
return client;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the full path to the target project path that we wish to test
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="solutionRelativePath">
|
||||||
|
/// The parent directory of the target project.
|
||||||
|
/// e.g. src, samples, test, or test/Websites
|
||||||
|
/// </param>
|
||||||
|
/// <param name="startupAssembly">The target project's assembly.</param>
|
||||||
|
/// <returns>The full path to the target project.</returns>
|
||||||
|
protected static string GetProjectPath(string solutionRelativePath, Assembly startupAssembly)
|
||||||
|
{
|
||||||
|
// Get name of the target project which we want to test
|
||||||
|
var projectName = startupAssembly.GetName().Name;
|
||||||
|
|
||||||
|
// Get currently executing test project path
|
||||||
|
var applicationBasePath = PlatformServices.Default.Application.ApplicationBasePath;
|
||||||
|
|
||||||
|
// Find the folder which contains the solution file. We then use this information to find the target
|
||||||
|
// project which we want to test.
|
||||||
|
var directoryInfo = new DirectoryInfo(applicationBasePath);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
var solutionFileInfo = new FileInfo(Path.Combine(directoryInfo.FullName, "eShopOnWeb.sln"));
|
||||||
|
if (solutionFileInfo.Exists)
|
||||||
|
{
|
||||||
|
return Path.GetFullPath(Path.Combine(directoryInfo.FullName, solutionRelativePath, projectName));
|
||||||
|
}
|
||||||
|
|
||||||
|
directoryInfo = directoryInfo.Parent;
|
||||||
|
}
|
||||||
|
while (directoryInfo.Parent != null);
|
||||||
|
|
||||||
|
throw new Exception($"Solution root could not be located using application root {applicationBasePath}.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
using System.IO;
|
||||||
|
using Xunit;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FunctionalTests.Web.Controllers
|
||||||
|
{
|
||||||
|
public class CatalogControllerGetImage : BaseWebTest
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public async Task ReturnsFileContentResultGivenValidId()
|
||||||
|
{
|
||||||
|
var testFilePath = Path.Combine(_contentRoot, "pics//1.png");
|
||||||
|
var expectedFileBytes = File.ReadAllBytes(testFilePath);
|
||||||
|
|
||||||
|
var response = await _client.GetAsync("/catalog/pic/1");
|
||||||
|
response.EnsureSuccessStatusCode();
|
||||||
|
var streamResponse = await response.Content.ReadAsStreamAsync();
|
||||||
|
byte[] byteResult;
|
||||||
|
using (var ms = new MemoryStream())
|
||||||
|
{
|
||||||
|
streamResponse.CopyTo(ms);
|
||||||
|
byteResult = ms.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
Assert.Equal(expectedFileBytes, byteResult);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
using Microsoft.eShopWeb.Controllers;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using Xunit;
|
|
||||||
|
|
||||||
namespace IntegrationTests.Web.Controllers
|
|
||||||
{
|
|
||||||
public class CatalogControllerGetImage
|
|
||||||
{
|
|
||||||
[Fact]
|
|
||||||
public void ReturnsFileContentResultGivenValidId()
|
|
||||||
{
|
|
||||||
//var controller = new CatalogController()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user