using ZB.MOM.WW.MxGateway.Server.Galaxy; namespace ZB.MOM.WW.MxGateway.Tests.Galaxy; /// /// Pure mapper tests for . These assert the /// FullTagReference / SourceObjectReference derivation produced by /// AlarmAttributesSql without touching a database: the SQL projects /// tag_name as the source object and tag_name + '.' + attribute_name as /// the full reference, exactly as AttributesSql does. /// public sealed class GalaxyAlarmAttributeMappingTests { /// Verifies the mapper copies all projected columns onto the row. [Fact] public void MapAlarmRow_CopiesProjectedColumns() { GalaxyAlarmAttributeRow row = GalaxyRepository.MapAlarmRow( fullTagReference: "Tank01.Level.HiHi", sourceObjectReference: "Tank01", area: "TestArea"); Assert.Equal("Tank01.Level.HiHi", row.FullTagReference); Assert.Equal("Tank01", row.SourceObjectReference); Assert.Equal("TestArea", row.Area); } /// /// Verifies is always empty: /// the schema does not expose an ack-comment address, so the watch-list resolver /// composes it later from configuration. /// [Fact] public void MapAlarmRow_LeavesAckCommentSubtagEmpty() { GalaxyAlarmAttributeRow row = GalaxyRepository.MapAlarmRow( fullTagReference: "Tank01.Level.HiHi", sourceObjectReference: "Tank01", area: "TestArea"); Assert.Equal(string.Empty, row.AckCommentSubtag); } /// /// Verifies the SourceObjectReference is the owning object (the SQL tag_name), /// i.e. the segment that precedes the first attribute dot in the full reference, even /// when the attribute itself is a multi-segment extension path. /// [Theory] [InlineData("Tank01", "Level.HiHi", "Tank01.Level.HiHi")] [InlineData("Pump_001", "Speed", "Pump_001.Speed")] [InlineData("TestAlarm001", "Alarm001", "TestAlarm001.Alarm001")] public void MapAlarmRow_SourceObjectIsSegmentBeforeFirstAttributeDot( string tagName, string attributeName, string expectedFullReference) { // Mirror the AlarmAttributesSql projection: full_tag_reference = tag_name + '.' + attribute_name. string fullTagReference = tagName + "." + attributeName; GalaxyAlarmAttributeRow row = GalaxyRepository.MapAlarmRow(fullTagReference, tagName, area: "TestArea"); Assert.Equal(expectedFullReference, row.FullTagReference); Assert.Equal(tagName, row.SourceObjectReference); Assert.Equal("TestArea", row.Area); Assert.Equal(row.FullTagReference, row.SourceObjectReference + "." + attributeName); } }