namespace SuiteLink.Client.IntegrationTests; internal sealed record class IntegrationSettings( SuiteLinkConnectionOptions Connection, string? BooleanTag, string? IntegerTag, string? FloatTag, string? StringTag) { public static bool TryLoad(out IntegrationSettings settings, out string reason) { settings = null!; var enabled = Environment.GetEnvironmentVariable("SUITELINK_IT_ENABLED"); if (!string.Equals(enabled, "true", StringComparison.OrdinalIgnoreCase)) { reason = "Set SUITELINK_IT_ENABLED=true to run live integration tests."; return false; } if (!TryGetRequired("SUITELINK_IT_HOST", out var host, out reason) || !TryGetRequired("SUITELINK_IT_APPLICATION", out var application, out reason) || !TryGetRequired("SUITELINK_IT_TOPIC", out var topic, out reason) || !TryGetRequired("SUITELINK_IT_CLIENT_NAME", out var clientName, out reason) || !TryGetRequired("SUITELINK_IT_CLIENT_NODE", out var clientNode, out reason) || !TryGetRequired("SUITELINK_IT_USER_NAME", out var userName, out reason) || !TryGetRequired("SUITELINK_IT_SERVER_NODE", out var serverNode, out reason)) { return false; } var timezone = Environment.GetEnvironmentVariable("SUITELINK_IT_TIMEZONE"); var port = 5413; var portRaw = Environment.GetEnvironmentVariable("SUITELINK_IT_PORT"); if (!string.IsNullOrWhiteSpace(portRaw) && !int.TryParse(portRaw, out port)) { reason = "SUITELINK_IT_PORT must be a valid integer."; return false; } var connection = new SuiteLinkConnectionOptions( host: host, application: application, topic: topic, clientName: clientName, clientNode: clientNode, userName: userName, serverNode: serverNode, timezone: timezone, port: port); settings = new IntegrationSettings( Connection: connection, BooleanTag: Normalize(Environment.GetEnvironmentVariable("SUITELINK_IT_BOOL_TAG")), IntegerTag: Normalize(Environment.GetEnvironmentVariable("SUITELINK_IT_INT_TAG")), FloatTag: Normalize(Environment.GetEnvironmentVariable("SUITELINK_IT_FLOAT_TAG")), StringTag: Normalize(Environment.GetEnvironmentVariable("SUITELINK_IT_STRING_TAG"))); reason = string.Empty; return true; } private static string? Normalize(string? value) { return string.IsNullOrWhiteSpace(value) ? null : value; } private static bool TryGetRequired(string name, out string value, out string reason) { value = Environment.GetEnvironmentVariable(name) ?? string.Empty; if (!string.IsNullOrWhiteSpace(value)) { reason = string.Empty; return true; } reason = $"Missing required environment variable: {name}."; return false; } }