Add MicCheck.Api.Tests.Integration project

NUnit integration tests that target a running API by URL and seed/clean
data directly in Postgres. Settings (BaseUrl, DbConnectionString) come
from .runsettings or environment variables so tests can be pointed at
any environment. HTTP requests live in HttpFiles/*.http; assertion
failures include a fresh DB snapshot of the relevant rows. First test
covers the flag-enabled path.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
James Wampler
2026-06-03 19:12:47 -07:00
parent d3b36956e4
commit 4621e8380b
11 changed files with 547 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
using NUnit.Framework;
namespace MicCheck.Api.Tests.Integration.Common;
public sealed record IntegrationTestSettings(string BaseUrl, string DbConnectionString, bool AcceptAnyServerCertificate)
{
public static IntegrationTestSettings Load()
{
var baseUrl = Resolve("BaseUrl", "MICCHECK_API_BASE_URL")
?? throw new InvalidOperationException(
"BaseUrl is not set. Provide it via .runsettings (TestRunParameters.BaseUrl) or the MICCHECK_API_BASE_URL environment variable.");
var connectionString = Resolve("DbConnectionString", "MICCHECK_DB_CONNECTION_STRING")
?? throw new InvalidOperationException(
"DbConnectionString is not set. Provide it via .runsettings (TestRunParameters.DbConnectionString) or the MICCHECK_DB_CONNECTION_STRING environment variable.");
var acceptAnyCert = bool.TryParse(
Resolve("AcceptAnyServerCertificate", "MICCHECK_ACCEPT_ANY_SERVER_CERTIFICATE"),
out var parsed) && parsed;
return new IntegrationTestSettings(baseUrl.TrimEnd('/'), connectionString, acceptAnyCert);
}
private static string? Resolve(string runSettingsParameter, string environmentVariable)
{
var fromEnv = System.Environment.GetEnvironmentVariable(environmentVariable);
if (!string.IsNullOrWhiteSpace(fromEnv))
return fromEnv;
var fromRunSettings = TestContext.Parameters.Get(runSettingsParameter);
return string.IsNullOrWhiteSpace(fromRunSettings) ? null : fromRunSettings;
}
}