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  }