AlarmDurationSemanticsTests.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using YZWater.Core.Models;
  2. namespace YZWater.Core.Tests.Models;
  3. /// <summary>
  4. /// 持续时间列的语义。
  5. /// 报警历史里"测点读取失败""报警升级"这类记录是瞬时事件,没有恢复概念;
  6. /// 之前它们和真报警一样按 now-AlarmTime 累加,界面上显示成"31m+",
  7. /// 操作员看到一整屏在无限增长的"报警",于是问"这些是啥报警,确认又确认不了"。
  8. /// 真报警的"进行中"计数必须保留,否则失联期间的报警看起来像已经结束。
  9. /// </summary>
  10. public class AlarmDurationSemanticsTests
  11. {
  12. [Fact]
  13. public void DiaryRecord_WithoutConditionId_ShowsNoDuration()
  14. {
  15. var journal = new AlarmRecord
  16. {
  17. AlarmType = "Quality",
  18. AlarmMessage = "15 个测点读取失败",
  19. AlarmTime = DateTime.Now.AddMinutes(-30)
  20. };
  21. journal.UpdateDurationText();
  22. Assert.Equal("--", journal.DurationText);
  23. }
  24. [Fact]
  25. public void EscalationRecord_AlsoPointEvent_ShowsNoDuration()
  26. {
  27. var escalated = new AlarmRecord
  28. {
  29. AlarmType = "DI",
  30. AlarmMessage = "报警已升级",
  31. AlarmLevel = 4,
  32. AlarmTime = DateTime.Now.AddMinutes(-30)
  33. };
  34. escalated.UpdateDurationText();
  35. Assert.Equal("--", escalated.DurationText);
  36. }
  37. [Fact]
  38. public void ActiveAlarm_WithoutRecoverTime_StillCountsUp()
  39. {
  40. var alarm = new AlarmRecord
  41. {
  42. ConditionId = "DI_低液位报警",
  43. AlarmMessage = "低液位报警",
  44. AlarmTime = DateTime.Now.AddMinutes(-30)
  45. };
  46. alarm.UpdateDurationText();
  47. Assert.Contains("+", alarm.DurationText);
  48. }
  49. [Fact]
  50. public void RecoveredAlarm_ShowsElapsedSpan()
  51. {
  52. var start = DateTime.Now.AddMinutes(-5);
  53. var alarm = new AlarmRecord
  54. {
  55. ConditionId = "DI_低液位报警",
  56. AlarmTime = start,
  57. RecoverTime = start.AddSeconds(40)
  58. };
  59. alarm.UpdateDurationText();
  60. Assert.Equal("40s", alarm.DurationText);
  61. }
  62. }