Files
PIbd-23_Kadyshev_M.I_TwoFro…/TwoFromTheCasketContratcs/TwoFromTheCasketTest/WebApiControllersTests/BaseWebApiControllerTest.cs
2025-09-14 13:06:23 +04:00

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");
}
}