AutoControlIntegrationTests.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. using Xunit;
  2. using YZWater.Core.Models;
  3. using YZWater.Core.Services;
  4. namespace YZWater.Core.Tests.Services;
  5. /// <summary>
  6. /// 自动控制服务集成测试
  7. /// 使用 MockPlcService 模拟 PLC 数据
  8. /// </summary>
  9. public class AutoControlIntegrationTests
  10. {
  11. [Fact]
  12. public void AutoControlService_ShouldBeCreated()
  13. {
  14. var service = AutoControlService.Instance;
  15. Assert.NotNull(service);
  16. }
  17. [Fact]
  18. public void AutoControlService_DefaultSettings()
  19. {
  20. var service = AutoControlService.Instance;
  21. Assert.True(service.IsEnabled);
  22. Assert.Equal(60, service.MinIntervalSeconds);
  23. Assert.Equal(3, service.StartDelaySeconds);
  24. Assert.Equal(5, service.StopDelaySeconds);
  25. Assert.True(service.EnablePumpRotation);
  26. }
  27. [Fact]
  28. public void AutoControlService_CanToggleEnabled()
  29. {
  30. var service = AutoControlService.Instance;
  31. var original = service.IsEnabled;
  32. service.IsEnabled = false;
  33. Assert.False(service.IsEnabled);
  34. service.IsEnabled = true;
  35. Assert.True(service.IsEnabled);
  36. service.IsEnabled = original;
  37. }
  38. [Fact]
  39. public void AutoControlService_CanTogglePumpRotation()
  40. {
  41. var service = AutoControlService.Instance;
  42. var original = service.EnablePumpRotation;
  43. service.EnablePumpRotation = false;
  44. Assert.False(service.EnablePumpRotation);
  45. service.EnablePumpRotation = true;
  46. Assert.True(service.EnablePumpRotation);
  47. service.EnablePumpRotation = original;
  48. }
  49. [Fact]
  50. public void AutoControlService_CanModifyDelays()
  51. {
  52. var service = AutoControlService.Instance;
  53. service.StartDelaySeconds = 5;
  54. service.StopDelaySeconds = 10;
  55. service.MinIntervalSeconds = 120;
  56. Assert.Equal(5, service.StartDelaySeconds);
  57. Assert.Equal(10, service.StopDelaySeconds);
  58. Assert.Equal(120, service.MinIntervalSeconds);
  59. // Reset
  60. service.StartDelaySeconds = 3;
  61. service.StopDelaySeconds = 5;
  62. service.MinIntervalSeconds = 60;
  63. }
  64. [Fact]
  65. public void MockPlcService_ShouldBeToggleable()
  66. {
  67. MockPlcService.Enable();
  68. Assert.True(MockPlcService.IsEnabled);
  69. }
  70. [Fact]
  71. public void MockPlcService_ShouldGenerateData()
  72. {
  73. MockPlcService.Enable();
  74. var data = new PlcDataModel();
  75. MockPlcService.UpdateData(data);
  76. // Mock 模式应生成模拟数据
  77. Assert.True(data.IsDataValid || data.LastReadTime > DateTime.MinValue);
  78. }
  79. [Fact]
  80. public void ProjectProfile_CanCreatePumpConfig()
  81. {
  82. var pump = new PumpConfig
  83. {
  84. Name = "TestPump",
  85. RunAddress = "Q0.1",
  86. FaultAddress = "I0.1",
  87. CurrentAddress = "VD50",
  88. StartAddress = "M1.3",
  89. StopAddress = "M1.4"
  90. };
  91. Assert.Equal("TestPump", pump.Name);
  92. Assert.Equal("Q0.1", pump.RunAddress);
  93. Assert.Equal("I0.1", pump.FaultAddress);
  94. }
  95. [Fact]
  96. public void ProjectProfile_CanCreateTankConfig()
  97. {
  98. var tank = new TankConfig
  99. {
  100. Name = "TestTank",
  101. LevelAddress = "VD62",
  102. StartPump1LevelAddress = "VD500",
  103. StopLevelAddress = "VD528",
  104. ProtectionLevelAddress = "VD962"
  105. };
  106. Assert.Equal("TestTank", tank.Name);
  107. Assert.Equal("VD62", tank.LevelAddress);
  108. }
  109. [Fact]
  110. public void ProjectProfile_CanCreateFullProfile()
  111. {
  112. var profile = new ProjectProfile
  113. {
  114. Name = "测试项目",
  115. Description = "测试用项目档案",
  116. Pumps = new()
  117. {
  118. new PumpConfig { Name = "P1", RunAddress = "Q0.1", FaultAddress = "I0.1" },
  119. new PumpConfig { Name = "P2", RunAddress = "Q0.2", FaultAddress = "I0.2" }
  120. },
  121. Tanks = new()
  122. {
  123. new TankConfig { Name = "T1", LevelAddress = "VD62" }
  124. },
  125. AlarmThresholds = new AlarmThresholds
  126. {
  127. PressureHigh = 1.2f,
  128. PressureLow = 0.1f
  129. }
  130. };
  131. Assert.Equal("测试项目", profile.Name);
  132. Assert.Equal(2, profile.Pumps.Count);
  133. Assert.Single(profile.Tanks);
  134. Assert.NotNull(profile.AlarmThresholds);
  135. Assert.Equal(1.2f, profile.AlarmThresholds.PressureHigh);
  136. }
  137. }