test(notification-outbox): cover Discard and query-failure paths on the Outbox page

This commit is contained in:
Joseph Doherty
2026-05-19 03:02:48 -04:00
parent ad9872705d
commit 9b05e48ea6
2 changed files with 36 additions and 0 deletions

View File

@@ -299,6 +299,8 @@
private async Task RefreshAll() 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()); await Task.WhenAll(LoadKpis(), FetchPage());
} }

View File

@@ -165,6 +165,27 @@ public class NotificationOutboxPageTests : BunitContext
}); });
} }
[Fact]
public void ClickDiscard_OnParkedRow_CallsDiscardNotification()
{
var cut = Render<NotificationOutboxPage>();
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] [Fact]
public void KpiFailure_ShowsErrorMessage() public void KpiFailure_ShowsErrorMessage()
{ {
@@ -177,6 +198,19 @@ public class NotificationOutboxPageTests : BunitContext
Assert.Contains("outbox repository unavailable", cut.Markup)); Assert.Contains("outbox repository unavailable", cut.Markup));
} }
[Fact]
public void QueryFailure_ShowsErrorMessage()
{
_queryReply = new NotificationOutboxQueryResponse(
"q", false, "outbox query backend unavailable",
new List<NotificationSummary>(), TotalCount: 0);
var cut = Render<NotificationOutboxPage>();
cut.WaitForAssertion(() =>
Assert.Contains("outbox query backend unavailable", cut.Markup));
}
protected override void Dispose(bool disposing) protected override void Dispose(bool disposing)
{ {
if (disposing) if (disposing)