github.com/stripe/stripe-go/v76@v76.25.0/price_test.go (about)

     1  package stripe
     2  
     3  import (
     4  	"encoding/json"
     5  	"testing"
     6  
     7  	assert "github.com/stretchr/testify/require"
     8  	"github.com/stripe/stripe-go/v76/form"
     9  )
    10  
    11  func TestPrice_Unmarshal(t *testing.T) {
    12  	priceData := map[string]interface{}{
    13  		"id":     "price_123",
    14  		"object": "price",
    15  		"recurring": map[string]interface{}{
    16  			"aggregate_usage": "last_during_period",
    17  			"interval":        "month",
    18  			"interval_count":  6,
    19  			"usage_type":      "metered",
    20  		},
    21  		"tiers": []map[string]interface{}{
    22  			{
    23  				"flat_amount_decimal": "0.0111111111",
    24  				"up_to":               5,
    25  			},
    26  			{
    27  				"flat_amount_decimal": "0.0222222222",
    28  				"up_to":               10,
    29  			},
    30  			{
    31  				"flat_amount_decimal": "0.0333333333",
    32  			},
    33  		},
    34  		"tiers_mode":          "volume",
    35  		"unit_amount":         0,
    36  		"unit_amount_decimal": "0.0123456789",
    37  	}
    38  
    39  	bytes, err := json.Marshal(&priceData)
    40  	assert.NoError(t, err)
    41  
    42  	var price Price
    43  	err = json.Unmarshal(bytes, &price)
    44  	assert.NoError(t, err)
    45  
    46  	assert.Equal(t, PriceRecurringAggregateUsageLastDuringPeriod, price.Recurring.AggregateUsage)
    47  	assert.Equal(t, PriceRecurringIntervalMonth, price.Recurring.Interval)
    48  	assert.Equal(t, int64(6), price.Recurring.IntervalCount)
    49  	assert.Equal(t, PriceRecurringUsageTypeMetered, price.Recurring.UsageType)
    50  	assert.Equal(t, 3, len(price.Tiers))
    51  	assert.Equal(t, 0.0111111111, price.Tiers[0].FlatAmountDecimal)
    52  	assert.Equal(t, int64(5), price.Tiers[0].UpTo)
    53  	assert.Equal(t, PriceTiersModeVolume, price.TiersMode)
    54  	assert.Equal(t, 0.0123456789, price.UnitAmountDecimal)
    55  }
    56  
    57  func TestPriceTierParams_AppendTo(t *testing.T) {
    58  	params := &PriceTierParams{
    59  		UnitAmount: Int64(500),
    60  		UpToInf:    Bool(true),
    61  	}
    62  
    63  	// TODO: figure out why this doesn't work.
    64  	body := &form.Values{}
    65  	form.AppendTo(body, params)
    66  	t.Logf("body = %+v", body)
    67  	assert.Equal(t, []string{"inf"}, body.Get("up_to"))
    68  }