86 lines
1.8 KiB
Go
86 lines
1.8 KiB
Go
package wire_test
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
decimal "github.com/alpacahq/alpacadecimal"
|
|
"s1d3sw1ped/robinhood-agentic-mcp/internal/wire"
|
|
)
|
|
|
|
func TestUnwrap_dataEnvelope(t *testing.T) {
|
|
t.Parallel()
|
|
in := json.RawMessage(`{"data":{"cash":"1000"}}`)
|
|
got := wire.Unwrap(in)
|
|
if string(got) != `{"cash":"1000"}` {
|
|
t.Fatalf("got %s", got)
|
|
}
|
|
}
|
|
|
|
func TestDec_table(t *testing.T) {
|
|
t.Parallel()
|
|
zero := decimal.Zero
|
|
tests := []struct {
|
|
name string
|
|
in any
|
|
want decimal.Decimal
|
|
wantErr bool
|
|
}{
|
|
{"number", float64(99.6), decimal.RequireFromString("99.6"), false},
|
|
{"string", "99.60", decimal.RequireFromString("99.60"), false},
|
|
{"zeroNum", float64(0), zero, false},
|
|
{"zeroStr", "0", zero, false},
|
|
{"emptyStr", "", zero, false},
|
|
{"nil", nil, zero, false},
|
|
{"bad", "n/a", zero, true},
|
|
{"obj", map[string]any{"x": 1}, zero, true},
|
|
{"bool", true, zero, true},
|
|
}
|
|
for _, tc := range tests {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
got, err := wire.Dec(tc.in)
|
|
if tc.wantErr {
|
|
if err == nil {
|
|
t.Fatalf("want error")
|
|
}
|
|
return
|
|
}
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !got.Equal(tc.want) {
|
|
t.Fatalf("got %s want %s", got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestDecOpt_nullIsNil(t *testing.T) {
|
|
t.Parallel()
|
|
got, err := wire.DecOpt(nil)
|
|
if err != nil || got != nil {
|
|
t.Fatalf("got %v err %v", got, err)
|
|
}
|
|
got, err = wire.DecOpt("")
|
|
if err != nil || got != nil {
|
|
t.Fatalf("empty string: %v %v", got, err)
|
|
}
|
|
got, err = wire.DecOpt("0")
|
|
if err != nil || got == nil || !got.IsZero() {
|
|
t.Fatalf("zero: %v %v", got, err)
|
|
}
|
|
_, err = wire.DecOpt("n/a")
|
|
if err == nil {
|
|
t.Fatal("unparseable must error")
|
|
}
|
|
}
|
|
|
|
func TestEncode(t *testing.T) {
|
|
t.Parallel()
|
|
d := decimal.RequireFromString("99.6")
|
|
if wire.Encode(d) != d.String() {
|
|
t.Fatalf("%q", wire.Encode(d))
|
|
}
|
|
}
|