using System.Runtime.CompilerServices; using System.Text.Json; using FruitBank.Common; namespace FruitBankHybrid.Shared.Tests; /// /// 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. /// 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."); } }