FruitBankHybridApp/FruitBankHybrid.Shared.Tests/TestEnvironment.cs

39 lines
1.8 KiB
C#

using System.Runtime.CompilerServices;
using System.Text.Json;
using FruitBank.Common;
namespace FruitBankHybrid.Shared.Tests;
/// <summary>
/// Assembly-szintű környezet-hidratálás: a BaseUrl a KANONIKUS FruitBankHybrid.Shared\appsettings.json-ból jön
/// (a csproj Content-linkje másolja a teszt-outputba) — ugyanaz az egy forrás, mint a hostoknál; nincs külön
/// teszt-config és nincs hardcode. Hiányzó fájl/kulcs → azonnali exception (fail fast), pontosan mint a hostoknál.
/// A PROD-védelem NEM itt van: azt a TestServerGuard adja, a szerver saját IsProdEnvironment() bevallása alapján.
/// </summary>
internal static class TestEnvironment
{
[ModuleInitializer]
internal static void Init()
{
var path = Path.Combine(AppContext.BaseDirectory, "appsettings.json");
if (!File.Exists(path))
throw new InvalidOperationException(
$"appsettings.json nem található a teszt-outputban ({path}) — a csproj Content-linkje másolja a FruitBankHybrid.Shared kanonikus fájlját.");
// A kanonikus appsettings kommenteket is tartalmaz → engedékeny parse.
using var doc = JsonDocument.Parse(File.ReadAllText(path),
new JsonDocumentOptions { CommentHandling = JsonCommentHandling.Skip, AllowTrailingCommas = true });
var baseUrl = doc.RootElement.TryGetProperty("AyCode", out var ayCode)
&& ayCode.TryGetProperty("Urls", out var urls)
&& urls.TryGetProperty("BaseUrl", out var url)
? url.GetString()
: null;
FruitBankConstClient.BaseUrl = baseUrl
?? throw new InvalidOperationException(
"Hiányzik az 'AyCode:Urls:BaseUrl' az appsettings-ből — a teszt-kliens hub-URL-je ebből származik.");
}
}