4 changed files with 112 additions and 18 deletions
@ -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()
|
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue