using Eis.Infrastructure.Administration; namespace Eis.Infrastructure.Tests.Administration; public sealed class AdminMigrationOptionsTests { [Fact] public void DisabledByDefault() { WithEnvironment(null, null, null, () => { var options = AdminMigrationOptions.FromEnvironment( configuredNativeReadsEnabled: false, authenticationNativeEnabled: false, sharesLegacySessions: false); Assert.False(options.NativeReadsEnabled); }); } [Fact] public void RequiresNativeAuthentication() { WithEnvironment("true", null, "true", () => { var exception = Assert.Throws(() => AdminMigrationOptions.FromEnvironment( configuredNativeReadsEnabled: false, authenticationNativeEnabled: false, sharesLegacySessions: false)); Assert.Contains("AUTH_NATIVE_ENABLED=true", exception.Message); }); } [Fact] public void RequiresSharedSessionsOutsideIsolatedTests() { WithEnvironment("true", null, null, () => { var exception = Assert.Throws(() => AdminMigrationOptions.FromEnvironment( configuredNativeReadsEnabled: false, authenticationNativeEnabled: true, sharesLegacySessions: false)); Assert.Contains("Redis", exception.Message); }); } [Fact] public void AllowsSharedRedisSessions() { WithEnvironment("true", null, null, () => { var options = AdminMigrationOptions.FromEnvironment( configuredNativeReadsEnabled: false, authenticationNativeEnabled: true, sharesLegacySessions: true); Assert.True(options.NativeReadsEnabled); }); } [Fact] public void OrganizationWritesRequireNativeReads() { WithEnvironment("false", "true", null, () => { var exception = Assert.Throws(() => AdminMigrationOptions.FromEnvironment( configuredNativeReadsEnabled: false, authenticationNativeEnabled: true, sharesLegacySessions: true)); Assert.Contains("ADMIN_NATIVE_READS_ENABLED=true", exception.Message); }); } [Fact] public void EnablesOrganizationWritesWithReadsAndSharedSessions() { WithEnvironment("true", "true", null, () => { var options = AdminMigrationOptions.FromEnvironment( configuredNativeReadsEnabled: false, authenticationNativeEnabled: true, sharesLegacySessions: true); Assert.True(options.NativeReadsEnabled); Assert.True(options.NativeOrganizationWritesEnabled); }); } [Fact] public void EnablesAccountBatchesWithReadsAndSharedSessions() { WithEnvironment("true", null, null, () => { var options = AdminMigrationOptions.FromEnvironment( configuredNativeReadsEnabled: false, authenticationNativeEnabled: true, sharesLegacySessions: true); Assert.True(options.NativeReadsEnabled); Assert.True(options.NativeAccountBatchesEnabled); }, accountBatchesEnabled: "true"); } [Fact] public void EnablesAdminConfigurationWithReadsAndSharedSessions() { WithEnvironment("true", null, null, () => { var options = AdminMigrationOptions.FromEnvironment( configuredNativeReadsEnabled: false, authenticationNativeEnabled: true, sharesLegacySessions: true); Assert.True(options.NativeReadsEnabled); Assert.True(options.NativeConfigurationEnabled); }, configurationEnabled: "true"); } [Fact] public void EnablesNoticeManagementWithReadsAndSharedSessions() { WithEnvironment("true", null, null, () => { var options = AdminMigrationOptions.FromEnvironment( configuredNativeReadsEnabled: false, authenticationNativeEnabled: true, sharesLegacySessions: true); Assert.True(options.NativeReadsEnabled); Assert.True(options.NativeNoticeManagementEnabled); }, noticeManagementEnabled: "true"); } [Fact] public void AcceptsLegacyNoticeWritesEnvironmentVariable() { WithEnvironment("true", null, null, () => { var options = AdminMigrationOptions.FromEnvironment( configuredNativeReadsEnabled: false, authenticationNativeEnabled: true, sharesLegacySessions: true); Assert.True(options.NativeNoticeManagementEnabled); }, legacyNoticeWritesEnabled: "true"); } [Fact] public void EnablesCentersWithReadsAndSharedSessions() { WithEnvironment("true", null, null, () => { var options = AdminMigrationOptions.FromEnvironment( configuredNativeReadsEnabled: false, authenticationNativeEnabled: true, sharesLegacySessions: true); Assert.True(options.NativeReadsEnabled); Assert.True(options.NativeCentersEnabled); }, centersEnabled: "true"); } private static void WithEnvironment( string? nativeReadsEnabled, string? nativeOrganizationWritesEnabled, string? allowMemory, Action test, string? accountBatchesEnabled = null, string? configurationEnabled = null, string? noticeManagementEnabled = null, string? legacyNoticeWritesEnabled = null, string? centersEnabled = null) { var previousNativeReadsEnabled = Environment.GetEnvironmentVariable("ADMIN_NATIVE_READS_ENABLED"); var previousNativeOrganizationWritesEnabled = Environment.GetEnvironmentVariable("ADMIN_NATIVE_ORGANIZATION_WRITES_ENABLED"); var previousAccountBatchesEnabled = Environment.GetEnvironmentVariable("ADMIN_NATIVE_ACCOUNT_BATCHES_ENABLED"); var previousConfigurationEnabled = Environment.GetEnvironmentVariable("ADMIN_NATIVE_CONFIGURATION_ENABLED"); var previousNoticeManagementEnabled = Environment.GetEnvironmentVariable("ADMIN_NATIVE_NOTICE_MANAGEMENT_ENABLED"); var previousLegacyNoticeWritesEnabled = Environment.GetEnvironmentVariable("ADMIN_NATIVE_NOTICE_WRITES_ENABLED"); var previousCentersEnabled = Environment.GetEnvironmentVariable("ADMIN_NATIVE_CENTERS_ENABLED"); var previousAllowMemory = Environment.GetEnvironmentVariable("ADMIN_NATIVE_ALLOW_MEMORY"); try { Environment.SetEnvironmentVariable("ADMIN_NATIVE_READS_ENABLED", nativeReadsEnabled); Environment.SetEnvironmentVariable("ADMIN_NATIVE_ORGANIZATION_WRITES_ENABLED", nativeOrganizationWritesEnabled); Environment.SetEnvironmentVariable("ADMIN_NATIVE_ACCOUNT_BATCHES_ENABLED", accountBatchesEnabled); Environment.SetEnvironmentVariable("ADMIN_NATIVE_CONFIGURATION_ENABLED", configurationEnabled); Environment.SetEnvironmentVariable("ADMIN_NATIVE_NOTICE_MANAGEMENT_ENABLED", noticeManagementEnabled); Environment.SetEnvironmentVariable("ADMIN_NATIVE_NOTICE_WRITES_ENABLED", legacyNoticeWritesEnabled); Environment.SetEnvironmentVariable("ADMIN_NATIVE_CENTERS_ENABLED", centersEnabled); Environment.SetEnvironmentVariable("ADMIN_NATIVE_ALLOW_MEMORY", allowMemory); test(); } finally { Environment.SetEnvironmentVariable("ADMIN_NATIVE_READS_ENABLED", previousNativeReadsEnabled); Environment.SetEnvironmentVariable("ADMIN_NATIVE_ORGANIZATION_WRITES_ENABLED", previousNativeOrganizationWritesEnabled); Environment.SetEnvironmentVariable("ADMIN_NATIVE_ACCOUNT_BATCHES_ENABLED", previousAccountBatchesEnabled); Environment.SetEnvironmentVariable("ADMIN_NATIVE_CONFIGURATION_ENABLED", previousConfigurationEnabled); Environment.SetEnvironmentVariable("ADMIN_NATIVE_NOTICE_MANAGEMENT_ENABLED", previousNoticeManagementEnabled); Environment.SetEnvironmentVariable("ADMIN_NATIVE_NOTICE_WRITES_ENABLED", previousLegacyNoticeWritesEnabled); Environment.SetEnvironmentVariable("ADMIN_NATIVE_CENTERS_ENABLED", previousCentersEnabled); Environment.SetEnvironmentVariable("ADMIN_NATIVE_ALLOW_MEMORY", previousAllowMemory); } } }