using Bunit; using Marathon.UI.Components; using Marathon.UI.Services; using Marathon.UI.Tests.Support; using Microsoft.AspNetCore.Components; namespace Marathon.UI.Tests.Components; public sealed class AnomalyCardTests : MarathonTestContext { [Fact] public void Renders_event_title_severity_pill_and_kind_kicker() { var item = FakeAnomalyBrowsingService.MakeItem( title: "Lakers vs Bulls", score: 0.72m); var cut = RenderComponent(p => p.Add(c => c.Item, item)); cut.Markup.Should().Contain("Lakers vs Bulls"); cut.Find("[data-test=severity-badge]").GetAttribute("class").Should().Contain("m-severity--high"); cut.Markup.Should().Contain("Anomaly.Kind.SuspensionFlip"); } [Fact] public void Card_uses_high_severity_left_border_class() { var item = FakeAnomalyBrowsingService.MakeItem(score: 0.65m); var cut = RenderComponent(p => p.Add(c => c.Item, item)); var card = cut.Find("[data-test=anomaly-card]"); card.GetAttribute("class").Should().Contain("m-anomaly-card--high"); } [Fact] public void Card_uses_low_severity_left_border_class() { var item = FakeAnomalyBrowsingService.MakeItem(score: 0.32m); var cut = RenderComponent(p => p.Add(c => c.Item, item)); var card = cut.Find("[data-test=anomaly-card]"); card.GetAttribute("class").Should().Contain("m-anomaly-card--low"); } [Fact] public void Click_invokes_callback_with_item() { var item = FakeAnomalyBrowsingService.MakeItem(); AnomalyListItem? clicked = null; var cut = RenderComponent(p => p .Add(c => c.Item, item) .Add(c => c.OnClick, EventCallback.Factory.Create(this, x => clicked = x))); cut.Find("[data-test=anomaly-card]").Click(); clicked.Should().NotBeNull(); clicked!.Id.Should().Be(item.Id); } [Fact] public void Two_way_card_omits_draw_strip_cell() { var item = FakeAnomalyBrowsingService.MakeItem(isTwoWay: true); var cut = RenderComponent(p => p.Add(c => c.Item, item)); // Strip should mention Win1 + Win2 only — not Draw. cut.Markup.Should().Contain("Detail.Chart.Win1"); cut.Markup.Should().Contain("Detail.Chart.Win2"); cut.Markup.Should().NotContain("Detail.Chart.Draw"); } [Fact] public void Three_way_card_renders_draw_strip_cell() { var item = FakeAnomalyBrowsingService.MakeItem( isTwoWay: false, preDraw: 3.30m, postDraw: 3.20m); var cut = RenderComponent(p => p.Add(c => c.Item, item)); cut.Markup.Should().Contain("Detail.Chart.Draw"); } }