From 9b05e48ea609a965ecac06c40a08727000108950 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Tue, 19 May 2026 03:02:48 -0400 Subject: [PATCH] test(notification-outbox): cover Discard and query-failure paths on the Outbox page --- .../Pages/Monitoring/NotificationOutbox.razor | 2 ++ .../Pages/NotificationOutboxPageTests.cs | 34 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/ScadaLink.CentralUI/Components/Pages/Monitoring/NotificationOutbox.razor b/src/ScadaLink.CentralUI/Components/Pages/Monitoring/NotificationOutbox.razor index 3b344a4..2b0ed38 100644 --- a/src/ScadaLink.CentralUI/Components/Pages/Monitoring/NotificationOutbox.razor +++ b/src/ScadaLink.CentralUI/Components/Pages/Monitoring/NotificationOutbox.razor @@ -299,6 +299,8 @@ private async Task RefreshAll() { + // Race-free despite both tasks mutating component fields: Blazor Server runs + // every continuation on the circuit's single-threaded synchronization context. await Task.WhenAll(LoadKpis(), FetchPage()); } diff --git a/tests/ScadaLink.CentralUI.Tests/Pages/NotificationOutboxPageTests.cs b/tests/ScadaLink.CentralUI.Tests/Pages/NotificationOutboxPageTests.cs index 15c4553..e760722 100644 --- a/tests/ScadaLink.CentralUI.Tests/Pages/NotificationOutboxPageTests.cs +++ b/tests/ScadaLink.CentralUI.Tests/Pages/NotificationOutboxPageTests.cs @@ -165,6 +165,27 @@ public class NotificationOutboxPageTests : BunitContext }); } + [Fact] + public void ClickDiscard_OnParkedRow_CallsDiscardNotification() + { + var cut = Render(); + + cut.WaitForState(() => cut.Markup.Contains("Pump fault at Plant-A")); + + var parkedRow = cut.FindAll("tbody tr") + .First(r => r.TextContent.Contains("Pump fault at Plant-A")); + var discardButton = parkedRow.QuerySelectorAll("button") + .First(b => b.TextContent.Contains("Discard")); + + discardButton.Click(); + + cut.WaitForAssertion(() => + { + Assert.Single(_discardRequests); + Assert.Equal("notif-aaaaaaaa-1111", _discardRequests[0].NotificationId); + }); + } + [Fact] public void KpiFailure_ShowsErrorMessage() { @@ -177,6 +198,19 @@ public class NotificationOutboxPageTests : BunitContext Assert.Contains("outbox repository unavailable", cut.Markup)); } + [Fact] + public void QueryFailure_ShowsErrorMessage() + { + _queryReply = new NotificationOutboxQueryResponse( + "q", false, "outbox query backend unavailable", + new List(), TotalCount: 0); + + var cut = Render(); + + cut.WaitForAssertion(() => + Assert.Contains("outbox query backend unavailable", cut.Markup)); + } + protected override void Dispose(bool disposing) { if (disposing)