namespace ZB.MOM.WW.ScadaBridge.CentralUI.Tests.Deployment; /// /// Design 2026-08-20: the Connection Bindings panel renders one collapsible group /// per module with a header-level connection + Object apply, unbound/mixed pills and /// a show-only-unbound filter. Structural pins over the page source. /// public class InstanceConfigureBindingGroupsTests { private static string Markup => InstanceConfigureBindingRowsTests.ReadMarkup(); /// Verifies that a group header has a connection selector, an object selector and an Apply button. [Fact] public void GroupHeader_HasConnectionObjectAndApply() { var m = Markup; Assert.Contains("data-test=\"binding-group-header\"", m); Assert.Contains("data-test=\"binding-group-connection\"", m); Assert.Contains("data-test=\"binding-group-object\"", m); Assert.Contains("data-test=\"binding-group-apply\"", m); Assert.Contains("ApplyGroupObject(", m); Assert.Contains("BindingGroupBuilder.ApplyObject(", m); } /// Verifies that a group header shows unbound and mixed status pills. [Fact] public void GroupHeader_ShowsUnboundAndMixedPills() { var m = Markup; Assert.Contains("data-test=\"binding-group-unbound\"", m); Assert.Contains("data-test=\"binding-group-mixed\"", m); Assert.Contains("data-test=\"binding-total-unbound\"", m); } /// Verifies that the toolbar offers an unbound-only filter and an expand-all control. [Fact] public void Toolbar_HasUnboundFilterAndExpandAll() { var m = Markup; Assert.Contains("_showOnlyUnbound", m); Assert.Contains("data-test=\"binding-expand-all\"", m); Assert.Contains("data-test=\"binding-bulk-select\"", m); // existing all-groups connection select retained } /// Verifies that a composed member with a bare default binding is flagged. [Fact] public void ComposedBareDefault_IsFlagged() { Assert.Contains("data-test=\"binding-bare-default\"", Markup); } /// Verifies that the old flat bindings table is no longer rendered. [Fact] public void OldFlatTable_IsGone() { Assert.DoesNotContain("_bindingDataSourceAttrs", Markup); } /// Verifies that the per-row Browse button is retained. [Fact] public void PerRowBrowseButton_IsRetained() { // The OPC UA / MxGateway tag browser per row predates the grouped panel and must survive it. var m = Markup; Assert.Contains("OpenBrowser(name)", m); Assert.Contains("IsBrowsable(", m); } }