73 lines
2.8 KiB
C#
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);
|
||
|
|
}
|
||
|
|
}
|