using Opc.Ua; using Shouldly; using Xunit; using ZB.MOM.WW.LmxOpcUa.Host.Domain; namespace ZB.MOM.WW.LmxOpcUa.Tests.Historian { public class HistorianQualityMappingTests { private static StatusCode MapHistorianQuality(byte quality) { return QualityMapper.MapToOpcUaStatusCode(QualityMapper.MapFromMxAccessQuality(quality)); } [Theory] [InlineData(192)] // Quality.Good [InlineData(216)] // Quality.GoodLocalOverride public void GoodQualityRange_MapsToGood(byte quality) { StatusCode.IsGood(MapHistorianQuality(quality)).ShouldBeTrue(); } [Theory] [InlineData(64)] // Quality.Uncertain [InlineData(68)] // Quality.UncertainLastUsable [InlineData(80)] // Quality.UncertainSensorNotAccurate [InlineData(88)] // Quality.UncertainSubNormal [InlineData(128)] // Uncertain range (no exact enum match) public void UncertainQualityRange_MapsToUncertain(byte quality) { StatusCode.IsUncertain(MapHistorianQuality(quality)).ShouldBeTrue(); } [Theory] [InlineData(0)] // Quality.Bad [InlineData(1)] // Bad range [InlineData(4)] // Quality.BadConfigError [InlineData(8)] // Quality.BadNotConnected [InlineData(20)] // Quality.BadCommFailure [InlineData(50)] // Bad range (no exact enum match) public void BadQualityRange_MapsToBad(byte quality) { StatusCode.IsBad(MapHistorianQuality(quality)).ShouldBeTrue(); } } }