85 lines
3.8 KiB
Go
85 lines
3.8 KiB
Go
|
|
package runtime
|
||
|
|
|
||
|
|
import (
|
||
|
|
"strings"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestEnforceVerifiedPackageReplyReplacesBasicRecommendation(t *testing.T) {
|
||
|
|
results := map[string]string{
|
||
|
|
"business/device_diagnosis": `{"network_diagnosis":{"required_package_type":"addon"}}`,
|
||
|
|
"business/device_package_catalog": `[
|
||
|
|
{"sequence":1,"name":"20G加油包","package_type":"addon","price":"20.00","can_purchase":true,"recommended":true},
|
||
|
|
{"sequence":2,"name":"200G加油包","package_type":"addon","price":"200.00","can_purchase":true,"recommended":true}
|
||
|
|
]`,
|
||
|
|
}
|
||
|
|
got := enforceVerifiedPackageReply("推荐操作:订购一个立即生效的独立套餐(如12.9元30G),最快恢复。", results)
|
||
|
|
for _, expected := range []string{"当前只能购买加油包", "1. 20G加油包 - ¥20.00", "2. 200G加油包 - ¥200.00"} {
|
||
|
|
if !strings.Contains(got, expected) {
|
||
|
|
t.Fatalf("missing %q in guarded reply: %s", expected, got)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if strings.Contains(got, "12.9") || strings.Contains(got, "订购一个立即生效的独立套餐") {
|
||
|
|
t.Fatalf("unsafe basic package recommendation survived: %s", got)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestEnforceVerifiedPackageReplyDoesNotTrustDiagnosisAlone(t *testing.T) {
|
||
|
|
results := map[string]string{
|
||
|
|
"business/card_diagnosis": `{"required_package_type":"addon"}`,
|
||
|
|
}
|
||
|
|
want := "当前不能购买基础套餐,应购买加油包。"
|
||
|
|
if got := enforceVerifiedPackageReply(want, results); got != want {
|
||
|
|
t.Fatalf("correct answer was unexpectedly replaced: %s", got)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestEnforceVerifiedPackageReplyRendersAddonCatalogDeterministically(t *testing.T) {
|
||
|
|
results := map[string]string{
|
||
|
|
"business/card_package_catalog": `{"items":[{"sequence":8,"name":"20G加油包","package_type":"addon","price":"20.00","can_purchase":true,"recommended":true}]}`,
|
||
|
|
}
|
||
|
|
got := enforceVerifiedPackageReply("模型自由发挥的正确加油包回答", results)
|
||
|
|
for _, expected := range []string{"当前只能购买加油包", "8. 20G加油包 - ¥20.00", "请回复加油包序号"} {
|
||
|
|
if !strings.Contains(got, expected) {
|
||
|
|
t.Fatalf("missing %q in deterministic reply: %s", expected, got)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestEnforceVerifiedPackageReplyIgnoresUnrelatedNestedAddonField(t *testing.T) {
|
||
|
|
want := "这是普通售后回答。"
|
||
|
|
results := map[string]string{
|
||
|
|
"business/device_status": `{"metadata":{"required_package_type":"addon"}}`,
|
||
|
|
}
|
||
|
|
if got := enforceVerifiedPackageReply(want, results); got != want {
|
||
|
|
t.Fatalf("unrelated tool result changed answer: %s", got)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestEnforceVerifiedPackageReplyKeepsBasicCatalogReply(t *testing.T) {
|
||
|
|
want := "当前可以购买基础套餐。"
|
||
|
|
results := map[string]string{
|
||
|
|
"business/device_package_catalog": `[{"sequence":1,"name":"30G月包","package_type":"basic","can_purchase":true,"recommended":true},{"sequence":2,"name":"20G加油包","package_type":"addon","can_purchase":false}]`,
|
||
|
|
}
|
||
|
|
if got := enforceVerifiedPackageReply(want, results); got != want {
|
||
|
|
t.Fatalf("mixed/basic catalog unexpectedly forced add-on: %s", got)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestEnforceVerifiedPackageReplyRequiresVerifiedAddonState(t *testing.T) {
|
||
|
|
want := "您可以购买基础套餐。"
|
||
|
|
if got := enforceVerifiedPackageReply(want, map[string]string{"business/card_diagnosis": `{"required_package_type":"basic"}`}); got != want {
|
||
|
|
t.Fatalf("answer changed without verified add-on requirement: %s", got)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestEnforceVerifiedPackageReplyExplainsInsufficientBalance(t *testing.T) {
|
||
|
|
results := map[string]string{
|
||
|
|
"business/card_package_catalog": `[{"sequence":1,"name":"20G加油包","package_type":"addon","price":"20.00","can_purchase":false,"reason_code":"insufficient_balance","unavailable_reason":"当前余额不足"}]`,
|
||
|
|
}
|
||
|
|
got := enforceVerifiedPackageReply("我推荐您购买基础套餐。", results)
|
||
|
|
if !strings.Contains(got, "请先充值余额") || !strings.Contains(got, "再购买加油包") {
|
||
|
|
t.Fatalf("insufficient balance guidance missing: %s", got)
|
||
|
|
}
|
||
|
|
}
|