github.com/stripe/stripe-go/v76@v76.25.0/invoice_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 TestInvoiceParams_AppendTo(t *testing.T) { 12 { 13 params := &InvoiceUpcomingParams{SubscriptionBillingCycleAnchorNow: Bool(true)} 14 body := &form.Values{} 15 form.AppendTo(body, params) 16 t.Logf("body = %+v", body) 17 assert.Equal(t, []string{"now"}, body.Get("subscription_billing_cycle_anchor")) 18 } 19 20 { 21 params := &InvoiceUpcomingParams{SubscriptionBillingCycleAnchorUnchanged: Bool(true)} 22 body := &form.Values{} 23 form.AppendTo(body, params) 24 t.Logf("body = %+v", body) 25 assert.Equal(t, []string{"unchanged"}, body.Get("subscription_billing_cycle_anchor")) 26 } 27 28 { 29 params := &InvoiceUpcomingParams{SubscriptionTrialEndNow: Bool(true)} 30 body := &form.Values{} 31 form.AppendTo(body, params) 32 t.Logf("body = %+v", body) 33 assert.Equal(t, []string{"now"}, body.Get("subscription_trial_end")) 34 } 35 } 36 37 func TestInvoice_Unmarshal(t *testing.T) { 38 invoiceDataUnexpanded := map[string]interface{}{ 39 "id": "in_123", 40 "object": "invoice", 41 "discounts": []string{ 42 "dis_123", 43 "dis_abc", 44 }, 45 "total_discount_amounts": []map[string]interface{}{ 46 { 47 "amount": 123, 48 "discount": "dis_123", 49 }, 50 { 51 "amount": 345, 52 "discount": "dis_abc", 53 }, 54 }, 55 } 56 57 bytes, err := json.Marshal(&invoiceDataUnexpanded) 58 assert.NoError(t, err) 59 60 var invoiceUnexpanded Invoice 61 err = json.Unmarshal(bytes, &invoiceUnexpanded) 62 assert.NoError(t, err) 63 64 assert.Equal(t, "in_123", invoiceUnexpanded.ID) 65 assert.Equal(t, "invoice", invoiceUnexpanded.Object) 66 67 assert.Equal(t, 2, len(invoiceUnexpanded.Discounts)) 68 assert.Equal(t, "dis_123", invoiceUnexpanded.Discounts[0].ID) 69 assert.Equal(t, "dis_abc", invoiceUnexpanded.Discounts[1].ID) 70 71 assert.Equal(t, 2, len(invoiceUnexpanded.TotalDiscountAmounts)) 72 assert.Equal(t, int64(123), invoiceUnexpanded.TotalDiscountAmounts[0].Amount) 73 assert.Equal(t, "dis_123", invoiceUnexpanded.TotalDiscountAmounts[0].Discount.ID) 74 assert.Equal(t, int64(345), invoiceUnexpanded.TotalDiscountAmounts[1].Amount) 75 assert.Equal(t, "dis_abc", invoiceUnexpanded.TotalDiscountAmounts[1].Discount.ID) 76 77 invoiceDataExpanded := map[string]interface{}{ 78 "id": "in_123", 79 "object": "invoice", 80 "discounts": []map[string]interface{}{ 81 { 82 "id": "dis_123", 83 "object": "discount", 84 "coupon": map[string]interface{}{ 85 "id": "co_123", 86 "object": "coupon", 87 "currency": "usd", 88 "percent_off": 25.5, 89 }, 90 }, 91 { 92 "id": "dis_abc", 93 "object": "discount", 94 "coupon": map[string]interface{}{ 95 "id": "co_abc", 96 "object": "coupon", 97 "currency": "eur", 98 "percent_off": 35.5, 99 }, 100 }, 101 }, 102 "total_discount_amounts": []map[string]interface{}{ 103 { 104 "amount": 123, 105 "discount": map[string]interface{}{ 106 "id": "dis_123", 107 "object": "discount", 108 "coupon": map[string]interface{}{ 109 "id": "co_123", 110 "object": "coupon", 111 "currency": "usd", 112 "percent_off": 25.5, 113 }, 114 }, 115 }, 116 { 117 "amount": 345, 118 "discount": map[string]interface{}{ 119 "id": "dis_abc", 120 "object": "discount", 121 "coupon": map[string]interface{}{ 122 "id": "co_abc", 123 "object": "coupon", 124 "currency": "eur", 125 "percent_off": 35.5, 126 }, 127 }, 128 }, 129 }, 130 } 131 132 bytes2, err2 := json.Marshal(&invoiceDataExpanded) 133 assert.NoError(t, err2) 134 135 var invoiceExpanded Invoice 136 err = json.Unmarshal(bytes2, &invoiceExpanded) 137 assert.NoError(t, err) 138 139 assert.Equal(t, "in_123", invoiceExpanded.ID) 140 assert.Equal(t, "invoice", invoiceExpanded.Object) 141 142 assert.Equal(t, 2, len(invoiceExpanded.Discounts)) 143 assert.Equal(t, "dis_123", invoiceExpanded.Discounts[0].ID) 144 assert.Equal(t, "discount", invoiceExpanded.Discounts[0].Object) 145 assert.Equal(t, "co_123", invoiceExpanded.Discounts[0].Coupon.ID) 146 assert.Equal(t, "coupon", invoiceExpanded.Discounts[0].Coupon.Object) 147 assert.Equal(t, float64(25.5), invoiceExpanded.Discounts[0].Coupon.PercentOff) 148 assert.Equal(t, "dis_abc", invoiceExpanded.Discounts[1].ID) 149 assert.Equal(t, "discount", invoiceExpanded.Discounts[1].Object) 150 assert.Equal(t, "co_abc", invoiceExpanded.Discounts[1].Coupon.ID) 151 assert.Equal(t, "coupon", invoiceExpanded.Discounts[1].Coupon.Object) 152 assert.Equal(t, float64(35.5), invoiceExpanded.Discounts[1].Coupon.PercentOff) 153 154 assert.Equal(t, 2, len(invoiceExpanded.TotalDiscountAmounts)) 155 assert.Equal(t, int64(123), invoiceExpanded.TotalDiscountAmounts[0].Amount) 156 assert.Equal(t, "dis_123", invoiceExpanded.TotalDiscountAmounts[0].Discount.ID) 157 assert.Equal(t, "discount", invoiceExpanded.TotalDiscountAmounts[0].Discount.Object) 158 assert.Equal(t, "co_123", invoiceExpanded.TotalDiscountAmounts[0].Discount.Coupon.ID) 159 assert.Equal(t, "coupon", invoiceExpanded.TotalDiscountAmounts[0].Discount.Coupon.Object) 160 assert.Equal(t, float64(25.5), invoiceExpanded.TotalDiscountAmounts[0].Discount.Coupon.PercentOff) 161 assert.Equal(t, int64(345), invoiceExpanded.TotalDiscountAmounts[1].Amount) 162 assert.Equal(t, "dis_abc", invoiceExpanded.TotalDiscountAmounts[1].Discount.ID) 163 assert.Equal(t, "discount", invoiceExpanded.TotalDiscountAmounts[1].Discount.Object) 164 assert.Equal(t, "co_abc", invoiceExpanded.TotalDiscountAmounts[1].Discount.Coupon.ID) 165 assert.Equal(t, "coupon", invoiceExpanded.TotalDiscountAmounts[1].Discount.Coupon.Object) 166 assert.Equal(t, float64(35.5), invoiceExpanded.TotalDiscountAmounts[1].Discount.Coupon.PercentOff) 167 } 168 169 func TestInvoice_UnmarshalJSON(t *testing.T) { 170 // Unmarshals from a JSON string 171 { 172 var v Invoice 173 err := json.Unmarshal([]byte(`"in_123"`), &v) 174 assert.NoError(t, err) 175 assert.Equal(t, "in_123", v.ID) 176 } 177 178 // Unmarshals from a JSON object 179 { 180 v := Invoice{ID: "in_123"} 181 data, err := json.Marshal(&v) 182 assert.NoError(t, err) 183 184 err = json.Unmarshal(data, &v) 185 assert.NoError(t, err) 186 assert.Equal(t, "in_123", v.ID) 187 } 188 }