using AxCopilot.Services.Agent; using FluentAssertions; using Xunit; namespace AxCopilot.Tests.Services; public class ArtifactQualityReviewServiceTests { [Fact] public void ReviewHtml_ShouldDetectRichBusinessStructure() { var html = """
Summary text.
Another supporting paragraph.
Current state detail.
Evidence paragraph.
| Metric | Value |
|---|---|
| NPS | 61 |
Recommendation text.
Action support text.
Reference detail.
More detail.
"""; var review = ArtifactQualityReviewService.ReviewHtml("Board Report", html, hasCover: true, hasTableOfContents: true, printReady: true); review.Score.Should().BeGreaterThan(75); review.Strengths.Should().Contain(s => s.Contains("커버") || s.Contains("목차")); review.Issues.Should().NotContain(i => i.Severity == ArtifactReviewSeverity.Critical); } [Fact] public void ReviewStructuredDocument_ShouldFlagMissingExecutiveSections() { var review = ArtifactQualityReviewService.ReviewStructuredDocument(new StructuredDocumentReviewInput( "Ops Memo", 2, 600, 0, 0, 0, 0, 0, false, false, false, false, false, false, false)); review.Issues.Should().Contain(i => i.Message.Contains("Executive Summary")); review.Issues.Should().Contain(i => i.Message.Contains("권고안")); } [Fact] public void ReviewWorkbook_ShouldFlagMissingSummaryForMultiSheet() { var review = ArtifactQualityReviewService.ReviewWorkbook(new WorkbookReviewInput( "PMO Tracker", 3, 3, 40, 2, 0, 0, false, false, false)); review.Issues.Should().Contain(i => i.Message.Contains("요약 시트")); review.Score.Should().BeLessThan(80); } }