Files
llm-intelligence/scripts/import_cucloud_pricing_test.go

96 lines
3.1 KiB
Go
Raw Permalink Normal View History

//go:build llm_script
package main
import (
"bytes"
"os"
"path/filepath"
"strings"
"testing"
)
func TestParseCUCloudPricingBuildsBlendedRecords(t *testing.T) {
raw, err := os.ReadFile(filepath.Join("testdata", "cucloud_pricing_sample.html"))
if err != nil {
t.Fatalf("读取 fixture 失败: %v", err)
}
records, summary, err := parseCUCloudPricingCatalog(string(raw), defaultCUCloudPricingURL)
if err != nil {
t.Fatalf("parseCUCloudPricingCatalog 返回错误: %v", err)
}
if len(records) != 4 {
t.Fatalf("期望 4 条联通云价格记录,实际 %d", len(records))
}
if summary.Models != 3 || summary.Records != 4 || summary.Regions != 2 {
t.Fatalf("summary 计数错误: %+v", summary)
}
if !summary.PaygModeConfirmed || summary.PaygPriceTablePublic {
t.Fatalf("payg 摘要错误: %+v", summary)
}
recordMap := make(map[string]officialPricingRecord, len(records))
for _, record := range records {
recordMap[record.ModelName+"|"+record.Region] = record
}
pro := recordMap["DeepSeek-V4-Pro|贵阳基地二区"]
if pro.InputPrice != 9.3 || pro.OutputPrice != 9.3 || pro.ProviderName != "DeepSeek" {
t.Fatalf("DeepSeek-V4-Pro 记录错误: %+v", pro)
}
flash := recordMap["DeepSeek-V4-Flash|贵阳基地二区"]
if flash.InputPrice != 0.7 || flash.OutputPrice != 0.7 || flash.ProviderName != "DeepSeek" {
t.Fatalf("DeepSeek-V4-Flash 记录错误: %+v", flash)
}
miniWuhan := recordMap["MiniMax-M2.5|武汉四区"]
if miniWuhan.InputPrice != 1.1 || miniWuhan.OutputPrice != 1.1 || miniWuhan.ProviderName != "MiniMax" {
t.Fatalf("MiniMax-M2.5 武汉记录错误: %+v", miniWuhan)
}
miniGuiyang := recordMap["MiniMax-M2.5|贵阳基地二区"]
if miniGuiyang.InputPrice != 1.1 || miniGuiyang.OutputPrice != 1.1 {
t.Fatalf("MiniMax-M2.5 贵阳记录错误: %+v", miniGuiyang)
}
if _, ok := recordMap["MiniMax-M2.5|上海二十二区"]; ok {
t.Fatalf("不支持的区域不应生成记录")
}
}
func TestParseCUCloudPricingRequiresBlendedPriceTable(t *testing.T) {
raw, err := os.ReadFile(filepath.Join("testdata", "cucloud_pricing_sample.html"))
if err != nil {
t.Fatalf("读取 fixture 失败: %v", err)
}
broken := strings.Replace(string(raw), "综合单价9.30元/百万tokens", "综合单价元/百万tokens", 1)
if _, _, err := parseCUCloudPricingCatalog(broken, defaultCUCloudPricingURL); err == nil {
t.Fatalf("缺少 blended 价格时应返回错误")
}
}
func TestRunCUCloudPricingImportDryRunPrintsSummary(t *testing.T) {
var out bytes.Buffer
err := runCUCloudPricingImport(cucloudPricingImportConfig{
URL: defaultCUCloudPricingURL,
Fixture: filepath.Join("testdata", "cucloud_pricing_sample.html"),
DryRun: true,
}, nil, &out)
if err != nil {
t.Fatalf("runCUCloudPricingImport 返回错误: %v", err)
}
output := out.String()
for _, want := range []string{
"source=cucloud-pricing-import",
"models=3",
"records=4",
"regions=2",
"operator=Unicom AISP",
"payg_mode_confirmed=true",
"payg_price_table_public=false",
"dry_run=true",
} {
if !strings.Contains(output, want) {
t.Fatalf("输出缺少 %q实际: %q", want, output)
}
}
}