Files
lmxopcua/tests/ZB.MOM.WW.LmxOpcUa.Tests/Wiring/MxAccessToNodeManagerWiringTest.cs
2026-03-25 11:45:12 -04:00

56 lines
1.8 KiB
C#

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
{
/// <summary>
/// Verifies: FakeMxProxy OnDataChange → MxAccessClient → OnTagValueChanged → node manager delivery
/// </summary>
public class MxAccessToNodeManagerWiringTest
{
/// <summary>
/// Confirms that a simulated data change reaches the global tag-value-changed event.
/// </summary>
[Fact]
public async Task DataChange_ReachesGlobalHandler()
{
var mxClient = new FakeMxAccessClient();
string? receivedAddress = null;
Vtq? receivedVtq = null;
mxClient.OnTagValueChanged += (addr, vtq) =>
{
receivedAddress = addr;
receivedVtq = vtq;
};
mxClient.SimulateDataChange("TestTag.Attr", Vtq.Good(42));
receivedAddress.ShouldBe("TestTag.Attr");
receivedVtq.ShouldNotBeNull();
receivedVtq.Value.Value.ShouldBe(42);
receivedVtq.Value.Quality.ShouldBe(Quality.Good);
}
/// <summary>
/// Confirms that a simulated data change reaches the stored per-tag subscription callback.
/// </summary>
[Fact]
public async Task DataChange_ReachesSubscriptionCallback()
{
var mxClient = new FakeMxAccessClient();
Vtq? received = null;
await mxClient.SubscribeAsync("TestTag.Attr", (addr, vtq) => received = vtq);
mxClient.SimulateDataChange("TestTag.Attr", Vtq.Good(99));
received.ShouldNotBeNull();
received.Value.Value.ShouldBe(99);
}
}
}