using System.Security.Claims; using ZB.MOM.WW.ScadaBridge.Security; using Akka.Actor; using Bunit; using Bunit.TestDoubles; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Authorization; using Microsoft.AspNetCore.Components.Forms; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using NSubstitute; using ZB.MOM.WW.ScadaBridge.CentralUI.Components.Shared; using ZB.MOM.WW.ScadaBridge.Commons.Entities.Sites; using ZB.MOM.WW.ScadaBridge.Commons.Interfaces.Repositories; using ZB.MOM.WW.ScadaBridge.Commons.Interfaces.Services; using ZB.MOM.WW.ScadaBridge.Commons.Interfaces.Transport; using ZB.MOM.WW.ScadaBridge.Commons.Messages.Audit; using ZB.MOM.WW.ScadaBridge.Commons.Types.Transport; using ZB.MOM.WW.ScadaBridge.Communication; using ZB.MOM.WW.ScadaBridge.ConfigurationDatabase; using ZB.MOM.WW.ScadaBridge.Transport; using SiteCallsReportPage = ZB.MOM.WW.ScadaBridge.CentralUI.Components.Pages.SiteCalls.SiteCallsReport; using TransportImportPage = ZB.MOM.WW.ScadaBridge.CentralUI.Components.Pages.Design.TransportImport; namespace ZB.MOM.WW.ScadaBridge.CentralUI.Tests.Pages; /// /// CentralUI-033: tests for the drill-in / query-string code paths on the two /// newest pages (TransportImport + SiteCallsReport). The base happy-path cases /// (Parked, stuck=true, no params) live next to the rest of the page's tests in /// SiteCallsReportPageTests / TransportImportPageTests; this file /// fills the remaining gaps the finding called out — unrecognised values, case /// handling, and the no-query-string default for the Transport wizard. /// public sealed class QueryStringDrillInTests { // STM: CentralUI-033-QueryStringDrillIn marker — used by grep verification. // ----------------------------------------------------------------- // SiteCallsReport — ?status= // ----------------------------------------------------------------- [Fact] public void SiteCallsReport_StatusParam_CaseInsensitiveMatch_NormalisesToCanonicalCasing() { // The dropdown options use canonical casing ("Parked"). The KPI tiles // emit canonical, but a hand-crafted ?status=parked URL must still seed // the filter — the parser is case-insensitive and the seeded value uses // the canonical casing so the