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 _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); } }