feat: simplify SOP to immediate-effect configuration
This commit is contained in:
@@ -47,6 +47,14 @@ func TestValidateNodeAnswersRejectsAnswersForMessage(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateNodeAnswersSupportsNodeRequiredFormFields(t *testing.T) {
|
||||
fields := []model.ScenarioField{{FieldKey: "pet_name", FieldName: "宠物名称", FieldType: "text"}}
|
||||
node := model.SOPNode{Type: "form", Config: datatypes.JSON([]byte(`{"field_keys":["pet_name"],"required_field_keys":["pet_name"]}`))}
|
||||
if err := validateNodeAnswers(node, fields, map[string]interface{}{}); err == nil || !strings.Contains(err.Error(), "请填写宠物名称") {
|
||||
t.Fatalf("validateNodeAnswers() error = %v, want node-required error", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateNodeAnswersChoiceOptions(t *testing.T) {
|
||||
fields := []model.ScenarioField{{FieldKey: "intent", FieldName: "客户意向", FieldType: "text"}}
|
||||
node := model.SOPNode{Type: "choice", Config: datatypes.JSON([]byte(`{"field_key":"intent","required":true,"options":["继续了解","暂不考虑"]}`))}
|
||||
@@ -58,3 +66,26 @@ func TestValidateNodeAnswersChoiceOptions(t *testing.T) {
|
||||
t.Fatalf("validateNodeAnswers() error = %v, want invalid choice option", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateInitialAnswers(t *testing.T) {
|
||||
fields := []model.ScenarioField{
|
||||
{FieldKey: "pet_name", FieldName: "宠物名称", FieldType: "text", Required: true},
|
||||
{FieldKey: "pet_weight", FieldName: "体重", FieldType: "number"},
|
||||
}
|
||||
if err := validateInitialAnswers(fields, map[string]interface{}{"pet_name": "团子"}); err != nil {
|
||||
t.Fatalf("validateInitialAnswers() error = %v", err)
|
||||
}
|
||||
if err := validateInitialAnswers(fields, map[string]interface{}{"unknown": "value"}); err == nil || !strings.Contains(err.Error(), "不存在") {
|
||||
t.Fatalf("validateInitialAnswers() error = %v, want unknown-field error", err)
|
||||
}
|
||||
if err := validateInitialAnswers(fields, map[string]interface{}{"pet_weight": "heavy"}); err == nil || !strings.Contains(err.Error(), "必须是数字") {
|
||||
t.Fatalf("validateInitialAnswers() error = %v, want value-type error", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateInitialAnswersRequiresMappedInput(t *testing.T) {
|
||||
fields := []model.ScenarioField{{FieldKey: "customer_id", FieldName: "客户 ID", FieldType: "text", SourcePath: "customer.id", Required: true}}
|
||||
if err := validateInitialAnswers(fields, map[string]interface{}{}); err == nil {
|
||||
t.Fatal("expected missing mapped input to fail")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user