using Admin.NET.Plugin.AiDOP.DataPlatform.MdpRebuild; using Admin.NET.Plugin.AiDOP.DataPlatform.S1Refresh; using Admin.NET.Plugin.AiDOP.Job; using Admin.NET.Plugin.AiDOP.ProcurementExecution; using Admin.NET.Plugin.AiDOP.Production; using Admin.NET.Plugin.AiDOP.Supply; using Xunit; namespace Admin.NET.Plugin.AiDOP.Tests.DataPlatform; public class ModuleRebuildPipelineGuardTests { [Fact] public async Task S2_UnscopedRunFull_Throws() { var svc = new S2MdpSyncTransformService(null!, null!, null!, null!); var ex = await Assert.ThrowsAsync(() => svc.RunFullAsync()); Assert.Contains("作用域", ex.Message); } [Fact] public async Task S3_UnscopedRunFull_Throws() { var svc = new S3MdpSyncTransformService(null!, null!, null!, null!); var ex = await Assert.ThrowsAsync(() => svc.RunFullAsync()); Assert.Contains("作用域", ex.Message); } [Fact] public async Task S4_UnscopedRunFull_Throws() { var svc = new S4MdpSyncTransformService(null!, null!, null!); var ex = await Assert.ThrowsAsync(() => svc.RunFullAsync()); Assert.Contains("作用域", ex.Message); } [Fact] public void SnapshotModules_IncludeS9_ButRebuildDoesNot() { Assert.Contains("S9", MdpRebuildScope.SnapshotModules); Assert.DoesNotContain("S9", MdpRebuildScope.RebuildModules); Assert.DoesNotContain("S8", MdpRebuildScope.RebuildModules); Assert.DoesNotContain("S8", MdpRebuildScope.SnapshotModules); } [Fact] public void S1Scope_RejectsTenantAsFactory() { Assert.Throws(() => S1MdpRunScope.Create(797403760988229, 797403760988229)); } [Theory] [InlineData(null, true)] [InlineData("", true)] [InlineData("invalid", true)] [InlineData("true", true)] [InlineData("false", false)] public void MdpBootstrap_EnvironmentOverride_IsOptOut(string? raw, bool expected) { Assert.Equal(expected, SmartOpsKpiMdpBootstrapJob.IsBootstrapEnabled(raw)); } }