using Admin.NET.Plugin.AiDOP.Infrastructure; using Admin.NET.Plugin.AiDOP.SmartOps; using Xunit; namespace Admin.NET.Plugin.AiDOP.Tests.SmartOps; public class KpiTargetContractTests { [Fact] public void KanbanSafeWhenTargetNull() { var e = AidopS4KpiMerge.Evaluate(80m, null, "higher_is_better"); Assert.Equal("yellow", e.Status); Assert.Null(e.RatioPercent); } [Fact] public void DemoImportEndpoint_IsIndependent() { var t = typeof(Admin.NET.Plugin.AiDOP.Controllers.AdoSmartOpsKpiMasterController); Assert.NotNull(t.GetMethod("ImportDemoData")); var targetCtl = typeof(Admin.NET.Plugin.AiDOP.Controllers.AdoSmartOpsKpiTargetController); Assert.Null(targetCtl.GetMethod("ImportDemoData")); } [Fact] public void SnapshotSource_IsNotConfigSource() { Assert.NotEqual(KpiTargetConfigSource.Manual, KpiTargetSnapshotSource.FormalFactory); Assert.Equal("FORMAL_FACTORY", KpiTargetSnapshotSource.FormalFactory); Assert.Equal("MANUAL", KpiTargetConfigSource.Manual); } [Fact] public void S1RefreshController_RequiresAuthorize() { var t = typeof(Admin.NET.Plugin.AiDOP.Controllers.AidopKanbanS1RefreshController); Assert.NotNull(Attribute.GetCustomAttribute(t, typeof(Microsoft.AspNetCore.Authorization.AuthorizeAttribute))); Assert.Null(Attribute.GetCustomAttribute(t, typeof(Microsoft.AspNetCore.Authorization.AllowAnonymousAttribute))); } }