Yimaru-BackEnd/internal/domain/chapa_test.go
Yared Yemane a83745fd93 Fix Chapa verify JSON parsing when amount is numeric.
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>
2026-06-02 02:27:13 -07:00

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