func TestSourceGet(t *testing.T) { customerParams := &stripe.CustomerParams{ Email: "*****@*****.**", } customerParams.SetSource(&stripe.CardParams{ Number: "4242424242424242", Month: "06", Year: "20", }) cust, err := customer.New(customerParams) if err != nil { t.Error(err) } source, err := Get(cust.DefaultSource.ID, &stripe.CustomerSourceParams{Customer: cust.ID}) if err != nil { t.Error(err) } target := source.Card if target.LastFour != "4242" { t.Errorf("Unexpected last four %q for card number %v\n", target.LastFour, customerParams.Source.Card.Number) } if target.Brand != card.Visa { t.Errorf("Card brand %q does not match expected value\n", target.Brand) } customer.Del(cust.ID) }
func TestSubscriptionNew(t *testing.T) { customerParams := &stripe.CustomerParams{ Source: &stripe.SourceParams{ Card: &stripe.CardParams{ Number: "378282246310005", Month: "06", Year: "20", }, }, } cust, _ := customer.New(customerParams) planParams := &stripe.PlanParams{ ID: "test", Name: "Test Plan", Amount: 99, Currency: currency.USD, Interval: plan.Month, } plan.New(planParams) subParams := &stripe.SubParams{ Customer: cust.ID, Plan: "test", Quantity: 10, TaxPercent: 20.0, BillingCycleAnchor: time.Now().AddDate(0, 0, 12).Unix(), } target, err := New(subParams) if err != nil { t.Error(err) } if target.Plan.ID != subParams.Plan { t.Errorf("Plan %v does not match expected plan %v\n", target.Plan, subParams.Plan) } if target.Quantity != subParams.Quantity { t.Errorf("Quantity %v does not match expected quantity %v\n", target.Quantity, subParams.Quantity) } if target.TaxPercent != subParams.TaxPercent { t.Errorf("TaxPercent %f does not match expected TaxPercent %f\n", target.TaxPercent, subParams.TaxPercent) } if target.PeriodEnd != subParams.BillingCycleAnchor { t.Errorf("PeriodEnd %f does not match expected BillingCycleAnchor %f\n", target.PeriodEnd, subParams.BillingCycleAnchor) } customer.Del(cust.ID) plan.Del("test") }
func TestSubscriptionUpdate(t *testing.T) { customerParams := &stripe.CustomerParams{ Source: &stripe.SourceParams{ Card: &stripe.CardParams{ Number: "378282246310005", Month: "06", Year: "20", }, }, } cust, _ := customer.New(customerParams) planParams := &stripe.PlanParams{ ID: "test", Name: "Test Plan", Amount: 99, Currency: currency.USD, Interval: plan.Month, } plan.New(planParams) subParams := &stripe.SubParams{ Customer: cust.ID, Plan: "test", Quantity: 10, TrialEndNow: true, } subscription, _ := New(subParams) updatedSub := &stripe.SubParams{ Customer: cust.ID, NoProrate: true, Quantity: 13, TaxPercent: 20.0, } target, err := Update(subscription.ID, updatedSub) if err != nil { t.Error(err) } if target.Quantity != updatedSub.Quantity { t.Errorf("Quantity %v does not match expected quantity %v\n", target.Quantity, updatedSub.Quantity) } if target.TaxPercent != updatedSub.TaxPercent { t.Errorf("TaxPercent %f does not match expected tax_percent %f\n", target.TaxPercent, updatedSub.TaxPercent) } customer.Del(cust.ID) plan.Del("test") }
func TestSubscriptionList(t *testing.T) { customerParams := &stripe.CustomerParams{ Source: &stripe.SourceParams{ Card: &stripe.CardParams{ Number: "378282246310005", Month: "06", Year: "20", }, }, } cust, _ := customer.New(customerParams) planParams := &stripe.PlanParams{ ID: "test", Name: "Test Plan", Amount: 99, Currency: currency.USD, Interval: plan.Month, } plan.New(planParams) subParams := &stripe.SubParams{ Customer: cust.ID, Plan: "test", Quantity: 10, } for i := 0; i < 5; i++ { New(subParams) } i := List(&stripe.SubListParams{Customer: cust.ID}) for i.Next() { if i.Sub() == nil { t.Error("No nil values expected") } if i.Meta() == nil { t.Error("No metadata returned") } } if err := i.Err(); err != nil { t.Error(err) } customer.Del(cust.ID) plan.Del("test") }
func TestSourceDel(t *testing.T) { customerParams := &stripe.CustomerParams{} customerParams.SetSource(&stripe.CardParams{ Number: "378282246310005", Month: "06", Year: "20", }) cust, _ := customer.New(customerParams) err := Del(cust.DefaultSource.ID, &stripe.CustomerSourceParams{Customer: cust.ID}) if err != nil { t.Error(err) } customer.Del(cust.ID) }
func TestSourceNew(t *testing.T) { customerParams := &stripe.CustomerParams{} cust, err := customer.New(customerParams) if err != nil { t.Error(err) } sourceParams := &stripe.CustomerSourceParams{ Customer: cust.ID, } sourceParams.SetSource(&stripe.CardParams{ Number: "4242424242424242", Month: "10", Year: "20", CVC: "1234", }) source, err := New(sourceParams) if err != nil { t.Error(err) } target := source.Card if target.LastFour != "4242" { t.Errorf("Unexpected last four %q for card number %v\n", target.LastFour, sourceParams.Source.Card.Number) } if target.CVCCheck != card.Pass { t.Errorf("CVC check %q does not match expected status\n", target.ZipCheck) } targetCust, err := customer.Get(cust.ID, nil) if err != nil { t.Error(err) } if targetCust.Sources.Count != 1 { t.Errorf("Unexpected number of sources %v\n", targetCust.Sources.Count) } customer.Del(cust.ID) }
func TestSubscriptionZeroQuantity(t *testing.T) { customerParams := &stripe.CustomerParams{ Source: &stripe.SourceParams{ Card: &stripe.CardParams{ Number: "378282246310005", Month: "06", Year: "20", }, }, } cust, _ := customer.New(customerParams) planParams := &stripe.PlanParams{ ID: "test", Name: "Test Plan", Amount: 99, Currency: currency.USD, Interval: plan.Month, } plan.New(planParams) subParams := &stripe.SubParams{ Customer: cust.ID, Plan: "test", QuantityZero: true, } target, err := New(subParams) if err != nil { t.Error(err) } if target.Plan.ID != subParams.Plan { t.Errorf("Plan %v does not match expected plan %v\n", target.Plan, subParams.Plan) } if target.Quantity != 0 { t.Errorf("Quantity %v does not match expected quantity %v\n", target.Quantity, 0) } customer.Del(cust.ID) plan.Del("test") }
func TestSourceList(t *testing.T) { customerParams := &stripe.CustomerParams{} customerParams.SetSource(&stripe.CardParams{ Number: "378282246310005", Month: "06", Year: "20", }) cust, _ := customer.New(customerParams) sourceParams := &stripe.CustomerSourceParams{ Customer: cust.ID, } sourceParams.SetSource(&stripe.CardParams{ Number: "4242424242424242", Month: "10", Year: "20", }) New(sourceParams) i := List(&stripe.SourceListParams{Customer: cust.ID}) for i.Next() { paymentSource := i.PaymentSource() if paymentSource == nil { t.Error("No nil values expected") } if paymentSource.Card == nil { t.Error("No nil values expected") } if i.Meta() == nil { t.Error("No metadata returned") } } if err := i.Err(); err != nil { t.Error(err) } customer.Del(cust.ID) }
func TestSubscriptionGet(t *testing.T) { customerParams := &stripe.CustomerParams{ Source: &stripe.SourceParams{ Card: &stripe.CardParams{ Number: "378282246310005", Month: "06", Year: "20", }, }, } cust, _ := customer.New(customerParams) planParams := &stripe.PlanParams{ ID: "test", Name: "Test Plan", Amount: 99, Currency: currency.USD, Interval: plan.Month, } plan.New(planParams) subParams := &stripe.SubParams{ Customer: cust.ID, Plan: "test", Quantity: 10, } subscription, _ := New(subParams) target, err := Get(subscription.ID, &stripe.SubParams{Customer: cust.ID}) if err != nil { t.Error(err) } if target.ID != subscription.ID { t.Errorf("Subscription id %q does not match expected id %q\n", target.ID, subscription.ID) } customer.Del(cust.ID) plan.Del("test") }
func TestSubscriptionCancel(t *testing.T) { customerParams := &stripe.CustomerParams{ Source: &stripe.SourceParams{ Card: &stripe.CardParams{ Number: "378282246310005", Month: "06", Year: "20", }, }, } cust, _ := customer.New(customerParams) planParams := &stripe.PlanParams{ ID: "test", Name: "Test Plan", Amount: 99, Currency: currency.USD, Interval: plan.Month, } plan.New(planParams) subParams := &stripe.SubParams{ Customer: cust.ID, Plan: "test", Quantity: 10, } subscription, _ := New(subParams) err := Cancel(subscription.ID, &stripe.SubParams{Customer: cust.ID}) if err != nil { t.Error(err) } customer.Del(cust.ID) plan.Del("test") }
func TestSourceUpdate(t *testing.T) { customerParams := &stripe.CustomerParams{} customerParams.SetSource(&stripe.CardParams{ Number: "378282246310005", Month: "06", Year: "20", Name: "Original Name", }) cust, err := customer.New(customerParams) if err != nil { t.Error(err) } sourceParams := &stripe.CustomerSourceParams{ Customer: cust.ID, } sourceParams.SetSource(&stripe.CardParams{ Name: "Updated Name", }) source, err := Update(cust.DefaultSource.ID, sourceParams) if err != nil { t.Error(err) return } target := source.Card if target.Name != sourceParams.Source.Card.Name { t.Errorf("Card name %q does not match expected name %q\n", target.Name, sourceParams.Source.Card.Name) } customer.Del(cust.ID) }
// Invoices are somewhat painful to test since you need // to first have some items, so test everything together to // avoid unnecessary duplication func TestAllInvoicesScenarios(t *testing.T) { customerParams := &stripe.CustomerParams{ Source: &stripe.SourceParams{ Card: &stripe.CardParams{ Number: "378282246310005", Month: "06", Year: "20", }, }, } cust, _ := customer.New(customerParams) item := &stripe.InvoiceItemParams{ Customer: cust.ID, Amount: 100, Currency: currency.USD, Desc: "Test Item", } targetItem, err := invoiceitem.New(item) if err != nil { t.Error(err) } if targetItem.Customer.ID != item.Customer { t.Errorf("Item customer %q does not match expected customer %q\n", targetItem.Customer.ID, item.Customer) } if targetItem.Desc != item.Desc { t.Errorf("Item description %q does not match expected description %q\n", targetItem.Desc, item.Desc) } if targetItem.Amount != item.Amount { t.Errorf("Item amount %v does not match expected amount %v\n", targetItem.Amount, item.Amount) } if targetItem.Currency != item.Currency { t.Errorf("Item currency %q does not match expected currency %q\n", targetItem.Currency, item.Currency) } if targetItem.Date == 0 { t.Errorf("Item date is not set\n") } invoiceParams := &stripe.InvoiceParams{ Customer: cust.ID, Desc: "Desc", Statement: "Statement", TaxPercent: 20.0, } targetInvoice, err := New(invoiceParams) if err != nil { t.Error(err) } if targetInvoice.Customer.ID != invoiceParams.Customer { t.Errorf("Invoice customer %q does not match expected customer %q\n", targetInvoice.Customer.ID, invoiceParams.Customer) } if targetInvoice.TaxPercent != invoiceParams.TaxPercent { t.Errorf("Invoice tax percent %f does not match expected tax percent %f\n", targetInvoice.TaxPercent, invoiceParams.TaxPercent) } if targetInvoice.Tax != 20 { t.Errorf("Invoice tax %v does not match expected tax 20\n", targetInvoice.Tax) } if targetInvoice.Amount != targetItem.Amount+targetInvoice.Tax { t.Errorf("Invoice amount %v does not match expected amount %v + tax %v\n", targetInvoice.Amount, targetItem.Amount, targetInvoice.Tax) } if targetInvoice.Currency != targetItem.Currency { t.Errorf("Invoice currency %q does not match expected currency %q\n", targetInvoice.Currency, targetItem.Currency) } if targetInvoice.Date == 0 { t.Errorf("Invoice date is not set\n") } if targetInvoice.Start == 0 { t.Errorf("Invoice start is not set\n") } if targetInvoice.End == 0 { t.Errorf("Invoice end is not set\n") } if targetInvoice.Total != targetInvoice.Amount || targetInvoice.Subtotal != targetInvoice.Amount-targetInvoice.Tax { t.Errorf("Invoice total %v and subtotal %v do not match expected amount %v\n", targetInvoice.Total, targetInvoice.Subtotal, targetInvoice.Amount) } if targetInvoice.Desc != invoiceParams.Desc { t.Errorf("Invoice description %q does not match expected description %q\n", targetInvoice.Desc, invoiceParams.Desc) } if targetInvoice.Statement != invoiceParams.Statement { t.Errorf("Invoice statement %q does not match expected statement %q\n", targetInvoice.Statement, invoiceParams.Statement) } if targetInvoice.Lines == nil { t.Errorf("Invoice lines not found\n") } if targetInvoice.Lines.Count != 1 { t.Errorf("Invoice lines count %v does not match expected value\n", targetInvoice.Lines.Count) } if targetInvoice.Lines.Values == nil { t.Errorf("Invoice lines values not found\n") } if targetInvoice.Lines.Values[0].Amount != targetItem.Amount { t.Errorf("Invoice line amount %v does not match expected amount %v\n", targetInvoice.Lines.Values[0].Amount, targetItem.Amount) } if targetInvoice.Lines.Values[0].Currency != targetItem.Currency { t.Errorf("Invoice line currency %q does not match expected currency %q\n", targetInvoice.Lines.Values[0].Currency, targetItem.Currency) } if targetInvoice.Lines.Values[0].Desc != targetItem.Desc { t.Errorf("Invoice line description %q does not match expected description %q\n", targetInvoice.Lines.Values[0].Desc, targetItem.Desc) } if targetInvoice.Lines.Values[0].Type != TypeInvoiceItem { t.Errorf("Invoice line type %q does not match expected type\n", targetInvoice.Lines.Values[0].Type) } if targetInvoice.Lines.Values[0].Period == nil { t.Errorf("Invoice line period not found\n") } if targetInvoice.Lines.Values[0].Period.Start == 0 { t.Errorf("Invoice line period start is not set\n") } if targetInvoice.Lines.Values[0].Period.End == 0 { t.Errorf("Invoice line period end is not set\n") } updatedItem := &stripe.InvoiceItemParams{ Amount: 99, Desc: "Updated Desc", Discountable: true, } targetItemUpdated, err := invoiceitem.Update(targetItem.ID, updatedItem) if err != nil { t.Error(err) } if targetItemUpdated.Desc != updatedItem.Desc { t.Errorf("Updated item description %q does not match expected description %q\n", targetItemUpdated.Desc, updatedItem.Desc) } if targetItemUpdated.Amount != updatedItem.Amount { t.Errorf("Updated item amount %v does not match expected amount %v\n", targetItemUpdated.Amount, updatedItem.Amount) } if !targetItemUpdated.Discountable { t.Errorf("Updated item is not discountable") } updatedInvoice := &stripe.InvoiceParams{ Desc: "Updated Desc", Statement: "Updated", } targetInvoiceUpdated, err := Update(targetInvoice.ID, updatedInvoice) if err != nil { t.Error(err) } if targetInvoiceUpdated.Desc != updatedInvoice.Desc { t.Errorf("Updated invoice description %q does not match expected description %q\n", targetInvoiceUpdated.Desc, updatedInvoice.Desc) } if targetInvoiceUpdated.Statement != updatedInvoice.Statement { t.Errorf("Updated invoice statement %q does not match expected statement %q\n", targetInvoiceUpdated.Statement, updatedInvoice.Statement) } _, err = invoiceitem.Get(targetItem.ID, nil) if err != nil { t.Error(err) } ii := invoiceitem.List(&stripe.InvoiceItemListParams{Customer: cust.ID}) for ii.Next() { if ii.InvoiceItem() == nil { t.Error("No nil values expected") } if ii.Meta() == nil { t.Error("No metadata returned") } } if err := ii.Err(); err != nil { t.Error(err) } i := List(&stripe.InvoiceListParams{Customer: cust.ID}) for i.Next() { if i.Invoice() == nil { t.Error("No nil values expected") } if i.Meta() == nil { t.Error("No metadata returned") } } if err := i.Err(); err != nil { t.Error(err) } il := ListLines(&stripe.InvoiceLineListParams{ID: targetInvoice.ID, Customer: cust.ID}) for il.Next() { if il.InvoiceLine() == nil { t.Error("No nil values expected") } if il.Meta() == nil { t.Error("No metadata returned") } } if err := il.Err(); err != nil { t.Error(err) } err = invoiceitem.Del(targetItem.ID) if err != nil { t.Error(err) } _, err = Get(targetInvoice.ID, nil) if err != nil { t.Error(err) } customer.Del(cust.ID) }
func TestSubscriptionDiscount(t *testing.T) { couponParams := &stripe.CouponParams{ Duration: coupon.Forever, ID: "sub_coupon", Percent: 99, } coupon.New(couponParams) customerParams := &stripe.CustomerParams{ Source: &stripe.SourceParams{ Card: &stripe.CardParams{ Number: "378282246310005", Month: "06", Year: "20", }, }, Coupon: "sub_coupon", } cust, _ := customer.New(customerParams) planParams := &stripe.PlanParams{ ID: "test", Name: "Test Plan", Amount: 99, Currency: currency.USD, Interval: plan.Month, } plan.New(planParams) subParams := &stripe.SubParams{ Customer: cust.ID, Plan: "test", Quantity: 10, Coupon: "sub_coupon", } target, err := New(subParams) if err != nil { t.Error(err) } if target.Discount == nil { t.Errorf("Discount not found, but one was expected\n") } if target.Discount.Coupon == nil { t.Errorf("Coupon not found, but one was expected\n") } if target.Discount.Coupon.ID != subParams.Coupon { t.Errorf("Coupon id %q does not match expected id %q\n", target.Discount.Coupon.ID, subParams.Coupon) } err = discount.DelSub(cust.ID, target.ID) if err != nil { t.Error(err) } customer.Del(cust.ID) plan.Del("test") coupon.Del("sub_coupon") }