82 lines
3.0 KiB
C#
82 lines
3.0 KiB
C#
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;
|
|
}
|
|
}
|