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 }