using System.Collections.Generic; using System.Threading.Tasks; using Shouldly; using Xunit; using ZB.MOM.WW.LmxOpcUa.Host.Domain; using ZB.MOM.WW.LmxOpcUa.Host.OpcUa; using ZB.MOM.WW.LmxOpcUa.Tests.Helpers; namespace ZB.MOM.WW.LmxOpcUa.Tests.Wiring { /// /// Verifies: OPC UA Read → NodeManager → IMxAccessClient.ReadAsync with correct full_tag_reference /// public class OpcUaReadToMxAccessWiringTest { /// /// Confirms that the resolved OPC UA read path uses the expected full Galaxy tag reference. /// [Fact] public async Task Read_ResolvesCorrectTagReference() { var mxClient = new FakeMxAccessClient(); mxClient.TagValues["DelmiaReceiver_001.DownloadPath"] = Vtq.Good("/some/path"); var hierarchy = new List { new GalaxyObjectInfo { GobjectId = 1, TagName = "TestMachine_001", BrowseName = "TestMachine_001", ParentGobjectId = 0, IsArea = false }, new GalaxyObjectInfo { GobjectId = 2, TagName = "DelmiaReceiver_001", ContainedName = "DelmiaReceiver", BrowseName = "DelmiaReceiver", ParentGobjectId = 1, IsArea = false } }; var attributes = new List { new GalaxyAttributeInfo { GobjectId = 2, TagName = "DelmiaReceiver_001", AttributeName = "DownloadPath", FullTagReference = "DelmiaReceiver_001.DownloadPath", MxDataType = 5, IsArray = false } }; var model = AddressSpaceBuilder.Build(hierarchy, attributes); // The model should contain the correct tag reference model.NodeIdToTagReference.ContainsKey("DelmiaReceiver_001.DownloadPath").ShouldBe(true); model.NodeIdToTagReference["DelmiaReceiver_001.DownloadPath"].ShouldBe("DelmiaReceiver_001.DownloadPath"); // The MxAccessClient should be able to read using the tag reference var vtq = await mxClient.ReadAsync("DelmiaReceiver_001.DownloadPath"); vtq.Value.ShouldBe("/some/path"); vtq.Quality.ShouldBe(Quality.Good); } } }