using AxCopilot.Services.Agent; using FluentAssertions; using Xunit; namespace AxCopilot.Tests.Services; public class DeckRepairGuideServiceTests { [Fact] public void BuildGuide_ShouldReturnNone_WhenNoIssues() { var report = new DeckQualityReport(92, ["Includes Recommendation"], [], []); var guide = DeckRepairGuideService.BuildGuide(report); guide.Should().Be("Deck repair guide: none"); } [Fact] public void BuildGuide_ShouldTranslateDeckIssuesIntoActionableGuidance() { var report = new DeckQualityReport( 61, [], [ new DeckReviewIssue("Executive Summary slide is missing.", DeckReviewSeverity.Critical), new DeckReviewIssue("Slide 3: content density is high and should be simplified.", DeckReviewSeverity.Warning), new DeckReviewIssue("Evidence slides such as charts, tables, or comparisons are limited.", DeckReviewSeverity.Warning), ], []); var guide = DeckRepairGuideService.BuildGuide(report); guide.Should().Contain("Executive Summary"); guide.Should().Contain("Reduce text density"); guide.Should().Contain("evidence"); } [Fact] public void BuildGuide_ShouldSurfaceAppendixAndHeadlineActions() { var report = new DeckQualityReport( 58, [], [ new DeckReviewIssue("Appendix or evidence slide is limited.", DeckReviewSeverity.Info), new DeckReviewIssue("Found 2 duplicate headline(s).", DeckReviewSeverity.Warning) ], []); var guide = DeckRepairGuideService.BuildGuide(report); guide.Should().Contain("appendix"); guide.Should().Contain("distinct message"); } [Fact] public void BuildGuide_ShouldTranslateStorylineGapIntoConcreteAction() { var report = new DeckQualityReport( 63, [], [ new DeckReviewIssue("Storyline expects an options or comparison slide but none is present.", DeckReviewSeverity.Warning) ], ["Executive Summary", "Options"]); var guide = DeckRepairGuideService.BuildGuide(report); guide.Should().Contain("comparison slide"); guide.Should().Contain("storyline"); } }