using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.Extensions.Configuration;
using NeonSprawl.Server.Game.Skills;
namespace NeonSprawl.Server.Tests.Game.PositionState;
/// Integration host with bound from environment.
public sealed class PostgresWebApplicationFactory : WebApplicationFactory
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
var cs = Environment.GetEnvironmentVariable("ConnectionStrings__NeonSprawl");
PostgresDockerHelper.EnsurePostgresOrStartDockerBlocking(cs);
if (string.IsNullOrWhiteSpace(cs))
{
throw new InvalidOperationException(
"Set ConnectionStrings__NeonSprawl for Postgres integration tests (see server/README.md).");
}
var skillsDir = SkillCatalogPathResolution.TryDiscoverSkillsDirectory(AppContext.BaseDirectory)
?? throw new InvalidOperationException(
"Could not discover repo content/skills from AppContext.BaseDirectory; run tests from the neon-sprawl clone.");
builder.UseSetting("Content:SkillsDirectory", skillsDir);
builder.ConfigureAppConfiguration((_, config) =>
{
config.AddInMemoryCollection(new Dictionary
{
["ConnectionStrings:NeonSprawl"] = cs.Trim(),
});
});
}
}