原生接口:
GET/POST /api/admin/number-rules
GET /api/admin/workflows
PUT /api/admin/workflows/{businessType}
实现包括:
报名号规则预览、创建和更新
自动停用旧规则
审批流程步骤重建
班级、校级、超级管理员层级校验
考点及批量申领流程禁止班级审批
批量申领最终步骤强制为超级管理员
配置更新与审计日志事务提交
157 lines
6.0 KiB
C#
157 lines
6.0 KiB
C#
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<InvalidOperationException>(() =>
|
|
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<InvalidOperationException>(() =>
|
|
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<InvalidOperationException>(() =>
|
|
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");
|
|
}
|
|
|
|
private static void WithEnvironment(
|
|
string? nativeReadsEnabled,
|
|
string? nativeOrganizationWritesEnabled,
|
|
string? allowMemory,
|
|
Action test,
|
|
string? accountBatchesEnabled = null,
|
|
string? configurationEnabled = 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 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_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_ALLOW_MEMORY", previousAllowMemory);
|
|
}
|
|
}
|
|
}
|