using Xunit; using Moq; using FluentAssertions; using Microsoft.Extensions.Logging; using Haoliang.Core.Services; using DeviceStatus = Haoliang.Models.Device.DeviceCurrentStatus; namespace Haoliang.Tests; public class ProductionCalculatorTests { [Fact] public void CalculateProduction_SameProgram_ReturnsDifference() { var current = new DeviceStatus { DeviceId = 1, NCProgram = "PROGRAM001", CumulativeCount = 150, RecordTime = DateTime.Now }; var last = new DeviceStatus { DeviceId = 1, NCProgram = "PROGRAM001", CumulativeCount = 100, RecordTime = DateTime.Now.AddMinutes(-1) }; var result = Haoliang.Models.Production.ProductionCalculator.CalculateProduction(current, last); result.Should().Be(50); } [Fact] public void CalculateProduction_ProgramSwitch_ReturnsCurrentCount() { var current = new DeviceStatus { DeviceId = 1, NCProgram = "PROGRAM002", CumulativeCount = 50, RecordTime = DateTime.Now }; var last = new DeviceStatus { DeviceId = 1, NCProgram = "PROGRAM001", CumulativeCount = 100, RecordTime = DateTime.Now.AddMinutes(-1) }; var result = Haoliang.Models.Production.ProductionCalculator.CalculateProduction(current, last); result.Should().Be(50); } [Fact] public void CalculateProduction_NegativeValue_ReturnsZero() { var current = new DeviceStatus { DeviceId = 1, NCProgram = "PROGRAM001", CumulativeCount = 50, RecordTime = DateTime.Now }; var last = new DeviceStatus { DeviceId = 1, NCProgram = "PROGRAM001", CumulativeCount = 100, RecordTime = DateTime.Now.AddMinutes(-1) }; var result = Haoliang.Models.Production.ProductionCalculator.CalculateProduction(current, last); result.Should().Be(0); } [Fact] public void CalculateProduction_SameProgramZeroDiff_ReturnsZero() { var current = new DeviceStatus { DeviceId = 1, NCProgram = "PROGRAM001", CumulativeCount = 100, RecordTime = DateTime.Now }; var last = new DeviceStatus { DeviceId = 1, NCProgram = "PROGRAM001", CumulativeCount = 100, RecordTime = DateTime.Now.AddMinutes(-1) }; var result = Haoliang.Models.Production.ProductionCalculator.CalculateProduction(current, last); result.Should().Be(0); } [Fact] public void IsNewProgram_DifferentPrograms_ReturnsTrue() { var result = Haoliang.Models.Production.ProductionCalculator.IsNewProgram("PROGRAM001", "PROGRAM002"); result.Should().BeTrue(); } [Fact] public void IsNewProgram_SameProgram_ReturnsFalse() { var result = Haoliang.Models.Production.ProductionCalculator.IsNewProgram("PROGRAM001", "PROGRAM001"); result.Should().BeFalse(); } }