75 lines
2.7 KiB
C#
75 lines
2.7 KiB
C#
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.Text;
|
|
using System.Text.Json;
|
|
using TwoFromTheCasketDatabase;
|
|
using TwoFromTheCasketTest.Infrastructure;
|
|
using Microsoft.AspNetCore.Localization;
|
|
|
|
namespace TwoFromTheCasketTest.WebApiControllersTests;
|
|
|
|
internal class BaseWebApiControllerTest
|
|
{
|
|
protected static readonly JsonSerializerOptions
|
|
JsonSerializerOptions = new() { PropertyNameCaseInsensitive = true };
|
|
|
|
private WebApplicationFactory<Program> _webApplication;
|
|
|
|
protected HttpClient HttpClient { get; private set; }
|
|
|
|
protected TwoFromTheCasketDbContext TwoFromTheCasketDbContext { get; private set; }
|
|
|
|
[OneTimeSetUp]
|
|
public void OneTimeSetUp()
|
|
{
|
|
_webApplication = new CustomWebApplicationFactory<Program>();
|
|
HttpClient = _webApplication
|
|
.WithWebHostBuilder(builder =>
|
|
{
|
|
builder.ConfigureTestServices(services =>
|
|
{
|
|
using var loggerFactory = new LoggerFactory();
|
|
loggerFactory.AddSerilog(new Serilog.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}");
|
|
|
|
TwoFromTheCasketDbContext = _webApplication.Services.GetRequiredService<TwoFromTheCasketDbContext>();
|
|
TwoFromTheCasketDbContext.Database.EnsureDeleted();
|
|
TwoFromTheCasketDbContext.Database.EnsureCreated();
|
|
}
|
|
|
|
[OneTimeTearDown]
|
|
public void OneTimeTearDown()
|
|
{
|
|
TwoFromTheCasketDbContext?.Database.EnsureDeleted();
|
|
TwoFromTheCasketDbContext?.Dispose();
|
|
HttpClient?.Dispose();
|
|
_webApplication?.Dispose();
|
|
}
|
|
|
|
protected static async Task<T?> GetModelFromResponseAsync<T>(HttpResponseMessage response)
|
|
{
|
|
return JsonSerializer.Deserialize<T>(await response.Content.ReadAsStringAsync(), JsonSerializerOptions);
|
|
}
|
|
|
|
protected static StringContent MakeContent(object model)
|
|
{
|
|
return new StringContent(JsonSerializer.Serialize(model), Encoding.UTF8, "application/json");
|
|
}
|
|
}
|