package domain import ( "encoding/json" "testing" ) func TestChapaFlexibleString_UnmarshalJSON(t *testing.T) { tests := []struct { name string raw string want string wantErr bool }{ {name: "string amount", raw: `"500.00"`, want: "500.00"}, {name: "number amount", raw: `500`, want: "500"}, {name: "float amount", raw: `499.99`, want: "499.99"}, {name: "null", raw: `null`, want: ""}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { var s ChapaFlexibleString err := json.Unmarshal([]byte(tt.raw), &s) if (err != nil) != tt.wantErr { t.Fatalf("err=%v wantErr=%v", err, tt.wantErr) } if s.String() != tt.want { t.Fatalf("got %q want %q", s.String(), tt.want) } }) } } func TestChapaVerifyResponse_UnmarshalNumberAmount(t *testing.T) { raw := `{"status":"success","message":"ok","data":{"tx_ref":"tx-1","reference":"ref-1","amount":500,"currency":"ETB","status":"success","payment_method":"telebirr"}}` var resp ChapaVerifyResponse if err := json.Unmarshal([]byte(raw), &resp); err != nil { t.Fatalf("unmarshal: %v", err) } if resp.Data.Amount.String() != "500" { t.Fatalf("amount=%q want 500", resp.Data.Amount.String()) } }