fix(centralui): apply status/stuck query-string filters on the Site Calls page
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
using System.Security.Claims;
|
||||
using Akka.Actor;
|
||||
using Bunit;
|
||||
using Bunit.TestDoubles;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
@@ -411,6 +413,77 @@ public class SiteCallsReportPageTests : BunitContext
|
||||
});
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────
|
||||
// Query-string drill-in — the Health-dashboard Site Call KPI tiles deep-link
|
||||
// here with ?status=Parked (Parked tile) and ?stuck=true (Stuck tile). The
|
||||
// params must seed the filter BEFORE the first query so the initial grid load
|
||||
// is already filtered, and the filter card controls must reflect the values.
|
||||
// ─────────────────────────────────────────────────────────────────────────
|
||||
|
||||
[Fact]
|
||||
public void NavigateWithStatusParkedParam_LoadsGridPreFilteredToParked()
|
||||
{
|
||||
// The Parked KPI tile emits ?status=Parked — set the URI before render.
|
||||
var nav = (BunitNavigationManager)Services.GetRequiredService<NavigationManager>();
|
||||
nav.NavigateTo("/site-calls/report?status=Parked");
|
||||
|
||||
var cut = Render<SiteCallsReportPage>();
|
||||
|
||||
cut.WaitForAssertion(() =>
|
||||
{
|
||||
// The first (and only) query the page issues carries the Parked
|
||||
// status filter — the grid load is pre-filtered, not unfiltered.
|
||||
Assert.Single(_queryRequests);
|
||||
Assert.Equal("Parked", _queryRequests[0].StatusFilter);
|
||||
|
||||
// The Status <select> control reflects the seeded value so the
|
||||
// operator sees the filter and can Clear it.
|
||||
var statusSelect = cut.Find("#sc-status");
|
||||
Assert.Equal("Parked", statusSelect.GetAttribute("value"));
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NavigateWithStuckTrueParam_LoadsGridWithStuckFilterApplied()
|
||||
{
|
||||
// The Stuck KPI tile emits ?stuck=true.
|
||||
var nav = (BunitNavigationManager)Services.GetRequiredService<NavigationManager>();
|
||||
nav.NavigateTo("/site-calls/report?stuck=true");
|
||||
|
||||
var cut = Render<SiteCallsReportPage>();
|
||||
|
||||
cut.WaitForAssertion(() =>
|
||||
{
|
||||
// The first query carries StuckOnly = true.
|
||||
Assert.Single(_queryRequests);
|
||||
Assert.True(_queryRequests[0].StuckOnly);
|
||||
|
||||
// The "Stuck only" checkbox is checked.
|
||||
var stuckCheckbox = cut.Find("#sc-stuck-only");
|
||||
Assert.True(stuckCheckbox.HasAttribute("checked"));
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NavigateWithNoQueryParams_LoadsGridUnfiltered()
|
||||
{
|
||||
// No drill-in params — the page loads exactly as before: an unfiltered
|
||||
// query and no status/stuck filter set on the controls.
|
||||
var cut = Render<SiteCallsReportPage>();
|
||||
|
||||
cut.WaitForAssertion(() =>
|
||||
{
|
||||
Assert.Single(_queryRequests);
|
||||
Assert.Null(_queryRequests[0].StatusFilter);
|
||||
Assert.False(_queryRequests[0].StuckOnly);
|
||||
|
||||
var statusSelect = cut.Find("#sc-status");
|
||||
Assert.True(string.IsNullOrEmpty(statusSelect.GetAttribute("value")));
|
||||
var stuckCheckbox = cut.Find("#sc-stuck-only");
|
||||
Assert.False(stuckCheckbox.HasAttribute("checked"));
|
||||
});
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing)
|
||||
|
||||
Reference in New Issue
Block a user