Files
git.stella-ops.org/src/Remediation/__Tests/StellaOps.Remediation.WebService.Tests/TestEnvironmentScopes.cs

89 lines
3.1 KiB
C#

namespace StellaOps.Remediation.WebService.Tests;
[CollectionDefinition(Name, DisableParallelization = true)]
public sealed class RemediationEnvironmentCollection
{
public const string Name = "RemediationEnvironment";
}
internal sealed class RemediationEnvironmentScope : IDisposable
{
private static readonly string[] ManagedKeys =
[
"DOTNET_ENVIRONMENT",
"ASPNETCORE_ENVIRONMENT",
"REMEDIATION__STORAGE__DRIVER",
"REMEDIATION__STORAGE__POSTGRES__CONNECTIONSTRING",
"CONNECTIONSTRINGS__DEFAULT"
];
private readonly Dictionary<string, string?> _originalValues = new(StringComparer.Ordinal);
private RemediationEnvironmentScope()
{
foreach (var key in ManagedKeys)
{
_originalValues[key] = Environment.GetEnvironmentVariable(key);
}
}
public static RemediationEnvironmentScope InMemoryTestingProfile()
{
var scope = new RemediationEnvironmentScope();
scope.Set("DOTNET_ENVIRONMENT", "Testing");
scope.Set("ASPNETCORE_ENVIRONMENT", "Testing");
scope.Set("REMEDIATION__STORAGE__DRIVER", "inmemory");
scope.Set("REMEDIATION__STORAGE__POSTGRES__CONNECTIONSTRING", null);
scope.Set("CONNECTIONSTRINGS__DEFAULT", null);
return scope;
}
public static RemediationEnvironmentScope PostgresWithoutConnection(string environmentName)
{
var scope = new RemediationEnvironmentScope();
scope.Set("DOTNET_ENVIRONMENT", environmentName);
scope.Set("ASPNETCORE_ENVIRONMENT", environmentName);
scope.Set("REMEDIATION__STORAGE__DRIVER", "postgres");
scope.Set("REMEDIATION__STORAGE__POSTGRES__CONNECTIONSTRING", null);
scope.Set("CONNECTIONSTRINGS__DEFAULT", null);
return scope;
}
public static RemediationEnvironmentScope InMemoryDriver(string environmentName)
{
var scope = new RemediationEnvironmentScope();
scope.Set("DOTNET_ENVIRONMENT", environmentName);
scope.Set("ASPNETCORE_ENVIRONMENT", environmentName);
scope.Set("REMEDIATION__STORAGE__DRIVER", "inmemory");
scope.Set("REMEDIATION__STORAGE__POSTGRES__CONNECTIONSTRING", null);
scope.Set("CONNECTIONSTRINGS__DEFAULT", null);
return scope;
}
public static RemediationEnvironmentScope PostgresWithConnection(
string environmentName,
string connectionString)
{
var scope = new RemediationEnvironmentScope();
scope.Set("DOTNET_ENVIRONMENT", environmentName);
scope.Set("ASPNETCORE_ENVIRONMENT", environmentName);
scope.Set("REMEDIATION__STORAGE__DRIVER", "postgres");
scope.Set("REMEDIATION__STORAGE__POSTGRES__CONNECTIONSTRING", connectionString);
scope.Set("CONNECTIONSTRINGS__DEFAULT", connectionString);
return scope;
}
public void Dispose()
{
foreach (var entry in _originalValues)
{
Environment.SetEnvironmentVariable(entry.Key, entry.Value);
}
}
private void Set(string key, string? value)
{
Environment.SetEnvironmentVariable(key, value);
}
}