using Xunit; using YZWater.Core.Models; using YZWater.Core.Services; namespace YZWater.Core.Tests.Services; /// /// 自动控制服务集成测试 /// 使用 MockPlcService 模拟 PLC 数据 /// public class AutoControlIntegrationTests { [Fact] public void AutoControlService_ShouldBeCreated() { var service = AutoControlService.Instance; Assert.NotNull(service); } [Fact] public void AutoControlService_DefaultSettings() { var service = AutoControlService.Instance; Assert.True(service.IsEnabled); Assert.Equal(60, service.MinIntervalSeconds); Assert.Equal(3, service.StartDelaySeconds); Assert.Equal(5, service.StopDelaySeconds); Assert.True(service.EnablePumpRotation); } [Fact] public void AutoControlService_CanToggleEnabled() { var service = AutoControlService.Instance; var original = service.IsEnabled; service.IsEnabled = false; Assert.False(service.IsEnabled); service.IsEnabled = true; Assert.True(service.IsEnabled); service.IsEnabled = original; } [Fact] public void AutoControlService_CanTogglePumpRotation() { var service = AutoControlService.Instance; var original = service.EnablePumpRotation; service.EnablePumpRotation = false; Assert.False(service.EnablePumpRotation); service.EnablePumpRotation = true; Assert.True(service.EnablePumpRotation); service.EnablePumpRotation = original; } [Fact] public void AutoControlService_CanModifyDelays() { var service = AutoControlService.Instance; service.StartDelaySeconds = 5; service.StopDelaySeconds = 10; service.MinIntervalSeconds = 120; Assert.Equal(5, service.StartDelaySeconds); Assert.Equal(10, service.StopDelaySeconds); Assert.Equal(120, service.MinIntervalSeconds); // Reset service.StartDelaySeconds = 3; service.StopDelaySeconds = 5; service.MinIntervalSeconds = 60; } [Fact] public void MockPlcService_ShouldBeToggleable() { MockPlcService.Enable(); Assert.True(MockPlcService.IsEnabled); } [Fact] public void MockPlcService_ShouldGenerateData() { MockPlcService.Enable(); var data = new PlcDataModel(); MockPlcService.UpdateData(data); // Mock 模式应生成模拟数据 Assert.True(data.IsDataValid || data.LastReadTime > DateTime.MinValue); } [Fact] public void ProjectProfile_CanCreatePumpConfig() { var pump = new PumpConfig { Name = "TestPump", RunAddress = "Q0.1", FaultAddress = "I0.1", CurrentAddress = "VD50", StartAddress = "M1.3", StopAddress = "M1.4" }; Assert.Equal("TestPump", pump.Name); Assert.Equal("Q0.1", pump.RunAddress); Assert.Equal("I0.1", pump.FaultAddress); } [Fact] public void ProjectProfile_CanCreateTankConfig() { var tank = new TankConfig { Name = "TestTank", LevelAddress = "VD62", StartPump1LevelAddress = "VD500", StopLevelAddress = "VD528", ProtectionLevelAddress = "VD962" }; Assert.Equal("TestTank", tank.Name); Assert.Equal("VD62", tank.LevelAddress); } [Fact] public void ProjectProfile_CanCreateFullProfile() { var profile = new ProjectProfile { Name = "测试项目", Description = "测试用项目档案", Pumps = new() { new PumpConfig { Name = "P1", RunAddress = "Q0.1", FaultAddress = "I0.1" }, new PumpConfig { Name = "P2", RunAddress = "Q0.2", FaultAddress = "I0.2" } }, Tanks = new() { new TankConfig { Name = "T1", LevelAddress = "VD62" } }, AlarmThresholds = new AlarmThresholds { PressureHigh = 1.2f, PressureLow = 0.1f } }; Assert.Equal("测试项目", profile.Name); Assert.Equal(2, profile.Pumps.Count); Assert.Single(profile.Tanks); Assert.NotNull(profile.AlarmThresholds); Assert.Equal(1.2f, profile.AlarmThresholds.PressureHigh); } }