Files

69 lines
4.5 KiB
Go

package coach
import "testing"
func TestProfileNormalizationAndChangedFields(t *testing.T) {
previous := ProfileInput{BusinessDescription: " فروشگاه آنلاین محصولات آموزشی ", Niches: []string{"آموزش", "فروش"}, SalesChannels: []string{"وب‌سایت"}, PrimaryGoal: "رشد فروش", Constraints: "تیم کوچک"}
next := ProfileInput{BusinessDescription: "فروشگاه آنلاین محصولات آموزشی", Niches: []string{"فروش", "آموزش"}, SalesChannels: []string{"وب‌سایت", "اینستاگرام"}, PrimaryGoal: "رشد فروش", Constraints: "تیم کوچک"}
if fields := ChangedProfileFields(previous, next); len(fields) != 1 || fields[0] != "salesChannels" {
t.Fatalf("changed fields = %#v", fields)
}
}
func TestValidateGenerationRequiresActionableSubtasks(t *testing.T) {
metricID, direction, level := "success_rate", "INCREASE", "SMALL"
generation := Generation{DailyBrief: "جمع‌بندی معتبر", Suggestions: []GenerationSuggestion{
{ActionType: "METRIC", Title: "بهبود تجربه پرداخت", Rationale: "بر پایه شواهد", ExpectedImpact: "اثر قابل سنجش", Effort: "MEDIUM", EvidenceIDs: []string{"payment-health"}, MetricID: &metricID, MetricDirection: &direction, ActionLevel: &level, Subtasks: []GenerationSubtask{{Title: "خطاهای پرتکرار پرداخت را مرور کنید"}, {Title: "متن راهنمای پرداخت را بازنویسی کنید"}, {Title: "نسخه تازه مسیر پرداخت را آزمایش کنید"}}},
{ActionType: "METRIC", Title: "بهبود پرداخت موفق", Rationale: "بر پایه شواهد", ExpectedImpact: "اثر قابل سنجش", Effort: "LOW", EvidenceIDs: []string{"payment-health"}, MetricID: &metricID, MetricDirection: &direction, ActionLevel: &level, Subtasks: []GenerationSubtask{{Title: "یک گزارش خطا آماده کنید"}, {Title: "یک اصلاح مشخص انتخاب کنید"}, {Title: "نتیجه اصلاح را بررسی کنید"}}},
{ActionType: "METRIC", Title: "کاهش ریزش پرداخت", Rationale: "بر پایه شواهد", ExpectedImpact: "اثر قابل سنجش", Effort: "HIGH", EvidenceIDs: []string{"payment-health"}, MetricID: &metricID, MetricDirection: &direction, ActionLevel: &level, Subtasks: []GenerationSubtask{{Title: "نقطه ریزش را شناسایی کنید"}, {Title: "یک اقدام اصلاحی اجرا کنید"}, {Title: "بازخورد کاربران را ثبت کنید"}}},
}}
evidence := MetricEvidence{Sessions: 120, Values: map[string]float64{"success_rate": 80}, EvidenceIDs: []string{"payment-health"}}
if err := validateGeneration(generation, evidence); err != nil {
t.Fatal(err)
}
generation.Suggestions[0].Subtasks = generation.Suggestions[0].Subtasks[:2]
if err := validateGeneration(generation, evidence); err == nil {
t.Fatal("generation with fewer than three subtasks must be rejected")
}
}
func TestNormalizeGenerationClearsMetricFieldsFromManualSuggestions(t *testing.T) {
metricID := "paid_count"
direction := "INCREASE"
level := "SMALL"
generation := Generation{Suggestions: []GenerationSuggestion{{
ActionType: "MANUAL",
MetricID: &metricID,
MetricDirection: &direction,
ActionLevel: &level,
}}}
normalizeGeneration(&generation)
suggestion := generation.Suggestions[0]
if suggestion.MetricID != nil || suggestion.MetricDirection != nil || suggestion.ActionLevel != nil {
t.Fatalf("manual suggestion retained metric fields: %+v", suggestion)
}
}
func TestNormalizeGenerationReplacesInternalTermsInUserFacingProse(t *testing.T) {
generation := Generation{
DailyBrief: "شواهد payment-health و operational-efficiency بررسی شدند.",
Suggestions: []GenerationSuggestion{{
Title: "بهبود success_rate",
Rationale: "payment-volume افت کرده است.",
ExpectedImpact: "کاهش fee_amount",
}},
}
normalizeGeneration(&generation)
if generation.DailyBrief != "شواهد نرخ موفقیت پرداخت و سرعت تأیید پرداخت بررسی شدند." {
t.Fatalf("DailyBrief = %q", generation.DailyBrief)
}
suggestion := generation.Suggestions[0]
if suggestion.Title != "بهبود نرخ موفقیت پرداخت" || suggestion.Rationale != "تعداد و مبلغ پرداخت موفق افت کرده است." || suggestion.ExpectedImpact != "کاهش کارمزد پرداخت‌شده" {
t.Fatalf("suggestion prose = %+v", suggestion)
}
}