* Moving Identity seeding to its own class and method. * Adding tests for AddItem * Added catalog api controller and functional tests Added and cleaned up some comments * Adding integration tests for OrderRepository * Getting integration test for order working with inmemory db
91 lines
3.3 KiB
C#
91 lines
3.3 KiB
C#
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;
|
|
using Microsoft.Extensions.Logging;
|
|
using Infrastructure.Data;
|
|
using Infrastructure.Identity;
|
|
using Microsoft.AspNetCore.Identity;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
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)
|
|
.UseEnvironment("Testing")
|
|
.UseStartup<Startup>();
|
|
|
|
var server = new TestServer(builder);
|
|
|
|
// seed data
|
|
using (var scope = server.Host.Services.CreateScope())
|
|
{
|
|
var services = scope.ServiceProvider;
|
|
var loggerFactory = services.GetRequiredService<ILoggerFactory>();
|
|
var catalogContext = services.GetRequiredService<CatalogContext>();
|
|
CatalogContextSeed.SeedAsync(catalogContext, loggerFactory)
|
|
.Wait();
|
|
|
|
var userManager = services.GetRequiredService<UserManager<ApplicationUser>>();
|
|
AppIdentityDbContextSeed.SeedAsync(userManager).Wait();
|
|
}
|
|
|
|
return server.CreateClient();
|
|
}
|
|
|
|
/// <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}.");
|
|
}
|
|
|
|
}
|
|
}
|