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