Accept string or number for amount in verify and webhook payloads so GET /payments/verify can complete successfully. Co-authored-by: Cursor <cursoragent@cursor.com>
45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
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())
|
|
}
|
|
}
|