using YZWater.Core.Models; namespace YZWater.Core.Tests.Models; /// /// 持续时间列的语义。 /// 报警历史里"测点读取失败""报警升级"这类记录是瞬时事件,没有恢复概念; /// 之前它们和真报警一样按 now-AlarmTime 累加,界面上显示成"31m+", /// 操作员看到一整屏在无限增长的"报警",于是问"这些是啥报警,确认又确认不了"。 /// 真报警的"进行中"计数必须保留,否则失联期间的报警看起来像已经结束。 /// public class AlarmDurationSemanticsTests { [Fact] public void DiaryRecord_WithoutConditionId_ShowsNoDuration() { var journal = new AlarmRecord { AlarmType = "Quality", AlarmMessage = "15 个测点读取失败", AlarmTime = DateTime.Now.AddMinutes(-30) }; journal.UpdateDurationText(); Assert.Equal("--", journal.DurationText); } [Fact] public void EscalationRecord_AlsoPointEvent_ShowsNoDuration() { var escalated = new AlarmRecord { AlarmType = "DI", AlarmMessage = "报警已升级", AlarmLevel = 4, AlarmTime = DateTime.Now.AddMinutes(-30) }; escalated.UpdateDurationText(); Assert.Equal("--", escalated.DurationText); } [Fact] public void ActiveAlarm_WithoutRecoverTime_StillCountsUp() { var alarm = new AlarmRecord { ConditionId = "DI_低液位报警", AlarmMessage = "低液位报警", AlarmTime = DateTime.Now.AddMinutes(-30) }; alarm.UpdateDurationText(); Assert.Contains("+", alarm.DurationText); } [Fact] public void RecoveredAlarm_ShowsElapsedSpan() { var start = DateTime.Now.AddMinutes(-5); var alarm = new AlarmRecord { ConditionId = "DI_低液位报警", AlarmTime = start, RecoverTime = start.AddSeconds(40) }; alarm.UpdateDurationText(); Assert.Equal("40s", alarm.DurationText); } }