using ZB.MOM.WW.MxGateway.Contracts.Proto; using ZB.MOM.WW.ScadaBridge.DataConnectionLayer.Adapters; using CommonsTransitionKind = ZB.MOM.WW.ScadaBridge.Commons.Types.Enums.AlarmTransitionKind; using ProtoConditionState = ZB.MOM.WW.MxGateway.Contracts.Proto.AlarmConditionState; using ProtoTransitionKind = ZB.MOM.WW.MxGateway.Contracts.Proto.AlarmTransitionKind; namespace ZB.MOM.WW.ScadaBridge.DataConnectionLayer.Tests; /// Task-12: pure MxGateway alarm-feed proto → NativeAlarmTransition mapping. public class MxGatewayAlarmMapperTests { [Fact] public void MapTransition_AckTransition_IsAcknowledgedWithOperator() { var ev = new OnAlarmTransitionEvent { AlarmFullReference = "Tank01.Level.HiHi", SourceObjectReference = "Tank01", AlarmTypeName = "AnalogLimitAlarm.HiHi", TransitionKind = ProtoTransitionKind.Acknowledge, Severity = 600, OperatorUser = "operator1", OperatorComment = "ack", Category = "Process", Description = "hi" }; var t = MxGatewayAlarmMapper.MapTransition(ev); Assert.Equal(CommonsTransitionKind.Acknowledge, t.Kind); Assert.True(t.Condition.Active); Assert.True(t.Condition.Acknowledged); Assert.Equal(600, t.Condition.Severity); Assert.Equal("operator1", t.OperatorUser); Assert.Equal("Tank01", t.SourceObjectReference); } [Fact] public void MapConditionState_ActiveAcked_To_ActiveTrue_AckTrue() { var c = MxGatewayAlarmMapper.MapConditionState(ProtoConditionState.ActiveAcked, severity: 600); Assert.True(c.Active); Assert.True(c.Acknowledged); Assert.Equal(600, c.Severity); } [Fact] public void MapSnapshot_ActiveUnacked_IsSnapshotKind() { var snap = new ActiveAlarmSnapshot { AlarmFullReference = "Tank01.Level.Hi", SourceObjectReference = "Tank01", AlarmTypeName = "AnalogLimitAlarm.Hi", CurrentState = ProtoConditionState.Active, Severity = 1500 // out of range — must clamp }; var t = MxGatewayAlarmMapper.MapSnapshot(snap); Assert.Equal(CommonsTransitionKind.Snapshot, t.Kind); Assert.True(t.Condition.Active); Assert.False(t.Condition.Acknowledged); Assert.Equal(1000, t.Condition.Severity); } }