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  }