feat(dcl): surface MxGateway attribute DataType through browse seam
This commit is contained in:
@@ -18,7 +18,7 @@ public record MxReadOutcome(string TagPath, bool Success, object? Value, Quality
|
||||
public record MxWriteOutcome(string TagPath, bool Success, string? Error);
|
||||
|
||||
/// <summary>One node in a Galaxy browse level.</summary>
|
||||
public record MxBrowseChild(string NodeId, string DisplayName, BrowseNodeClass NodeClass, bool HasChildren);
|
||||
public record MxBrowseChild(string NodeId, string DisplayName, BrowseNodeClass NodeClass, bool HasChildren, string? DataType = null);
|
||||
|
||||
/// <summary>
|
||||
/// Seam over the MxAccess Gateway .NET client + Galaxy repository client. Decouples
|
||||
|
||||
@@ -267,7 +267,7 @@ public class MxGatewayDataConnection : IDataConnection, IBrowsableDataConnection
|
||||
// and no continuation is ever surfaced (ContinuationToken stays null).
|
||||
var (children, truncated) = await _client.BrowseChildrenAsync(parentNodeId, cancellationToken);
|
||||
var nodes = children
|
||||
.Select(c => new BrowseNode(c.NodeId, c.DisplayName, c.NodeClass, c.HasChildren))
|
||||
.Select(c => new BrowseNode(c.NodeId, c.DisplayName, c.NodeClass, c.HasChildren, DataType: c.DataType))
|
||||
.ToList();
|
||||
return new BrowseChildrenResult(nodes, truncated);
|
||||
}
|
||||
|
||||
@@ -266,7 +266,8 @@ public sealed class RealMxGatewayClient : IMxGatewayClient
|
||||
attr.FullTagReference,
|
||||
attr.AttributeName,
|
||||
BrowseNodeClass.Variable,
|
||||
false));
|
||||
false,
|
||||
string.IsNullOrEmpty(attr.DataTypeName) ? null : attr.DataTypeName));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+18
@@ -245,6 +245,24 @@ public class MxGatewayDataConnectionTests
|
||||
Assert.Equal(BrowseNodeClass.Variable, result.Children[1].NodeClass);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task BrowseChildrenAsync_surfaces_attribute_datatype()
|
||||
{
|
||||
var fake = new FakeMxGatewayClient
|
||||
{
|
||||
BrowseHandler = _ => (new List<MxBrowseChild>
|
||||
{
|
||||
new("Area1.Pump.Speed", "Speed", BrowseNodeClass.Variable, false, "Double"),
|
||||
}, false)
|
||||
};
|
||||
var adapter = NewAdapter(fake);
|
||||
await adapter.ConnectAsync(Details());
|
||||
|
||||
var result = await adapter.BrowseChildrenAsync(null);
|
||||
|
||||
Assert.Equal("Double", result.Children[0].DataType);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task BrowseChildrenAsync_throws_when_not_connected()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user