73 lines
2.7 KiB
C#
73 lines
2.7 KiB
C#
using CandyHouseDatabase;
|
|
using CandyHouseTests.Infrastructure;
|
|
using Microsoft.AspNetCore.Mvc.Testing;
|
|
using Microsoft.AspNetCore.TestHost;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Logging;
|
|
using Serilog;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Text.Json;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace CandyHouseTests.WebApiControllersTests;
|
|
|
|
internal class BaseWebApiControllerTest
|
|
{
|
|
private WebApplicationFactory<Program> _webApplication;
|
|
|
|
protected HttpClient HttpClient { get; private set; }
|
|
|
|
protected CandyHouseDbContext CandyHouseDbContext { get; private set; }
|
|
|
|
protected static readonly JsonSerializerOptions JsonSerializerOptions = new() { PropertyNameCaseInsensitive = true };
|
|
|
|
[OneTimeSetUp]
|
|
public void OneTimeSetUp()
|
|
{
|
|
_webApplication = new CustomWebApplicationFactory<Program>();
|
|
HttpClient = _webApplication
|
|
.WithWebHostBuilder(builder =>
|
|
{
|
|
builder.ConfigureTestServices(services =>
|
|
{
|
|
using var loggerFactory = new LoggerFactory();
|
|
loggerFactory.AddSerilog(new LoggerConfiguration()
|
|
.ReadFrom.Configuration(new ConfigurationBuilder()
|
|
.SetBasePath(Directory.GetCurrentDirectory())
|
|
.AddJsonFile("appsettings.json")
|
|
.Build())
|
|
.CreateLogger());
|
|
services.AddSingleton(loggerFactory);
|
|
});
|
|
})
|
|
.CreateClient();
|
|
|
|
var request = HttpClient.GetAsync("/login/user").GetAwaiter().GetResult();
|
|
var data = request.Content.ReadAsStringAsync().GetAwaiter().GetResult();
|
|
HttpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {data}");
|
|
|
|
CandyHouseDbContext = _webApplication.Services.GetRequiredService<CandyHouseDbContext>();
|
|
CandyHouseDbContext.Database.EnsureDeleted();
|
|
CandyHouseDbContext.Database.EnsureCreated();
|
|
}
|
|
|
|
[OneTimeTearDown]
|
|
public void OneTimeTearDown()
|
|
{
|
|
CandyHouseDbContext?.Database.EnsureDeleted();
|
|
CandyHouseDbContext?.Dispose();
|
|
HttpClient?.Dispose();
|
|
_webApplication?.Dispose();
|
|
}
|
|
|
|
protected static async Task<T?> GetModelFromResponseAsync<T>(HttpResponseMessage response) =>
|
|
JsonSerializer.Deserialize<T>(await response.Content.ReadAsStringAsync(), JsonSerializerOptions);
|
|
|
|
protected static StringContent MakeContent(object model) =>
|
|
new(JsonSerializer.Serialize(model), Encoding.UTF8, "application/json");
|
|
}
|