From 828acd3266fcb4213591b389147d64fd948ec48d Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Thu, 18 Jun 2026 20:14:18 -0400 Subject: [PATCH] test(centralui): TreeView keyboard-activation test + document preventDefault scope (T36a review) --- .../Components/Shared/TreeView.razor | 3 ++ .../Shared/AccessibilityTests.cs | 32 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/ZB.MOM.WW.ScadaBridge.CentralUI/Components/Shared/TreeView.razor b/src/ZB.MOM.WW.ScadaBridge.CentralUI/Components/Shared/TreeView.razor index c0f4be8e..f5df349b 100644 --- a/src/ZB.MOM.WW.ScadaBridge.CentralUI/Components/Shared/TreeView.razor +++ b/src/ZB.MOM.WW.ScadaBridge.CentralUI/Components/Shared/TreeView.razor @@ -59,6 +59,9 @@ else @onclick="() => ToggleExpand(key)" @onclick:stopPropagation @onkeydown="(e) => OnToggleKey(e, key)" + @* preventDefault suppresses Space-bar page scroll on activation (intended for a role=button). + It also suppresses Arrow-key default scroll while the toggle itself has focus — acceptable, + as the chevron is Tab-navigated and Blazor offers no per-key conditional preventDefault. *@ @onkeydown:preventDefault> } else diff --git a/tests/ZB.MOM.WW.ScadaBridge.CentralUI.Tests/Shared/AccessibilityTests.cs b/tests/ZB.MOM.WW.ScadaBridge.CentralUI.Tests/Shared/AccessibilityTests.cs index 69e814d0..f8d5fad9 100644 --- a/tests/ZB.MOM.WW.ScadaBridge.CentralUI.Tests/Shared/AccessibilityTests.cs +++ b/tests/ZB.MOM.WW.ScadaBridge.CentralUI.Tests/Shared/AccessibilityTests.cs @@ -88,6 +88,38 @@ public class AccessibilityTests : BunitContext Assert.StartsWith("Collapse", labelAfterExpand!); } + // ── Test 3: TreeView keyboard activation (Enter / Space) ────────────────── + + [Fact] + public void TreeViewToggle_EnterKey_TogglesExpanded() + { + var cut = RenderTreeView(); + + var toggle = cut.Find(".tv-toggle"); + Assert.Equal("false", toggle.GetAttribute("aria-expanded")); + + // Fire Enter on the toggle — should expand the branch. + toggle.TriggerEvent("onkeydown", new Microsoft.AspNetCore.Components.Web.KeyboardEventArgs { Key = "Enter" }); + + var expandedToggle = cut.Find(".tv-toggle"); + Assert.Equal("true", expandedToggle.GetAttribute("aria-expanded")); + } + + [Fact] + public void TreeViewToggle_SpaceKey_TogglesExpanded() + { + var cut = RenderTreeView(); + + var toggle = cut.Find(".tv-toggle"); + Assert.Equal("false", toggle.GetAttribute("aria-expanded")); + + // Fire Space on the toggle — should expand the branch. + toggle.TriggerEvent("onkeydown", new Microsoft.AspNetCore.Components.Web.KeyboardEventArgs { Key = " " }); + + var expandedToggle = cut.Find(".tv-toggle"); + Assert.Equal("true", expandedToggle.GetAttribute("aria-expanded")); + } + // ── Test 2: ToastNotification live-region regression lock ───────────────── [Fact]