using SSPCTester.Logic.Models; using SSPCTester.Logic.Testing; namespace SSPCTester.Tests; public sealed class ProtectTestTests { [Fact] public async Task ProtectTest_EnsuresSixProtectionRowsAndRefreshesMeasuredValues() { var project = new Project(); project.PowerResults.Add(new PowerLossRow { Vin = 28.193, Iin = 1.049, Status = TestStatus.Pass }); var progress = new List(); var context = new TestContext(project, null!, null!, null!, null!); await new ProtectTest().RunAsync(context, new InlineProgress(progress.Add), CancellationToken.None); Assert.Equal(6, project.ProtectResults.Count); Assert.Collection(project.ProtectResults, row => AssertProtection(row, 1, "跳闸", "1.5×额定电流", "1.049 A"), row => AssertProtection(row, 2, "短路", "输出短路", "----"), row => AssertProtection(row, 3, "过温", "≥85℃", "----"), row => AssertProtection(row, 4, "过压", "≥32V", "28.193 V"), row => AssertProtection(row, 5, "欠压", "≤22V", "28.193 V"), row => AssertProtection(row, 6, "限流", "≥1.2A", "1.049 A")); Assert.All(project.ProtectResults, row => Assert.Equal(TestStatus.Untested, row.Status)); Assert.Contains(progress, x => x.ModuleName == ProtectTest.ModuleName); } [Fact] public async Task ProtectTest_PreservesEditedTriggerAndMeasuredValue() { var project = new Project(); project.ProtectResults.Add(new ProtectRow { ProtectType = "跳闸", Trigger = "用户触发条件", MeasuredValue = "1.234 A", JudgeMode = ProtectTestPlan.ManualJudgeMode, Status = TestStatus.Pass }); var context = new TestContext(project, null!, null!, null!, null!); await new ProtectTest().RunAsync(context, new InlineProgress(_ => { }), CancellationToken.None); var trip = project.ProtectResults.Single(x => x.ProtectType == "跳闸"); Assert.Equal("用户触发条件", trip.Trigger); Assert.Equal("1.234 A", trip.MeasuredValue); Assert.Equal(TestStatus.Pass, trip.Status); } private static void AssertProtection(ProtectRow row, int index, string type, string trigger, string measured) { Assert.Equal(index, row.Index); Assert.Equal(type, row.ProtectType); Assert.Equal(trigger, row.Trigger); Assert.Equal(measured, row.MeasuredValue); Assert.Equal(ProtectTestPlan.ManualJudgeMode, row.JudgeMode); } private sealed class InlineProgress(Action handler) : IProgress { public void Report(TestProgress value) => handler(value); } }