stripe-ruby-mock 2.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/stripe_mock.rb +3 -1
  4. data/lib/stripe_mock/data.rb +14 -5
  5. data/lib/stripe_mock/data/list.rb +64 -0
  6. data/lib/stripe_mock/instance.rb +1 -1
  7. data/lib/stripe_mock/request_handlers/cards.rb +21 -38
  8. data/lib/stripe_mock/request_handlers/charges.rb +4 -4
  9. data/lib/stripe_mock/request_handlers/coupons.rb +3 -3
  10. data/lib/stripe_mock/request_handlers/customers.rb +5 -5
  11. data/lib/stripe_mock/request_handlers/events.rb +1 -1
  12. data/lib/stripe_mock/request_handlers/helpers/card_helpers.rb +36 -1
  13. data/lib/stripe_mock/request_handlers/invoice_items.rb +4 -4
  14. data/lib/stripe_mock/request_handlers/invoices.rb +7 -7
  15. data/lib/stripe_mock/request_handlers/plans.rb +4 -4
  16. data/lib/stripe_mock/request_handlers/recipients.rb +2 -2
  17. data/lib/stripe_mock/request_handlers/subscriptions.rb +10 -10
  18. data/lib/stripe_mock/request_handlers/tokens.rb +4 -4
  19. data/lib/stripe_mock/test_strategies/base.rb +2 -3
  20. data/lib/stripe_mock/util.rb +11 -0
  21. data/lib/stripe_mock/version.rb +1 -1
  22. data/lib/stripe_mock/webhook_fixtures/charge.failed.json +1 -0
  23. data/lib/stripe_mock/webhook_fixtures/charge.refunded.json +1 -0
  24. data/lib/stripe_mock/webhook_fixtures/customer.card.created.json +1 -0
  25. data/lib/stripe_mock/webhook_fixtures/customer.card.deleted.json +1 -0
  26. data/lib/stripe_mock/webhook_fixtures/customer.card.updated.json +1 -0
  27. data/lib/stripe_mock/webhook_fixtures/customer.created.json +1 -0
  28. data/lib/stripe_mock/webhook_fixtures/customer.deleted.json +2 -1
  29. data/lib/stripe_mock/webhook_fixtures/customer.updated.json +1 -0
  30. data/spec/list_spec.rb +123 -0
  31. data/spec/shared_stripe_examples/card_examples.rb +87 -9
  32. data/spec/shared_stripe_examples/charge_examples.rb +12 -6
  33. data/spec/shared_stripe_examples/coupon_examples.rb +1 -1
  34. data/spec/shared_stripe_examples/customer_examples.rb +1 -1
  35. data/spec/shared_stripe_examples/invoice_examples.rb +8 -2
  36. data/spec/shared_stripe_examples/invoice_item_examples.rb +1 -1
  37. data/spec/shared_stripe_examples/plan_examples.rb +1 -1
  38. data/spec/util_spec.rb +69 -35
  39. metadata +5 -2
@@ -20,13 +20,13 @@ module StripeMock
20
20
 
21
21
  def update_invoice(route, method_url, params, headers)
22
22
  route =~ method_url
23
- assert_existance :invoice, $1, invoices[$1]
23
+ assert_existence :invoice, $1, invoices[$1]
24
24
  invoices[$1].merge!(params)
25
25
  end
26
26
 
27
27
  def list_invoices(route, method_url, params, headers)
28
28
  params[:offset] ||= 0
29
- params[:count] ||= 10
29
+ params[:limit] ||= 10
30
30
 
31
31
  result = invoices.clone
32
32
 
@@ -34,23 +34,23 @@ module StripeMock
34
34
  result.delete_if { |k,v| v[:customer] != params[:customer] }
35
35
  end
36
36
 
37
- result.values[params[:offset], params[:count]]
37
+ Data.mock_list_object(result.values, params)
38
38
  end
39
39
 
40
40
  def get_invoice(route, method_url, params, headers)
41
41
  route =~ method_url
42
- assert_existance :invoice, $1, invoices[$1]
42
+ assert_existence :invoice, $1, invoices[$1]
43
43
  end
44
44
 
45
45
  def get_invoice_line_items(route, method_url, params, headers)
46
46
  route =~ method_url
47
- assert_existance :invoice, $1, invoices[$1]
47
+ assert_existence :invoice, $1, invoices[$1]
48
48
  invoices[$1][:lines]
49
49
  end
50
50
 
51
51
  def pay_invoice(route, method_url, params, headers)
52
52
  route =~ method_url
53
- assert_existance :invoice, $1, invoices[$1]
53
+ assert_existence :invoice, $1, invoices[$1]
54
54
  invoices[$1].merge!(:paid => true, :attempted => true, :charge => 'ch_1fD6uiR9FAA2zc')
55
55
  end
56
56
 
@@ -59,7 +59,7 @@ module StripeMock
59
59
  raise Stripe::InvalidRequestError.new('Missing required param: customer', nil, 400) if params[:customer].nil?
60
60
 
61
61
  customer = customers[params[:customer]]
62
- assert_existance :customer, params[:customer], customer
62
+ assert_existence :customer, params[:customer], customer
63
63
 
64
64
  raise Stripe::InvalidRequestError.new("No upcoming invoices for customer: #{customer[:id]}", nil, 404) if customer[:subscriptions][:data].length == 0
65
65
 
@@ -17,22 +17,22 @@ module StripeMock
17
17
 
18
18
  def update_plan(route, method_url, params, headers)
19
19
  route =~ method_url
20
- assert_existance :plan, $1, plans[$1]
20
+ assert_existence :plan, $1, plans[$1]
21
21
  plans[$1].merge!(params)
22
22
  end
23
23
 
24
24
  def get_plan(route, method_url, params, headers)
25
25
  route =~ method_url
26
- assert_existance :plan, $1, plans[$1]
26
+ assert_existence :plan, $1, plans[$1]
27
27
  end
28
28
 
29
29
  def delete_plan(route, method_url, params, headers)
30
30
  route =~ method_url
31
- assert_existance :plan, $1, plans.delete($1)
31
+ assert_existence :plan, $1, plans.delete($1)
32
32
  end
33
33
 
34
34
  def list_plans(route, method_url, params, headers)
35
- plans.values
35
+ Data.mock_list_object(plans.values)
36
36
  end
37
37
 
38
38
  end
@@ -27,7 +27,7 @@ module StripeMock
27
27
 
28
28
  def update_recipient(route, method_url, params, headers)
29
29
  route =~ method_url
30
- recipient = assert_existance :recipient, $1, recipients[$1]
30
+ recipient = assert_existence :recipient, $1, recipients[$1]
31
31
  recipient.merge!(params)
32
32
 
33
33
  if params[:card]
@@ -41,7 +41,7 @@ module StripeMock
41
41
 
42
42
  def get_recipient(route, method_url, params, headers)
43
43
  route =~ method_url
44
- assert_existance :recipient, $1, recipients[$1]
44
+ assert_existence :recipient, $1, recipients[$1]
45
45
  end
46
46
  end
47
47
  end
@@ -12,10 +12,10 @@ module StripeMock
12
12
 
13
13
  def create_subscription(route, method_url, params, headers)
14
14
  route =~ method_url
15
- customer = assert_existance :customer, $1, customers[$1]
15
+ customer = assert_existence :customer, $1, customers[$1]
16
16
 
17
17
  plan_id = params[:plan]
18
- plan = assert_existance :plan, plan_id, plans[plan_id]
18
+ plan = assert_existence :plan, plan_id, plans[plan_id]
19
19
 
20
20
  if params[:card]
21
21
  new_card = get_card_by_token(params.delete(:card))
@@ -36,23 +36,23 @@ module StripeMock
36
36
  def retrieve_subscription(route, method_url, params, headers)
37
37
  route =~ method_url
38
38
 
39
- customer = assert_existance :customer, $1, customers[$1]
40
- assert_existance :subscription, $2, get_customer_subscription(customer, $2)
39
+ customer = assert_existence :customer, $1, customers[$1]
40
+ assert_existence :subscription, $2, get_customer_subscription(customer, $2)
41
41
  end
42
42
 
43
43
  def retrieve_subscriptions(route, method_url, params, headers)
44
44
  route =~ method_url
45
45
 
46
- customer = assert_existance :customer, $1, customers[$1]
46
+ customer = assert_existence :customer, $1, customers[$1]
47
47
  customer[:subscriptions]
48
48
  end
49
49
 
50
50
  def update_subscription(route, method_url, params, headers)
51
51
  route =~ method_url
52
- customer = assert_existance :customer, $1, customers[$1]
52
+ customer = assert_existence :customer, $1, customers[$1]
53
53
 
54
54
  subscription = get_customer_subscription(customer, $2)
55
- assert_existance :subscription, $2, subscription
55
+ assert_existence :subscription, $2, subscription
56
56
 
57
57
  if params[:card]
58
58
  new_card = get_card_by_token(params.delete(:card))
@@ -64,7 +64,7 @@ module StripeMock
64
64
  plan_name = params[:plan] || subscription[:plan][:id]
65
65
  plan = plans[plan_name]
66
66
 
67
- assert_existance :plan, plan_name, plan
67
+ assert_existence :plan, plan_name, plan
68
68
  params[:plan] = plan if params[:plan]
69
69
  verify_card_present(customer, plan)
70
70
 
@@ -84,10 +84,10 @@ module StripeMock
84
84
 
85
85
  def cancel_subscription(route, method_url, params, headers)
86
86
  route =~ method_url
87
- customer = assert_existance :customer, $1, customers[$1]
87
+ customer = assert_existence :customer, $1, customers[$1]
88
88
 
89
89
  subscription = get_customer_subscription(customer, $2)
90
- assert_existance :subscription, $2, subscription
90
+ assert_existence :subscription, $2, subscription
91
91
 
92
92
  cancel_params = { canceled_at: Time.now.utc.to_i }
93
93
  cancelled_at_period_end = (params[:at_period_end] == true)
@@ -15,18 +15,18 @@ module StripeMock
15
15
  cus_id = params[:customer]
16
16
 
17
17
  if cus_id && params[:card]
18
- customer = assert_existance :customer, cus_id, customers[cus_id]
18
+ customer = assert_existence :customer, cus_id, customers[cus_id]
19
19
 
20
20
  # params[:card] is an id; grab it from the db
21
21
  customer_card = get_card(customer, params[:card])
22
- assert_existance :card, params[:card], customer_card
22
+ assert_existence :card, params[:card], customer_card
23
23
  elsif params[:card]
24
24
  # params[:card] is a hash of cc info; "Sanitize" the card number
25
25
  params[:card][:fingerprint] = StripeMock::Util.fingerprint(params[:card][:number])
26
26
  params[:card][:last4] = params[:card][:number][-4,4]
27
27
  customer_card = params[:card]
28
28
  else
29
- customer = assert_existance :customer, cus_id, customers[cus_id]
29
+ customer = assert_existence :customer, cus_id, customers[cus_id]
30
30
  customer_card = get_card(customer, customer[:default_card])
31
31
  end
32
32
 
@@ -40,7 +40,7 @@ module StripeMock
40
40
  route =~ method_url
41
41
  # A Stripe token can be either a bank token or a card token
42
42
  bank_or_card = @bank_tokens[$1] || @card_tokens[$1]
43
- assert_existance :token, $1, bank_or_card
43
+ assert_existence :token, $1, bank_or_card
44
44
 
45
45
  if bank_or_card[:object] == 'card'
46
46
  Data.mock_token(:id => $1, :card => bank_or_card)
@@ -13,9 +13,8 @@ module StripeMock
13
13
  end
14
14
 
15
15
  def generate_card_token(card_params={})
16
- card = {
17
- :number => "4242424242424242", :exp_month => 9, :exp_year => 2018, :cvc => "999"
18
- }.merge(card_params)
16
+ card_data = { :number => "4242424242424242", :exp_month => 9, :exp_year => 2018, :cvc => "999" }
17
+ card = StripeMock::Util.card_merge(card_data, card_params)
19
18
  card[:fingerprint] = StripeMock::Util.fingerprint(card[:number])
20
19
 
21
20
  stripe_token = Stripe::Token.create(:card => card)
@@ -23,5 +23,16 @@ module StripeMock
23
23
  Digest::SHA1.base64digest(source).gsub(/[^a-z]/i, '')[0..15]
24
24
  end
25
25
 
26
+ def self.card_merge(old_param, new_param)
27
+ if new_param[:number] ||= old_param[:number]
28
+ if new_param[:last4]
29
+ new_param[:number] = new_param[:number][0..-5] + new_param[:last4]
30
+ else
31
+ new_param[:last4] = new_param[:number][-4..-1]
32
+ end
33
+ end
34
+ old_param.merge(new_param)
35
+ end
36
+
26
37
  end
27
38
  end
@@ -1,4 +1,4 @@
1
1
  module StripeMock
2
2
  # stripe-ruby-mock version
3
- VERSION = "2.0.1"
3
+ VERSION = "2.0.2"
4
4
  end
@@ -20,6 +20,7 @@
20
20
  "last4": "4242",
21
21
  "type": "Visa",
22
22
  "brand": "Visa",
23
+ "funding": "credit",
23
24
  "exp_month": 12,
24
25
  "exp_year": 2013,
25
26
  "fingerprint": "wXWJT135mEK107G8",
@@ -20,6 +20,7 @@
20
20
  "last4": "4242",
21
21
  "type": "Visa",
22
22
  "brand": "Visa",
23
+ "funding": "credit",
23
24
  "exp_month": 12,
24
25
  "exp_year": 2013,
25
26
  "fingerprint": "wXWJT135mEK107G8",
@@ -11,6 +11,7 @@
11
11
  "last4": "4242",
12
12
  "type": "Visa",
13
13
  "brand": "Visa",
14
+ "funding": "credit",
14
15
  "exp_month": 3,
15
16
  "exp_year": 2020,
16
17
  "fingerprint": "wXWJT135mEK107G8",
@@ -11,6 +11,7 @@
11
11
  "last4": "4242",
12
12
  "type": "Visa",
13
13
  "brand": "Visa",
14
+ "funding": "credit",
14
15
  "exp_month": 3,
15
16
  "exp_year": 2020,
16
17
  "fingerprint": "wXWJT135mEK107G8",
@@ -11,6 +11,7 @@
11
11
  "last4": "4242",
12
12
  "type": "Visa",
13
13
  "brand": "Visa",
14
+ "funding": "credit",
14
15
  "exp_month": 3,
15
16
  "exp_year": 2020,
16
17
  "fingerprint": "wXWJT135mEK107G8",
@@ -29,6 +29,7 @@
29
29
  "last4": "0341",
30
30
  "type": "Visa",
31
31
  "brand": "Visa",
32
+ "funding": "credit",
32
33
  "exp_month": 12,
33
34
  "exp_year": 2013,
34
35
  "fingerprint": "fWvZEzdbEIFF8QrK",
@@ -21,7 +21,8 @@
21
21
  "name": "1231",
22
22
  "object": "card",
23
23
  "type": "Visa",
24
- "brand": "Visa"
24
+ "brand": "Visa",
25
+ "funding": "credit"
25
26
  },
26
27
  "created": 1359947599,
27
28
  "delinquent": false,
@@ -29,6 +29,7 @@
29
29
  "last4": "0341",
30
30
  "type": "Visa",
31
31
  "brand": "Visa",
32
+ "funding": "credit",
32
33
  "exp_month": 12,
33
34
  "exp_year": 2013,
34
35
  "fingerprint": "fWvZEzdbEIFF8QrK",
data/spec/list_spec.rb ADDED
@@ -0,0 +1,123 @@
1
+ require "spec_helper"
2
+
3
+ describe StripeMock::Data::List do
4
+ before :all do
5
+ StripeMock.start
6
+ end
7
+
8
+ after :all do
9
+ StripeMock.stop
10
+ end
11
+
12
+ it "contains data" do
13
+ obj = double
14
+ obj2 = double
15
+ obj3 = double
16
+ list = StripeMock::Data::List.new([obj, obj2, obj3])
17
+
18
+ expect(list.data).to eq([obj, obj2, obj3])
19
+ end
20
+
21
+ it "can accept a single object" do
22
+ list = StripeMock::Data::List.new(double)
23
+
24
+ expect(list.data).to be_kind_of(Array)
25
+ expect(list.data.size).to eq(1)
26
+ end
27
+
28
+ it "infers object type for url" do
29
+ customer = Stripe::Customer.create
30
+ list = StripeMock::Data::List.new([customer])
31
+
32
+ expect(list.url).to eq("/v1/customers")
33
+ end
34
+
35
+ it "eventually gets turned into a hash" do
36
+ charge1 = Stripe::Charge.create
37
+ charge2 = Stripe::Charge.create
38
+ charge3 = Stripe::Charge.create
39
+ list = StripeMock::Data::List.new([charge1, charge2, charge3])
40
+ hash = list.to_h
41
+
42
+ expect(hash).to eq(
43
+ object: "list",
44
+ data: [charge1, charge2, charge3],
45
+ url: "/v1/charges",
46
+ has_more: false
47
+ )
48
+ end
49
+
50
+ it "delegates other methods to hash keys" do
51
+ list = StripeMock::Data::List.new([double, double, double])
52
+
53
+ expect(list).to respond_to(:data)
54
+ expect(list.data).to be_kind_of(Array)
55
+ expect(list.object).to eq("list")
56
+ expect(list.has_more).to eq(false)
57
+ expect(list.url).to eq("/v1/doubles")
58
+ expect { list.foobar }.to raise_error(NoMethodError)
59
+ end
60
+
61
+ context "with a limit" do
62
+ it "accepts a limit which is reflected in the data returned" do
63
+ list = StripeMock::Data::List.new([double] * 25)
64
+
65
+ expect(list.to_h[:data].size).to eq(10)
66
+
67
+ list = StripeMock::Data::List.new([double] * 25, limit: 15)
68
+
69
+ expect(list.limit).to eq(15)
70
+ expect(list.to_h[:data].size).to eq(15)
71
+ end
72
+
73
+ it "defaults to a limit of 10" do
74
+ list = StripeMock::Data::List.new([])
75
+
76
+ expect(list.limit).to eq(10)
77
+ end
78
+
79
+ it "won't accept a limit of > 100" do
80
+ list = StripeMock::Data::List.new([], limit: 105)
81
+
82
+ expect(list.limit).to eq(100)
83
+ end
84
+
85
+ it "won't accept a limit of < 1" do
86
+ list = StripeMock::Data::List.new([], limit: 0)
87
+
88
+ expect(list.limit).to eq(1)
89
+
90
+ list = StripeMock::Data::List.new([], limit: -4)
91
+
92
+ expect(list.limit).to eq(1)
93
+ end
94
+ end
95
+
96
+ context "pagination" do
97
+ it "has a has_more field when it has more" do
98
+ list = StripeMock::Data::List.new([Stripe::Charge.create] * 256)
99
+
100
+ expect(list).to have_more
101
+ end
102
+
103
+ it "accepts a starting_after parameter" do
104
+ data = []
105
+ 255.times { data << Stripe::Charge.create }
106
+ new_charge = Stripe::Charge.create
107
+ data[89] = new_charge
108
+ list = StripeMock::Data::List.new(data, starting_after: new_charge.id)
109
+ hash = list.to_h
110
+
111
+ expect(hash[:data].size).to eq(10)
112
+ expect(hash[:data]).to eq(data[90, 10])
113
+ end
114
+
115
+ it "raises an error if starting_after cursor is not found" do
116
+ data = []
117
+ 255.times { data << Stripe::Charge.create }
118
+ list = StripeMock::Data::List.new(data, starting_after: "test_ch_unknown")
119
+
120
+ expect { list.to_h }.to raise_error
121
+ end
122
+ end
123
+ end
@@ -1,9 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  shared_examples 'Card API' do
4
+
4
5
  it 'creates/returns a card when using customer.cards.create given a card token' do
5
6
  customer = Stripe::Customer.create(id: 'test_customer_sub')
6
- card_token = StripeMock.generate_card_token(last4: "1123", exp_month: 11, exp_year: 2099)
7
+ card_token = stripe_helper.generate_card_token(last4: "1123", exp_month: 11, exp_year: 2099)
7
8
  card = customer.cards.create(card: card_token)
8
9
 
9
10
  expect(card.customer).to eq('test_customer_sub')
@@ -20,6 +21,25 @@ shared_examples 'Card API' do
20
21
  expect(card.exp_year).to eq(2099)
21
22
  end
22
23
 
24
+ it 'creates/returns a card when using recipient.cards.create given a card token' do
25
+ recipient = Stripe::Recipient.create(id: 'test_recipient_sub')
26
+ card_token = stripe_helper.generate_card_token(last4: "1123", exp_month: 11, exp_year: 2099)
27
+ card = recipient.cards.create(card: card_token)
28
+
29
+ expect(card.recipient).to eq('test_recipient_sub')
30
+ expect(card.last4).to eq("1123")
31
+ expect(card.exp_month).to eq(11)
32
+ expect(card.exp_year).to eq(2099)
33
+
34
+ recipient = Stripe::Recipient.retrieve('test_recipient_sub')
35
+ expect(recipient.cards.count).to eq(1)
36
+ card = recipient.cards.data.first
37
+ expect(card.recipient).to eq('test_recipient_sub')
38
+ expect(card.last4).to eq("1123")
39
+ expect(card.exp_month).to eq(11)
40
+ expect(card.exp_year).to eq(2099)
41
+ end
42
+
23
43
  it 'creates/returns a card when using customer.cards.create given card params' do
24
44
  customer = Stripe::Customer.create(id: 'test_customer_sub')
25
45
  card = customer.cards.create(card: {
@@ -43,6 +63,28 @@ shared_examples 'Card API' do
43
63
  expect(card.exp_year).to eq(3031)
44
64
  end
45
65
 
66
+ it 'creates/returns a card when using recipient.cards.create given card params' do
67
+ recipient = Stripe::Recipient.create(id: 'test_recipient_sub')
68
+ card = recipient.cards.create(card: {
69
+ number: '4000056655665556',
70
+ exp_month: '11',
71
+ exp_year: '3031',
72
+ cvc: '123'
73
+ })
74
+
75
+ expect(card.recipient).to eq('test_recipient_sub')
76
+ expect(card.last4).to eq("5556")
77
+ expect(card.exp_month).to eq(11)
78
+ expect(card.exp_year).to eq(3031)
79
+
80
+ recipient = Stripe::Recipient.retrieve('test_recipient_sub')
81
+ expect(recipient.cards.count).to eq(1)
82
+ card = recipient.cards.data.first
83
+ expect(card.recipient).to eq('test_recipient_sub')
84
+ expect(card.last4).to eq("5556")
85
+ expect(card.exp_month).to eq(11)
86
+ expect(card.exp_year).to eq(3031)
87
+ end
46
88
 
47
89
  it "creates a single card with a generated card token", :live => true do
48
90
  customer = Stripe::Customer.create
@@ -59,7 +101,7 @@ shared_examples 'Card API' do
59
101
 
60
102
  it 'create does not change the customers default card if already set' do
61
103
  customer = Stripe::Customer.create(id: 'test_customer_sub', default_card: "test_cc_original")
62
- card_token = StripeMock.generate_card_token(last4: "1123", exp_month: 11, exp_year: 2099)
104
+ card_token = stripe_helper.generate_card_token(last4: "1123", exp_month: 11, exp_year: 2099)
63
105
  card = customer.cards.create(card: card_token)
64
106
 
65
107
  customer = Stripe::Customer.retrieve('test_customer_sub')
@@ -68,16 +110,16 @@ shared_examples 'Card API' do
68
110
 
69
111
  it 'create updates the customers default card if not set' do
70
112
  customer = Stripe::Customer.create(id: 'test_customer_sub')
71
- card_token = StripeMock.generate_card_token(last4: "1123", exp_month: 11, exp_year: 2099)
113
+ card_token = stripe_helper.generate_card_token(last4: "1123", exp_month: 11, exp_year: 2099)
72
114
  card = customer.cards.create(card: card_token)
73
115
 
74
116
  customer = Stripe::Customer.retrieve('test_customer_sub')
75
117
  expect(customer.default_card).to_not be_nil
76
118
  end
77
119
 
78
- context "retrieval and deletion" do
120
+ describe "retrieval and deletion with customers" do
79
121
  let!(:customer) { Stripe::Customer.create(id: 'test_customer_sub') }
80
- let!(:card_token) { StripeMock.generate_card_token(last4: "1123", exp_month: 11, exp_year: 2099) }
122
+ let!(:card_token) { stripe_helper.generate_card_token(last4: "1123", exp_month: 11, exp_year: 2099) }
81
123
  let!(:card) { customer.cards.create(card: card_token) }
82
124
 
83
125
  it "retrieves a customers card" do
@@ -109,7 +151,7 @@ shared_examples 'Card API' do
109
151
  end
110
152
 
111
153
  context "deletion when the user has two cards" do
112
- let!(:card_token_2) { StripeMock.generate_card_token(last4: "1123", exp_month: 11, exp_year: 2099) }
154
+ let!(:card_token_2) { stripe_helper.generate_card_token(last4: "1123", exp_month: 11, exp_year: 2099) }
113
155
  let!(:card_2) { customer.cards.create(card: card_token_2) }
114
156
 
115
157
  it "has just one card anymore" do
@@ -127,6 +169,42 @@ shared_examples 'Card API' do
127
169
  end
128
170
  end
129
171
 
172
+ describe "retrieval and deletion with recipients", :live => true do
173
+ let!(:recipient) { Stripe::Recipient.create(name: 'Test Recipient', type: 'individual') }
174
+ let!(:card_token) { stripe_helper.generate_card_token(number: "4000056655665556") }
175
+ let!(:card) { recipient.cards.create(card: card_token) }
176
+
177
+ it "deletes a recipient card" do
178
+ card.delete
179
+ retrieved_cus = Stripe::Recipient.retrieve(recipient.id)
180
+ expect(retrieved_cus.cards.data).to be_empty
181
+ end
182
+
183
+ it "deletes a recipient card then set the default_card to nil" do
184
+ card.delete
185
+ retrieved_cus = Stripe::Recipient.retrieve(recipient.id)
186
+ expect(retrieved_cus.default_card).to be_nil
187
+ end
188
+
189
+ context "deletion when the recipient has two cards" do
190
+ let!(:card_token_2) { stripe_helper.generate_card_token(number: "5200828282828210") }
191
+ let!(:card_2) { recipient.cards.create(card: card_token_2) }
192
+
193
+ it "has just one card anymore" do
194
+ card.delete
195
+ retrieved_rec = Stripe::Recipient.retrieve(recipient.id)
196
+ expect(retrieved_rec.cards.data.count).to eq 1
197
+ expect(retrieved_rec.cards.data.first.id).to eq card_2.id
198
+ end
199
+
200
+ it "sets the default_card id to the last card remaining id" do
201
+ card.delete
202
+ retrieved_rec = Stripe::Recipient.retrieve(recipient.id)
203
+ expect(retrieved_rec.default_card).to eq card_2.id
204
+ end
205
+ end
206
+ end
207
+
130
208
  describe "Errors", :live => true do
131
209
  it "throws an error when the customer does not have the retrieving card id" do
132
210
  customer = Stripe::Customer.create
@@ -142,7 +220,7 @@ shared_examples 'Card API' do
142
220
 
143
221
  context "update card" do
144
222
  let!(:customer) { Stripe::Customer.create(id: 'test_customer_sub') }
145
- let!(:card_token) { StripeMock.generate_card_token(last4: "1123", exp_month: 11, exp_year: 2099) }
223
+ let!(:card_token) { stripe_helper.generate_card_token(last4: "1123", exp_month: 11, exp_year: 2099) }
146
224
  let!(:card) { customer.cards.create(card: card_token) }
147
225
 
148
226
  it "updates the card" do
@@ -165,9 +243,9 @@ shared_examples 'Card API' do
165
243
  it "retrieves a list of multiple cards" do
166
244
  customer = Stripe::Customer.create(id: 'test_customer_card')
167
245
 
168
- card_token = StripeMock.generate_card_token(last4: "1123", exp_month: 11, exp_year: 2099)
246
+ card_token = stripe_helper.generate_card_token(last4: "1123", exp_month: 11, exp_year: 2099)
169
247
  card1 = customer.cards.create(card: card_token)
170
- card_token = StripeMock.generate_card_token(last4: "1124", exp_month: 12, exp_year: 2098)
248
+ card_token = stripe_helper.generate_card_token(last4: "1124", exp_month: 12, exp_year: 2098)
171
249
  card2 = customer.cards.create(card: card_token)
172
250
 
173
251
  customer = Stripe::Customer.retrieve('test_customer_card')