feat: simplify SOP to immediate-effect configuration
This commit is contained in:
21
internal/resultcontract/schema_test.go
Normal file
21
internal/resultcontract/schema_test.go
Normal file
@@ -0,0 +1,21 @@
|
||||
package resultcontract
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestValidateResult(t *testing.T) {
|
||||
schema, err := ParseAndValidate([]byte(`{"fields":[{"key":"recommended_products","name":"成功推荐商品","type":"array","items":{"type":"object","fields":[{"key":"product_id","name":"商品 ID","type":"string","required":true},{"key":"quantity","name":"数量","type":"integer"}]}},{"key":"note","name":"备注","type":"text"}]}`))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := ValidateResult(schema, nil); err != nil {
|
||||
t.Fatalf("empty result should be allowed: %v", err)
|
||||
}
|
||||
valid := map[string]interface{}{"recommended_products": []interface{}{map[string]interface{}{"product_id": "A", "quantity": float64(1)}}}
|
||||
if err := ValidateResult(schema, valid); err != nil {
|
||||
t.Fatalf("valid result rejected: %v", err)
|
||||
}
|
||||
invalid := map[string]interface{}{"recommended_products": []interface{}{map[string]interface{}{"quantity": float64(1)}}}
|
||||
if err := ValidateResult(schema, invalid); err == nil {
|
||||
t.Fatal("missing nested required field should be rejected")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user