using Opc.Ua;
using ZB.MOM.WW.ScadaBridge.Commons.Interfaces.Protocol;
using ZB.MOM.WW.ScadaBridge.DataConnectionLayer.Adapters;
namespace ZB.MOM.WW.ScadaBridge.DataConnectionLayer.Tests;
/// ScadaBridge#117: quality follows the StatusCode severity bits, not "== 0".
public class OpcUaStatusCodeMappingTests
{
// SDK 2 (ScadaBridge#125): StatusCodes members are StatusCode structs, not constants, so the
// cases are a TheoryData rather than InlineData.
public static TheoryData Cases => new()
{
{ StatusCodes.Good.Code, QualityCode.Good },
{ StatusCodes.GoodLocalOverride.Code, QualityCode.Good },
{ StatusCodes.GoodClamped.Code, QualityCode.Good },
{ StatusCodes.Good.Code | 0x0480u, QualityCode.Good }, // info bits set
{ StatusCodes.Uncertain.Code, QualityCode.Uncertain },
{ StatusCodes.UncertainLastUsableValue.Code, QualityCode.Uncertain },
{ StatusCodes.UncertainSensorNotAccurate.Code, QualityCode.Uncertain },
{ StatusCodes.Bad.Code, QualityCode.Bad },
{ StatusCodes.BadNodeIdUnknown.Code, QualityCode.Bad },
{ StatusCodes.BadResourceUnavailable.Code, QualityCode.Bad },
{ 0xC0000000u, QualityCode.Bad },
};
[Theory]
[MemberData(nameof(Cases))]
public void MapStatusCode_UsesSeverityBits(uint code, QualityCode expected) =>
Assert.Equal(expected, OpcUaDataConnection.MapStatusCode(code));
}