test(central-ui): cover tree-select path for OnNodeSelected DataType

This commit is contained in:
Joseph Doherty
2026-06-27 13:48:58 -04:00
parent 63273fd0f8
commit c6a32e8fef
@@ -66,4 +66,36 @@ public class NodeBrowserDialogSelectionTests : BunitContext
Assert.Empty(cut.FindAll("[data-test=node-search-input]"));
}
// The Secured Writes page browses MxGateway with ShowSearch=false, so the
// ONLY user-reachable selection path in production is the tree (Select(TreeNode)
// → _selectedNode = node.Source). This guards that path end-to-end: a tree-node
// click must carry the node's DataType through Confirm → OnNodeSelected.
[Fact]
public void TreeSelect_emits_full_node_with_datatype_on_OnNodeSelected()
{
_browse.BrowseChildrenAsync(
Arg.Any<string>(), Arg.Any<string>(), Arg.Any<string?>(),
Arg.Any<string?>(), Arg.Any<CancellationToken>())
.Returns(new BrowseNodeResult(
new[] { new BrowseNode("Area1.Pump.Speed", "Speed", BrowseNodeClass.Variable, HasChildren: false, DataType: "Float") },
Truncated: false, Failure: null));
BrowseNode? captured = null;
var cut = Render<NodeBrowserDialog>(p => p
.Add(c => c.SiteId, "plant-a")
.Add(c => c.ConnectionName, "PLC-MX")
.Add(c => c.ShowSearch, false)
.Add(c => c.OnNodeSelected, EventCallback.Factory.Create<BrowseNode>(this, n => captured = n)));
cut.InvokeAsync(() => cut.Instance.ShowAsync("plant-a", "PLC-MX", null));
cut.Render();
// Click the tree node's select link (tree path, not search).
cut.Find(".node-browser-tree a").Click();
cut.Find(".modal-footer .btn-primary").Click();
Assert.NotNull(captured);
Assert.Equal("Area1.Pump.Speed", captured!.NodeId);
Assert.Equal("Float", captured.DataType);
}
}