Files
knowledge-governance/internal/qaopsmirror/weekly_template_test.go
T
姚章浩 226d47a72d
build / build (push) Successful in 1m13s
fix(qa): 周报正文移除中英文质量统计口径说明
仅删除周报说明段及模板占位,保留自然月规则、指标数值和来源审计。
历史已保存周报不因模板变更自动改写,保留中英文各六节。
验证:移除说明断言先红后绿,自然月指标/来源及历史证据保留测试通过,完整门禁与原生备份恢复通过。
2026-10-25 17:15:35 +08:00

95 lines
5.2 KiB
Go

package qaopsmirror
import (
"encoding/json"
"knowledge-governance/internal/qaopsquality"
"strings"
"testing"
"time"
)
func TestWeeklyTemplateCalendarMonthOverridesOnlyNewPrefillNotHistoricalEvidence(t *testing.T) {
now := monthlyTestTime(t, "2026-10-21T08:00:00+08:00")
start, end, e := weeklyDraftBounds("2026-W40", now)
if e != nil {
t.Fatal(e)
}
data := Dashboard{Start: start, End: end, MonthStart: monthlyTestTime(t, "2026-10-01T00:00:00+08:00"), ReportedWeeks: []DashboardReported{{Week: "2026WK40", WeekStart: start, WeekEnd: end, CoveragePercent: 57.23, CorrectnessPercent: 92.34, Source: "user_provided_history"}}, QualityPeriod: &DashboardQualityPeriod{Month: "2026-09", Start: monthlyTestTime(t, "2026-09-01T00:00:00+08:00"), CutoffAt: monthlyTestTime(t, "2026-10-01T00:00:00+08:00"), CalculatedAt: now, Source: dashboardMonthlySource, PolicyVersion: dashboardMonthlyPolicy}, MonthlyQuality: &DashboardStrictQuality{Records: 3, Coverage: dashboardRate(2, 3), Correctness: dashboardRate(1, 2)}}
md, seed, e := renderWeeklyTemplate("2026-W40", data, now)
if e != nil {
t.Fatal(e)
}
var meta map[string]any
_ = json.Unmarshal(seed, &meta)
if !strings.Contains(md, "Coverage Rate: 66.67%") || !strings.Contains(md, "Accuracy Rate: 50.00%") || meta["quality_source"] != dashboardMonthlySource {
t.Fatal("new weekly prefill still uses historical/week quality instead of the selected calendar month", md)
}
for _, removed := range []string{"Quality month (Beijing):", "质量统计月:", "Each rate is yes /", "跨月周按周一所在月", "{{QUALITY_PERIOD_"} {
if strings.Contains(md, removed) {
t.Fatalf("weekly report still contains the removed quality-period note: %s", removed)
}
}
if data.ReportedWeeks[0].CoveragePercent != 57.23 {
t.Fatal("historical reported evidence changed")
}
if strings.Count(md, "\n## ") != 12 {
t.Fatal("changed approved bilingual six-section template")
}
period, ok := meta["quality_period"].(map[string]any)
if !ok || period["month"] != "2026-09" {
t.Fatal("monthly prefill provenance missing")
}
}
func TestWeeklyTemplateHistoricalRatesKeepSourceWeekKeyAndUseMatchingBoundaries(t *testing.T) {
now := time.Date(2026, 10, 19, 12, 0, 0, 0, time.UTC)
start, end, e := weeklyDraftBounds("2026-W40", now)
if e != nil {
t.Fatal(e)
}
data := Dashboard{Start: start, End: end, MonthStart: dashboardDay(end.Add(-time.Second)), ReportedWeeks: []DashboardReported{{Week: "2026WK40", WeekStart: start, WeekEnd: end, CoveragePercent: 57.23, CorrectnessPercent: 92.34, Source: "user_provided_history"}}}
md, seed, e := renderWeeklyTemplate("2026-W40", data, now)
if e != nil {
t.Fatal(e)
}
var meta map[string]any
if json.Unmarshal(seed, &meta) != nil {
t.Fatal("invalid seed")
}
if !strings.Contains(md, "Coverage Rate: 57.23%") || !strings.Contains(md, "Accuracy Rate: 92.34%") || meta["quality_source"] != "reported-history" || meta["quality_source_week_key"] != "2026WK40" {
t.Fatalf("historical source key must remain verbatim and match by real week boundaries: %s", md)
}
if data.ReportedWeeks[0].Week != "2026WK40" {
t.Fatal("rewrote source week identifier")
}
}
func TestWeeklyTemplateUsesExactBilingualSixSectionsAndRealMetricValues(t *testing.T) {
now := time.Date(2026, 10, 19, 12, 0, 0, 0, time.UTC)
start, end, e := weeklyDraftBounds("2026-W41", now)
if e != nil {
t.Fatal(e)
}
p := func(v float64) *float64 { return &v }
data := Dashboard{Start: start, End: end, MonthStart: time.Date(2026, 10, 1, 0, 0, 0, 0, dashboardLocation), TotalIssues: 1234, NewThisWeek: 12, Quality: qaopsquality.Summary{Rates: qaopsquality.Rates{Coverage: qaopsquality.Rate{Percent: p(0)}, Correctness: qaopsquality.Rate{}}}, Regions: []DashboardRegion{{ID: "a", Name: "APAC", Frequency: p(0), UsageCoverage: qaopsquality.Rate{Percent: p(10)}}, {ID: "b", Name: "America", Frequency: p(2), UsageCoverage: qaopsquality.Rate{Percent: p(5)}}, {ID: "c", Name: "unassigned\n## fake", Frequency: nil}}}
md, seed, e := renderWeeklyTemplate("2026-W41", data, now)
if e != nil {
t.Fatal(e)
}
if strings.Count(md, "\n## ") != 12 || !strings.HasPrefix(md, "# Knowledge Base Weekly Report - 2026 WK41") || strings.Index(md, "## 6. Next Week Priorities") > strings.Index(md, "# 知识库周报") || !strings.Contains(md, "问题总数:1234") || !strings.Contains(md, "New This Week: 12") || !strings.Contains(md, "Coverage Rate: 0.00%") || !strings.Contains(md, "Accuracy Rate: —") || strings.Contains(md, "{{") || strings.Contains(md, "\n## fake") {
t.Fatalf("skill template, trusted values or escaping missing: %s", md)
}
if !strings.Contains(md, "[待填写]") || !strings.Contains(md, "[To be completed]") {
t.Fatal("invented authored highlights instead of leaving placeholders")
}
average := md[strings.Index(md, "Regional Average"):strings.Index(md, "## 4.")]
coverage := md[strings.Index(md, "Regional Usage Coverage"):strings.Index(md, "## 5.")]
if strings.Index(average, "Americas") > strings.Index(average, "APAC") || strings.Index(coverage, "APAC") > strings.Index(coverage, "Americas") {
t.Fatal("regional rankings not sorted independently")
}
var meta map[string]any
if json.Unmarshal(seed, &meta) != nil || meta["quality_source"] != "live-week" {
t.Fatal("prefill provenance missing")
}
}