From bca21ffb9557f3bedbb361e90734d9df9c5879ca Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Sun, 31 May 2026 02:07:54 -0400 Subject: [PATCH] test(siteruntime): assert computed alarms carry unified condition state --- .../Actors/AlarmActorTests.cs | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/ZB.MOM.WW.ScadaBridge.SiteRuntime.Tests/Actors/AlarmActorTests.cs b/tests/ZB.MOM.WW.ScadaBridge.SiteRuntime.Tests/Actors/AlarmActorTests.cs index ef604db3..150122a3 100644 --- a/tests/ZB.MOM.WW.ScadaBridge.SiteRuntime.Tests/Actors/AlarmActorTests.cs +++ b/tests/ZB.MOM.WW.ScadaBridge.SiteRuntime.Tests/Actors/AlarmActorTests.cs @@ -91,6 +91,35 @@ public class AlarmActorTests : TestKit, IDisposable Assert.Equal(AlarmState.Normal, clearMsg.State); } + [Fact] + public void AlarmActor_ComputedAlarm_CarriesUnifiedConditionState() + { + var alarmConfig = new ResolvedAlarm + { + CanonicalName = "HighTemp", + TriggerType = "ValueMatch", + TriggerConfiguration = "{\"attributeName\":\"Status\",\"matchValue\":\"Critical\"}", + PriorityLevel = 700 + }; + + var instanceProbe = CreateTestProbe(); + var alarm = ActorOf(Props.Create(() => new AlarmActor( + "HighTemp", "Pump1", instanceProbe.Ref, alarmConfig, + null, _sharedLibrary, _options, + NullLogger.Instance))); + + alarm.Tell(new AttributeValueChanged( + "Pump1", "Status", "Status", "Critical", "Good", DateTimeOffset.UtcNow)); + + var msg = instanceProbe.ExpectMsg(TimeSpan.FromSeconds(5)); + Assert.Equal(AlarmKind.Computed, msg.Kind); // computed origin + Assert.Equal(msg.Priority, msg.Condition.Severity); // severity tracks priority + Assert.Equal(700, msg.Condition.Severity); + Assert.True(msg.Condition.Active); // active alarm → condition active + Assert.True(msg.Condition.Acknowledged); // computed alarms are auto-acked + Assert.Equal(string.Empty, msg.SourceReference); // no native source reference + } + [Fact] public void AlarmActor_RangeViolation_ActivatesOutsideRange() {