Files
yawan f7fc992f57
Anydoc / anydoc parser engine (push) Canceled after 0s
App / Format, vet, test, and build (push) Canceled after 0s
CLI / test (macos-latest / go 1.26) (push) Canceled after 0s
CLI / test (ubuntu-latest / go 1.26) (push) Canceled after 0s
CLI / test (windows-latest / go 1.26) (push) Canceled after 0s
Build and Push Docker Image / build-ui (push) Canceled after 0s
Build and Push Docker Image / build-docreader (push) Canceled after 0s
Build and Push Docker Image / build-sandbox (push) Canceled after 0s
Build and Push Docker Image / build-app (amd64, linux/amd64, ubuntu-latest) (push) Canceled after 0s
Build and Push Docker Image / build-app (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s
DocReader / Python tests and Go client tests (push) Canceled after 0s
Build & Publish (dsh-weknora) / Typecheck, test, pack (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (pinned) (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (latest, advisory) (push) Canceled after 0s
Frontend / Test, type-check, and build (push) Canceled after 0s
Go Lint Cache / warm lint cache (.) (push) Canceled after 0s
Go Lint Cache / warm lint cache (cli) (push) Canceled after 0s
Go Lint Cache / warm lint cache (client) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.10) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.11) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.12) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.13) (push) Canceled after 0s
Build and Push Docker Image / merge (push) Canceled after 0s
Build & Publish (dsh-weknora) / Publish to npm (push) Canceled after 0s
Build & Publish (mcp-server) / Build sdist + wheel (push) Canceled after 0s
Build & Publish (mcp-server) / Publish to PyPI (push) Canceled after 0s
WeKnora deployment source with the reviewed wiki identity, summary and recovery fixes
2026-09-22 16:19:06 +08:00

101 lines
2.9 KiB
Go

package tools
import (
"encoding/json"
"testing"
)
func TestCastParams_StringToBool(t *testing.T) {
schema := json.RawMessage(`{"type":"object","properties":{"enabled":{"type":"boolean"}}}`)
args := json.RawMessage(`{"enabled":"true"}`)
result := CastParams(args, schema)
var parsed map[string]interface{}
if err := json.Unmarshal(result, &parsed); err != nil {
t.Fatal(err)
}
if parsed["enabled"] != true {
t.Errorf("expected true, got %v (%T)", parsed["enabled"], parsed["enabled"])
}
}
func TestCastParams_StringToInt(t *testing.T) {
schema := json.RawMessage(`{"type":"object","properties":{"count":{"type":"integer"}}}`)
args := json.RawMessage(`{"count":"42"}`)
result := CastParams(args, schema)
var parsed map[string]interface{}
if err := json.Unmarshal(result, &parsed); err != nil {
t.Fatal(err)
}
// JSON numbers are float64 in Go
if parsed["count"] != float64(42) {
t.Errorf("expected 42, got %v (%T)", parsed["count"], parsed["count"])
}
}
func TestCastParams_StringToFloat(t *testing.T) {
schema := json.RawMessage(`{"type":"object","properties":{"score":{"type":"number"}}}`)
args := json.RawMessage(`{"score":"3.14"}`)
result := CastParams(args, schema)
var parsed map[string]interface{}
if err := json.Unmarshal(result, &parsed); err != nil {
t.Fatal(err)
}
if parsed["score"] != 3.14 {
t.Errorf("expected 3.14, got %v", parsed["score"])
}
}
func TestCastParams_NoChangeNeeded(t *testing.T) {
schema := json.RawMessage(`{"type":"object","properties":{"name":{"type":"string"}}}`)
args := json.RawMessage(`{"name":"hello"}`)
result := CastParams(args, schema)
if string(result) != string(args) {
t.Errorf("expected no change, got %s", result)
}
}
func TestCastParams_NilSchema(t *testing.T) {
args := json.RawMessage(`{"foo":"bar"}`)
result := CastParams(args, nil)
if string(result) != string(args) {
t.Errorf("expected no change with nil schema")
}
}
func TestCastParams_BoolFalseString(t *testing.T) {
schema := json.RawMessage(`{"type":"object","properties":{"flag":{"type":"boolean"}}}`)
args := json.RawMessage(`{"flag":"false"}`)
result := CastParams(args, schema)
var parsed map[string]interface{}
if err := json.Unmarshal(result, &parsed); err != nil {
t.Fatal(err)
}
if parsed["flag"] != false {
t.Errorf("expected false, got %v (%T)", parsed["flag"], parsed["flag"])
}
}
func TestCastParams_StringToStringArray(t *testing.T) {
schema := json.RawMessage(`{"type":"object","properties":{"patterns":{"type":"array","items":{"type":"string"}}}}`)
args := json.RawMessage(`{"patterns":"OpenClaw"}`)
result := CastParams(args, schema)
var parsed map[string]interface{}
if err := json.Unmarshal(result, &parsed); err != nil {
t.Fatal(err)
}
patterns, ok := parsed["patterns"].([]interface{})
if !ok {
t.Fatalf("expected patterns to be array, got %T", parsed["patterns"])
}
if len(patterns) != 1 || patterns[0] != "OpenClaw" {
t.Fatalf("expected [OpenClaw], got %v", patterns)
}
}