85 lines
2.5 KiB
Go
85 lines
2.5 KiB
Go
package model
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"go.mongodb.org/mongo-driver/v2/bson"
|
|
)
|
|
|
|
func TestCryptoAddressPaymentDataReadsAssetFromGenericDocument(t *testing.T) {
|
|
// The intermediate BSON document produced by PATCH decodes a nested asset
|
|
// as bson.D before the payment service record is encoded.
|
|
var payload any
|
|
if err := json.Unmarshal([]byte(`{"asset":{"chain":"tron_mainnet","token_symbol":"usdt"},"address":"TXabc","memo":"tag-1"}`), &payload); err != nil {
|
|
t.Fatalf("unmarshal payload: %v", err)
|
|
}
|
|
raw, err := bson.Marshal(payload)
|
|
if err != nil {
|
|
t.Fatalf("marshal payload: %v", err)
|
|
}
|
|
|
|
var data CryptoAddressPaymentData
|
|
if err := bson.Unmarshal(raw, &data); err != nil {
|
|
t.Fatalf("unmarshal crypto data: %v", err)
|
|
}
|
|
|
|
if got, want := string(data.Currency), "USDT"; got != want {
|
|
t.Fatalf("currency mismatch: got=%q want=%q", got, want)
|
|
}
|
|
if got, want := data.Network, "TRON_MAINNET"; got != want {
|
|
t.Fatalf("network mismatch: got=%q want=%q", got, want)
|
|
}
|
|
if got, want := data.Address, "TXabc"; got != want {
|
|
t.Fatalf("address mismatch: got=%q want=%q", got, want)
|
|
}
|
|
if got, want := strPtr(data.DestinationTag), "tag-1"; got != want {
|
|
t.Fatalf("destination tag mismatch: got=%q want=%q", got, want)
|
|
}
|
|
}
|
|
|
|
func TestCryptoAddressPaymentDataReadsAssetFromMapDocument(t *testing.T) {
|
|
raw, err := bson.Marshal(bson.M{
|
|
"asset": bson.M{"chain": "arbitrum_one", "tokenSymbol": "usdc"},
|
|
"address": "0xabc",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("marshal crypto data: %v", err)
|
|
}
|
|
|
|
var data CryptoAddressPaymentData
|
|
if err := bson.Unmarshal(raw, &data); err != nil {
|
|
t.Fatalf("unmarshal crypto data: %v", err)
|
|
}
|
|
|
|
if got, want := string(data.Currency), "USDC"; got != want {
|
|
t.Fatalf("currency mismatch: got=%q want=%q", got, want)
|
|
}
|
|
if got, want := data.Network, "ARBITRUM_ONE"; got != want {
|
|
t.Fatalf("network mismatch: got=%q want=%q", got, want)
|
|
}
|
|
}
|
|
|
|
func TestCryptoAddressPaymentDataReadsStoredFlatShape(t *testing.T) {
|
|
raw, err := bson.Marshal(CryptoAddressPaymentData{
|
|
Currency: "USDT",
|
|
Address: "TXabc",
|
|
Network: "TRON_MAINNET",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("marshal crypto data: %v", err)
|
|
}
|
|
|
|
var data CryptoAddressPaymentData
|
|
if err := bson.Unmarshal(raw, &data); err != nil {
|
|
t.Fatalf("unmarshal crypto data: %v", err)
|
|
}
|
|
|
|
if got, want := string(data.Currency), "USDT"; got != want {
|
|
t.Fatalf("currency mismatch: got=%q want=%q", got, want)
|
|
}
|
|
if got, want := data.Network, "TRON_MAINNET"; got != want {
|
|
t.Fatalf("network mismatch: got=%q want=%q", got, want)
|
|
}
|
|
}
|