using Microsoft.AspNetCore.Builder;
using Server.WatchBody.Web;
using Server.WatchBody.Web.Config;
using Server.WatchBody.Web.Db;
using Xunit;
namespace Server.WatchBody.Web.Tests;
///
/// Общий экземпляр приложения для всех интеграционных тестов: тестовая
/// БД — docker watchbody-pg (порт 5433), данные идемпотентны по
/// фиксированным uuid/ключам.
///
public class TestApp : IDisposable
{
public const string IvanKey = "test-key-ivan-0001";
public const string PetrKey = "test-key-petr-0002";
public const string AnnaKey = "test-key-anna-0003";
private readonly WebApplication _app;
public HttpClient Client { get; }
public ServerConfig Config { get; }
public TestApp()
{
var configPath = Path.Combine(AppContext.BaseDirectory, "appsettings.test.json");
Config = ServerConfig.Load(configPath);
var cs = new PostgresConnectionString(Config.DbConnectionString);
WebAppStartup.Initialize(cs, Config);
var builder = WebApplication.CreateBuilder([]);
builder.WebHost.UseSetting("urls", "http://127.0.0.1:0");
_app = WebAppStartup.Build(builder, Config, cs);
_app.StartAsync().Wait();
var url = _app.Urls.First(u => u.StartsWith("http://"));
Client = new HttpClient { BaseAddress = new Uri(url) };
}
public void Dispose()
{
Client.Dispose();
_app.StopAsync().Wait();
_app.DisposeAsync().AsTask().Wait();
}
}
[CollectionDefinition("web")]
public class WebTestCollection : ICollectionFixture;