//go:build llm_script package main import ( "bytes" "net/http" "net/http/httptest" "os" "path/filepath" "strings" "testing" ) func TestParseTencentCatalogExtractsPlansAndModels(t *testing.T) { raw, err := os.ReadFile(filepath.Join("testdata", "tencent_token_plan_sample.txt")) if err != nil { t.Fatalf("读取样例失败: %v", err) } catalog, err := parseTencentCatalog(string(raw)) if err != nil { t.Fatalf("parseTencentCatalog 失败: %v", err) } if catalog.UpdatedAt != "2026-04-27 17:18:02" { t.Fatalf("更新时间错误: %q", catalog.UpdatedAt) } if len(catalog.Plans) != 8 { t.Fatalf("期望 8 个套餐,实际 %d", len(catalog.Plans)) } if len(catalog.Models) != 11 { t.Fatalf("期望 11 个模型,实际 %d", len(catalog.Models)) } firstPlan := catalog.Plans[0] if firstPlan.Series != "通用 Token Plan" { t.Fatalf("套餐系列错误: %q", firstPlan.Series) } if firstPlan.Tier != "Lite" { t.Fatalf("套餐档位错误: %q", firstPlan.Tier) } if firstPlan.Price != "39元/月" { t.Fatalf("套餐价格错误: %q", firstPlan.Price) } if firstPlan.Quota != "3500万 Tokens" { t.Fatalf("套餐额度错误: %q", firstPlan.Quota) } lastModel := catalog.Models[len(catalog.Models)-1] if lastModel.Name != "Hy3 preview" { t.Fatalf("最后一个模型错误: %q", lastModel.Name) } if lastModel.ModelID != "hy3-preview" { t.Fatalf("最后一个模型 ID 错误: %q", lastModel.ModelID) } if lastModel.ContextLength != 262144 { t.Fatalf("Hy3 preview 上下文长度错误: %d", lastModel.ContextLength) } } func TestRunTencentCatalogDryRunPrintsSummary(t *testing.T) { raw, err := os.ReadFile(filepath.Join("testdata", "tencent_token_plan_sample.txt")) if err != nil { t.Fatalf("读取样例失败: %v", err) } server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/html; charset=utf-8") _, _ = w.Write([]byte("
" + string(raw) + "
")) })) defer server.Close() var out bytes.Buffer err = runTencentCatalog(fetchTencentCatalogConfig{ URL: server.URL, DryRun: true, Timeout: defaultTencentCatalogTimeout, }, server.Client(), &out) if err != nil { t.Fatalf("runTencentCatalog 失败: %v", err) } output := out.String() for _, want := range []string{ "source=tencent-public-catalog", "plans=8", "models=11", "series=Hy Token Plan:4,通用 Token Plan:4", "updated_at=2026-04-27 17:18:02", } { if !strings.Contains(output, want) { t.Fatalf("输出缺少 %q,实际: %q", want, output) } } }