ResetToDefaultPersistenceTests.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using Serilog.Events;
  2. using Xunit;
  3. using YZWater.Core.Models;
  4. using YZWater.Core.Services;
  5. using YZWater.Core.ViewModels;
  6. namespace YZWater.Core.Tests.ViewModels;
  7. /// <summary>
  8. /// "恢复默认设置"必须真的落到运行配置和磁盘上。
  9. /// 现场日志(log-20261001)里操作员 07:36:24 点了恢复默认,日志写着 IP=192.168.2.100:102,
  10. /// 但 4 秒后服务初始化仍然是 127.0.0.1:103,随后 5 次"测试连接"全部失败,直到重启程序才好
  11. /// —— 旧实现只往输入框里填了值,配置对象和文件都没动过。
  12. /// 这里刻意先装一个"出厂模板地址",就是为了证明断言能红:漏掉落盘这一步时它必炸。
  13. /// </summary>
  14. [Collection("Serilog minimum level")]
  15. public class ResetToDefaultPersistenceTests : IDisposable
  16. {
  17. private readonly LogEventLevel _originalLevel = LogService.MinimumLevel;
  18. private readonly string _originalIp;
  19. private readonly int _originalPort;
  20. public ResetToDefaultPersistenceTests()
  21. {
  22. LogService.ApplyMinimumLevel("Error");
  23. var config = ConfigService.GetConfig()!;
  24. _originalIp = config.PlcIp;
  25. _originalPort = config.PlcPort;
  26. // 现场部署包里的配置就是仿真地址,测试从这里起步
  27. config.PlcIp = "127.0.0.1";
  28. config.PlcPort = 103;
  29. }
  30. public void Dispose()
  31. {
  32. var config = ConfigService.GetConfig();
  33. if (config != null)
  34. {
  35. config.PlcIp = _originalIp;
  36. config.PlcPort = _originalPort;
  37. }
  38. LogService.ApplyMinimumLevel(_originalLevel.ToString());
  39. }
  40. [Fact]
  41. public void ResetToDefault_UpdatesRuntimeConfigAndPersistedFile()
  42. {
  43. var vm = new ViewBViewModel();
  44. try
  45. {
  46. Assert.Equal("127.0.0.1", vm.PlcIp); // 构造时已从配置载入
  47. vm.ResetToDefaultCommand.Execute(null);
  48. Assert.Equal(SystemConfig.DefaultPlcIp, vm.PlcIp);
  49. Assert.Equal(SystemConfig.DefaultPlcPort, vm.PlcPort);
  50. // 光有输入框没用:轮询和"测试连接"读的是配置对象
  51. Assert.Equal(SystemConfig.DefaultPlcIp, ConfigService.GetConfig()!.PlcIp);
  52. Assert.Equal(SystemConfig.DefaultPlcPort, ConfigService.GetConfig()!.PlcPort);
  53. // 重启后还得留得住:从磁盘重新读一遍
  54. ConfigService.LoadConfig();
  55. Assert.Equal(SystemConfig.DefaultPlcIp, ConfigService.GetConfig()!.PlcIp);
  56. Assert.Equal(SystemConfig.DefaultPlcPort, ConfigService.GetConfig()!.PlcPort);
  57. }
  58. finally
  59. {
  60. vm.Dispose();
  61. }
  62. }
  63. }