using Bunit; using Marathon.UI.Pages.Anomalies; using Marathon.UI.Services; using Marathon.UI.Tests.Support; namespace Marathon.UI.Tests.Pages.Anomalies; public sealed class AnomalyDetailTests : MarathonTestContext { [Fact] public void Renders_not_found_when_detail_is_null() { AnomalyBrowsing.Detail = null; var cut = RenderComponent(p => p.Add(d => d.Id, Guid.NewGuid())); cut.WaitForAssertion(() => cut.Markup.Should().Contain("Anomaly.Detail.NotFound")); } [Fact] public void Renders_event_title_severity_pill_and_evidence_panel() { var item = FakeAnomalyBrowsingService.MakeItem(title: "Lakers vs Bulls", score: 0.72m); var pre = FakeAnomalyBrowsingService.MakeSnapshot(favourite: AnomalyFavourite.Side1); var post = FakeAnomalyBrowsingService.MakeSnapshot( rate1: 4.00m, rate2: 1.30m, p1: 0.245m, p2: 0.755m, favourite: AnomalyFavourite.Side2); AnomalyBrowsing.Detail = new AnomalyDetailVm(item, pre, post); var cut = RenderComponent(p => p.Add(d => d.Id, item.Id)); cut.WaitForAssertion(() => { cut.Markup.Should().Contain("Lakers vs Bulls"); cut.FindAll("[data-test=severity-badge]").Should().NotBeEmpty(); cut.Markup.Should().Contain("Anomaly.Detail.EvidenceTitle"); cut.FindAll("[data-test=anomaly-evidence]").Should().NotBeEmpty(); }); } [Fact] public void Renders_link_back_to_event_button() { var item = FakeAnomalyBrowsingService.MakeItem(); var pre = FakeAnomalyBrowsingService.MakeSnapshot(); var post = FakeAnomalyBrowsingService.MakeSnapshot(favourite: AnomalyFavourite.Side2); AnomalyBrowsing.Detail = new AnomalyDetailVm(item, pre, post); var cut = RenderComponent(p => p.Add(d => d.Id, item.Id)); cut.WaitForAssertion(() => { cut.FindAll("[data-test=link-back-to-event]").Should().NotBeEmpty(); cut.Markup.Should().Contain("Anomaly.Detail.LinkBackToEvent"); }); } [Fact] public void Renders_suspension_duration_in_header_summary() { var item = FakeAnomalyBrowsingService.MakeItem(gapSeconds: 134); var pre = FakeAnomalyBrowsingService.MakeSnapshot(); var post = FakeAnomalyBrowsingService.MakeSnapshot(favourite: AnomalyFavourite.Side2); AnomalyBrowsing.Detail = new AnomalyDetailVm(item, pre, post); var cut = RenderComponent(p => p.Add(d => d.Id, item.Id)); cut.WaitForAssertion(() => { var node = cut.Find("[data-test=suspension-duration]"); node.TextContent.Should().Contain("2m 14s"); }); } }