using System.Security.Claims; 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 ScadaLink.CentralUI.Components.Shared; using ScadaLink.Commons.Entities.Sites; using ScadaLink.Commons.Interfaces.Repositories; using ScadaLink.Commons.Interfaces.Services; using ScadaLink.Commons.Interfaces.Transport; using ScadaLink.Commons.Messages.Audit; using ScadaLink.Commons.Types.Transport; using ScadaLink.Communication; using ScadaLink.ConfigurationDatabase; using ScadaLink.Transport; using SiteCallsReportPage = ScadaLink.CentralUI.Components.Pages.SiteCalls.SiteCallsReport; using TransportImportPage = ScadaLink.CentralUI.Components.Pages.Design.TransportImport; namespace ScadaLink.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