github.com/stripe/stripe-go/v76@v76.25.0/plan_test.go (about) 1 package stripe 2 3 import ( 4 "encoding/json" 5 "strconv" 6 "testing" 7 8 assert "github.com/stretchr/testify/require" 9 "github.com/stripe/stripe-go/v76/form" 10 ) 11 12 func TestPlan_Unmarshal(t *testing.T) { 13 planData := map[string]interface{}{ 14 "id": "pl_123", 15 "object": "plan", 16 "amount": 0, 17 "amount_decimal": "0.0123456789", 18 } 19 20 bytes, err := json.Marshal(&planData) 21 assert.NoError(t, err) 22 23 var plan Plan 24 err = json.Unmarshal(bytes, &plan) 25 assert.NoError(t, err) 26 27 assert.Equal(t, 0.0123456789, plan.AmountDecimal) 28 } 29 30 func TestPlanListParams_AppendTo(t *testing.T) { 31 testCases := []struct { 32 field string 33 params *PlanListParams 34 want interface{} 35 }{ 36 {"created", &PlanListParams{Created: Int64(123)}, strconv.FormatInt(123, 10)}, 37 { 38 "created[gt]", 39 &PlanListParams{CreatedRange: &RangeQueryParams{GreaterThan: 123}}, 40 strconv.FormatInt(123, 10), 41 }, 42 } 43 for _, tc := range testCases { 44 t.Run(tc.field, func(t *testing.T) { 45 body := &form.Values{} 46 form.AppendTo(body, tc.params) 47 values := body.ToValues() 48 assert.Equal(t, tc.want, values.Get(tc.field)) 49 }) 50 } 51 } 52 53 func TestPlanListParams_AppendTo_Empty(t *testing.T) { 54 body := &form.Values{} 55 params := &PlanListParams{} 56 form.AppendTo(body, params) 57 assert.True(t, body.Empty()) 58 } 59 60 func TestPlanParams_AppendTo(t *testing.T) { 61 productParams := PlanProductParams{ 62 ID: String("ID"), 63 Name: String("Sapphire Elite"), 64 StatementDescriptor: String("SAPPHIRE"), 65 } 66 tiers := []*PlanTierParams{ 67 {UnitAmount: Int64(123), UpTo: Int64(321)}, 68 {UnitAmount: Int64(123), UpToInf: Bool(true)}} 69 testCases := []struct { 70 field string 71 params *PlanParams 72 want interface{} 73 }{ 74 {"amount", &PlanParams{Amount: Int64(123)}, strconv.FormatUint(123, 10)}, 75 {"currency", &PlanParams{Currency: String(string(CurrencyUSD))}, "usd"}, 76 {"id", &PlanParams{ID: String("sapphire-elite")}, "sapphire-elite"}, 77 {"interval", &PlanParams{Interval: String("month")}, "month"}, 78 {"interval_count", &PlanParams{IntervalCount: Int64(3)}, strconv.FormatUint(3, 10)}, 79 {"product[id]", &PlanParams{Product: &PlanProductParams{ID: String("prod_123abc")}}, "prod_123abc"}, 80 {"product[name]", &PlanParams{Product: &productParams}, "Sapphire Elite"}, 81 {"product[statement_descriptor]", &PlanParams{Product: &productParams}, "SAPPHIRE"}, 82 {"tiers_mode", &PlanParams{TiersMode: String(string(PlanTiersModeVolume))}, "volume"}, 83 {"tiers[0][unit_amount]", &PlanParams{Tiers: tiers}, strconv.FormatUint(123, 10)}, 84 {"tiers[0][up_to]", &PlanParams{Tiers: tiers}, strconv.FormatUint(321, 10)}, 85 {"tiers[1][unit_amount]", &PlanParams{Tiers: tiers}, strconv.FormatUint(123, 10)}, 86 {"tiers[1][up_to]", &PlanParams{Tiers: tiers}, "inf"}, 87 {"transform_usage[divide_by]", &PlanParams{TransformUsage: &PlanTransformUsageParams{DivideBy: Int64(123), Round: String("round_up")}}, strconv.FormatUint(123, 10)}, 88 {"transform_usage[round]", &PlanParams{TransformUsage: &PlanTransformUsageParams{DivideBy: Int64(123), Round: String("round_up")}}, "round_up"}, 89 {"trial_period_days", &PlanParams{TrialPeriodDays: Int64(123)}, strconv.FormatUint(123, 10)}, 90 {"usage_type", &PlanParams{UsageType: String("metered")}, "metered"}, 91 } 92 for _, tc := range testCases { 93 t.Run(tc.field, func(t *testing.T) { 94 body := &form.Values{} 95 form.AppendTo(body, tc.params) 96 values := body.ToValues() 97 assert.Equal(t, tc.want, values.Get(tc.field)) 98 }) 99 } 100 } 101 102 func TestPlanParams_AppendTo_Empty(t *testing.T) { 103 body := &form.Values{} 104 params := &PlanParams{} 105 form.AppendTo(body, params) 106 assert.True(t, body.Empty()) 107 }