github.com/stripe/stripe-go/v76@v76.25.0/balance_test.go (about) 1 package stripe 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 assert "github.com/stretchr/testify/require" 8 ) 9 10 func TestBalance_Unmarshal(t *testing.T) { 11 balanceData := map[string]interface{}{ 12 "available": []map[string]interface{}{ 13 { 14 "amount": 111, 15 "currency": "usd", 16 "source_types": map[string]interface{}{ 17 "bank_account": 100, 18 "card": 11, 19 }, 20 }, 21 { 22 "amount": 222, 23 "currency": "eur", 24 "source_types": map[string]interface{}{ 25 "card": 222, 26 }, 27 }, 28 }, 29 "object": "balance", 30 "pending": []map[string]interface{}{ 31 { 32 "amount": 333, 33 "currency": "usd", 34 "source_types": map[string]interface{}{ 35 "bank_account": 333, 36 }, 37 }, 38 { 39 "amount": 444, 40 "currency": "eur", 41 "source_types": map[string]interface{}{ 42 "bank_account": 222, 43 "card": 222, 44 }, 45 }, 46 }, 47 } 48 49 bytes, err := json.Marshal(&balanceData) 50 assert.NoError(t, err) 51 52 var balance Balance 53 err = json.Unmarshal(bytes, &balance) 54 assert.NoError(t, err) 55 56 assert.Equal(t, int64(111), balance.Available[0].Amount) 57 assert.Equal(t, CurrencyUSD, balance.Available[0].Currency) 58 assert.Equal(t, int64(222), balance.Available[1].Amount) 59 assert.Equal(t, CurrencyEUR, balance.Available[1].Currency) 60 assert.Equal(t, int64(222), balance.Available[1].Amount) 61 62 assert.Equal(t, int64(333), balance.Pending[0].Amount) 63 assert.Equal(t, CurrencyUSD, balance.Pending[0].Currency) 64 assert.Equal(t, int64(444), balance.Pending[1].Amount) 65 assert.Equal(t, CurrencyEUR, balance.Pending[1].Currency) 66 67 // Confirm source-type deserialization works 68 assert.Equal(t, int64(100), balance.Available[0].SourceTypes[BalanceSourceTypeBankAccount]) 69 assert.Equal(t, int64(11), balance.Available[0].SourceTypes[BalanceSourceTypeCard]) 70 }