Files
robinhood-agentic-mcp/internal/wire/wire_test.go
T

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))
}
}