using DocumentService.Client.Clients; using Microsoft.Extensions.Logging.Abstractions; using System.Reflection; namespace DocumentService.Tests.Live; /// /// Shared base for all live API tests. /// Uses the typed DocumentService.Client classes — no hardcoded routes. /// /// Live API: http://172.24.12.39:9393/ /// Override via LIVE_API_BASE_URL environment variable if needed. /// public abstract class LiveApiTestBase : IDisposable { public static readonly string BaseUrl = Environment.GetEnvironmentVariable("LIVE_API_BASE_URL") ?? "http://172.24.12.39:9393"; protected readonly HttpClient HttpClient; // Typed clients (route-free — routes live inside the client implementations) protected readonly PdfValidationClient ValidationClient; protected readonly PdfAttachmentClient AttachmentClient; protected readonly PdfOperationsClient OperationsClient; protected readonly SwissQrCodeClient QrCodeClient; protected LiveApiTestBase() { HttpClient = new HttpClient { BaseAddress = new Uri(BaseUrl) }; ValidationClient = new PdfValidationClient(HttpClient, NullLogger.Instance); AttachmentClient = new PdfAttachmentClient(HttpClient, NullLogger.Instance); OperationsClient = new PdfOperationsClient(HttpClient, NullLogger.Instance); QrCodeClient = new SwissQrCodeClient(HttpClient, NullLogger.Instance); } // ────────────────────────────────────────────────────────────── // Embedded-resource helpers // ────────────────────────────────────────────────────────────── protected static byte[] LoadPdfBytes(string fileName) { var assembly = Assembly.GetExecutingAssembly(); var resourceName = $"DocumentService.Tests.Live.TestData.Pdfs.{fileName}"; using var stream = assembly.GetManifestResourceStream(resourceName) ?? throw new FileNotFoundException( $"Embedded resource not found: '{resourceName}'. " + $"Available: {string.Join(", ", assembly.GetManifestResourceNames())}"); using var ms = new MemoryStream(); stream.CopyTo(ms); return ms.ToArray(); } protected static Stream LoadPdfStream(string fileName) { var bytes = LoadPdfBytes(fileName); return new MemoryStream(bytes); } public void Dispose() => HttpClient.Dispose(); }