using MaksIT.Webapi;
using Microsoft.Extensions.Options;
namespace MaksIT.Webapi.Tests.Infrastructure;
///
/// Creates a disposable temp workspace and with valid auth and paths.
///
public sealed class WebApiTestFixture : IDisposable
{
public string Root { get; }
public string SettingsFilePath { get; }
public string CacheFolderPath { get; }
public IOptions AppOptions { get; }
public WebApiTestFixture()
{
Root = Path.Combine(Path.GetTempPath(), "maksit-webapi-tests-" + Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(Root);
SettingsFilePath = Path.Combine(Root, "settings.json");
CacheFolderPath = Path.Combine(Root, "cache");
Directory.CreateDirectory(CacheFolderPath);
var dataFolder = Path.Combine(Root, "data");
Directory.CreateDirectory(dataFolder);
var acmeFolder = Path.Combine(Root, "acme");
Directory.CreateDirectory(acmeFolder);
var configuration = new Configuration
{
Auth = new Auth
{
Secret = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
Issuer = "tests",
Audience = "tests",
Expiration = 60,
RefreshExpiration = 7,
Pepper = "test-pepper-value-for-unit-tests"
},
SettingsFile = SettingsFilePath,
Production = "https://acme-v02.api.letsencrypt.org/directory",
Staging = "https://acme-staging-v02.api.letsencrypt.org/directory",
CacheFolder = CacheFolderPath,
AcmeFolder = acmeFolder,
DataFolder = dataFolder,
Agent = new Agent
{
AgentHostname = "http://127.0.0.1",
AgentPort = 9,
AgentKey = "test-key",
ServiceToReload = "nginx"
}
};
AppOptions = Microsoft.Extensions.Options.Options.Create(configuration);
}
public void Dispose()
{
try
{
if (Directory.Exists(Root))
Directory.Delete(Root, recursive: true);
}
catch
{
// best-effort cleanup of temp dir
}
}
}