SSPC-Tester/SSPCTester.Tests/ProtectTestTests.cs
2026-07-02 21:38:25 +08:00

73 lines
2.8 KiB
C#

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<TestProgress>();
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.Measured, 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<TestProgress> handler) : IProgress<TestProgress>
{
public void Report(TestProgress value) => handler(value);
}
}