- SqlAnalysisService에 script intent, dependency, review focus 계산을 추가해 migration/seed/reporting SQL의 위험도와 검토 포인트를 더 정확히 안내하도록 개선했습니다. - HtmlSkill에 decision_matrix, metric_strip 섹션을 추가하고 ArtifactQualityReviewService/ArtifactRepairGuideService에서 board·strategy 문서의 의사결정 구조와 KPI 연결 부족을 더 정밀하게 진단하도록 강화했습니다. - DeckQualityReviewService와 DeckRepairGuideService를 확장해 executive summary headline, comparison trade-off, roadmap milestone, chart takeaway, KPI context 부족을 추가로 감지하고 보정 가이드를 반환하도록 정리했습니다. - WorkspaceContextGenerator와 CodeLanguageCatalog를 업데이트해 SQL 저장소에서 SQL Review Focus와 확장된 workflow summary를 제공하도록 맞췄고, README/DEVELOPMENT/NEXT_ROADMAP에 2026-04-15 11:36 (KST) 기준 이력을 반영했습니다. 검증 결과 - dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify_code_sql_doc_final\\ -p:IntermediateOutputPath=obj\\verify_code_sql_doc_final\\ : 경고 0 / 오류 0 - dotnet test src/AxCopilot.Tests/AxCopilot.Tests.csproj -c Release -v minimal --filter "SqlDialectDetectorTests|SqlAnalysisServiceTests|CodeLanguageCatalogTests|WorkspaceContextGeneratorTests|ArtifactQualityReviewServiceTests|ArtifactRepairGuideServiceTests|DeckQualityReviewServiceTests|HtmlSkillConsultingSectionsTests" -p:OutputPath=bin\\verify_code_sql_doc_final_tests\\ -p:IntermediateOutputPath=obj\\verify_code_sql_doc_final_tests\\ : 통과 62
72 lines
3.0 KiB
C#
72 lines
3.0 KiB
C#
using AxCopilot.Services.Agent;
|
|
using FluentAssertions;
|
|
using Xunit;
|
|
|
|
namespace AxCopilot.Tests.Services;
|
|
|
|
public class ArtifactRepairGuideServiceTests
|
|
{
|
|
[Fact]
|
|
public void BuildGuide_ForWorkbookIssues_ShouldReturnWorkbookActions()
|
|
{
|
|
var review = new ArtifactQualityReport(
|
|
"xlsx",
|
|
68,
|
|
["Includes summary sheet"],
|
|
[
|
|
new ArtifactReviewIssue("Dashboard sheet lacks KPI, trend, or decision content.", ArtifactReviewSeverity.Info),
|
|
new ArtifactReviewIssue("Dashboard sheet lacks trend or variance framing for the supporting sheets.", ArtifactReviewSeverity.Info),
|
|
new ArtifactReviewIssue("Dashboard workbook should summarize each supporting detail sheet.", ArtifactReviewSeverity.Info)
|
|
]);
|
|
|
|
var guide = ArtifactRepairGuideService.BuildGuide(review);
|
|
|
|
guide.Should().Contain("dashboard");
|
|
guide.Should().Contain("core story");
|
|
guide.Should().Contain("trend");
|
|
guide.Should().Contain("sheet summaries");
|
|
}
|
|
|
|
[Fact]
|
|
public void BuildGuide_ForHtmlIssues_ShouldReturnHtmlActions()
|
|
{
|
|
var review = new ArtifactQualityReport(
|
|
"html",
|
|
70,
|
|
["Includes print-ready CSS"],
|
|
[
|
|
new ArtifactReviewIssue("Board-ready report should include a decision summary block.", ArtifactReviewSeverity.Warning),
|
|
new ArtifactReviewIssue("Board-ready report would be stronger with a KPI panel or metric strip.", ArtifactReviewSeverity.Info),
|
|
new ArtifactReviewIssue("Strategy brief should include explicit decisions or a decision summary block.", ArtifactReviewSeverity.Warning),
|
|
new ArtifactReviewIssue("Board-ready report would benefit from a comparison or decision matrix block.", ArtifactReviewSeverity.Info)
|
|
]);
|
|
|
|
var guide = ArtifactRepairGuideService.BuildGuide(review);
|
|
|
|
guide.Should().Contain("decision summary");
|
|
guide.Should().Contain("KPI");
|
|
guide.Should().Contain("strategy brief");
|
|
guide.Should().Contain("decision matrix");
|
|
}
|
|
|
|
[Fact]
|
|
public void BuildGuide_ForDocumentIssues_ShouldReturnTemplateAndNavigationActions()
|
|
{
|
|
var review = new ArtifactQualityReport(
|
|
"docx",
|
|
66,
|
|
["Includes cover page"],
|
|
[
|
|
new ArtifactReviewIssue("Supporting evidence table is limited for a business document.", ArtifactReviewSeverity.Info),
|
|
new ArtifactReviewIssue("Key messages would benefit from callout or highlight blocks.", ArtifactReviewSeverity.Info),
|
|
new ArtifactReviewIssue("Header or footer metadata is limited for a business document.", ArtifactReviewSeverity.Info)
|
|
]);
|
|
|
|
var guide = ArtifactRepairGuideService.BuildGuide(review);
|
|
|
|
guide.Should().Contain("evidence table");
|
|
guide.Should().Contain("callout");
|
|
guide.Should().Contain("header and footer");
|
|
}
|
|
}
|