stripe-ruby-mock 3.0.0 → 3.1.0

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 (137) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/rspec_tests.yml +38 -0
  3. data/.rspec +2 -1
  4. data/CHANGELOG.md +69 -0
  5. data/Gemfile +1 -0
  6. data/README.md +13 -5
  7. data/lib/stripe_mock/api/client.rb +1 -1
  8. data/lib/stripe_mock/api/errors.rb +3 -0
  9. data/lib/stripe_mock/api/instance.rb +1 -1
  10. data/lib/stripe_mock/api/webhooks.rb +66 -25
  11. data/lib/stripe_mock/client.rb +2 -1
  12. data/lib/stripe_mock/data/list.rb +42 -9
  13. data/lib/stripe_mock/data.rb +242 -31
  14. data/lib/stripe_mock/instance.rb +14 -3
  15. data/lib/stripe_mock/request_handlers/account_links.rb +15 -0
  16. data/lib/stripe_mock/request_handlers/accounts.rb +17 -6
  17. data/lib/stripe_mock/request_handlers/charges.rb +11 -4
  18. data/lib/stripe_mock/request_handlers/checkout_session.rb +179 -0
  19. data/lib/stripe_mock/request_handlers/customers.rb +35 -18
  20. data/lib/stripe_mock/request_handlers/ephemeral_key.rb +1 -1
  21. data/lib/stripe_mock/request_handlers/events.rb +30 -3
  22. data/lib/stripe_mock/request_handlers/express_login_links.rb +15 -0
  23. data/lib/stripe_mock/request_handlers/helpers/coupon_helpers.rb +6 -0
  24. data/lib/stripe_mock/request_handlers/helpers/subscription_helpers.rb +36 -12
  25. data/lib/stripe_mock/request_handlers/invoices.rb +10 -4
  26. data/lib/stripe_mock/request_handlers/payment_intents.rb +19 -1
  27. data/lib/stripe_mock/request_handlers/payment_methods.rb +10 -24
  28. data/lib/stripe_mock/request_handlers/plans.rb +1 -1
  29. data/lib/stripe_mock/request_handlers/prices.rb +62 -0
  30. data/lib/stripe_mock/request_handlers/promotion_codes.rb +43 -0
  31. data/lib/stripe_mock/request_handlers/refunds.rb +13 -2
  32. data/lib/stripe_mock/request_handlers/setup_intents.rb +16 -9
  33. data/lib/stripe_mock/request_handlers/sources.rb +12 -6
  34. data/lib/stripe_mock/request_handlers/subscriptions.rb +120 -21
  35. data/lib/stripe_mock/request_handlers/tokens.rb +6 -4
  36. data/lib/stripe_mock/request_handlers/transfers.rb +12 -1
  37. data/lib/stripe_mock/request_handlers/validators/param_validators.rb +33 -4
  38. data/lib/stripe_mock/server.rb +2 -2
  39. data/lib/stripe_mock/test_strategies/base.rb +62 -10
  40. data/lib/stripe_mock/version.rb +1 -1
  41. data/lib/stripe_mock/webhook_fixtures/account.updated.json +1 -1
  42. data/lib/stripe_mock/webhook_fixtures/balance.available.json +27 -15
  43. data/lib/stripe_mock/webhook_fixtures/charge.captured.json +143 -0
  44. data/lib/stripe_mock/webhook_fixtures/charge.dispute.created.json +63 -16
  45. data/lib/stripe_mock/webhook_fixtures/charge.failed.json +49 -120
  46. data/lib/stripe_mock/webhook_fixtures/charge.refund.updated.json +35 -0
  47. data/lib/stripe_mock/webhook_fixtures/charge.refunded.json +145 -50
  48. data/lib/stripe_mock/webhook_fixtures/charge.succeeded.json +114 -43
  49. data/lib/stripe_mock/webhook_fixtures/checkout.session.completed.json +79 -0
  50. data/lib/stripe_mock/webhook_fixtures/checkout.session.completed.payment_mode.json +53 -0
  51. data/lib/stripe_mock/webhook_fixtures/checkout.session.completed.setup_mode.json +45 -0
  52. data/lib/stripe_mock/webhook_fixtures/customer.created.json +37 -46
  53. data/lib/stripe_mock/webhook_fixtures/customer.deleted.json +36 -32
  54. data/lib/stripe_mock/webhook_fixtures/customer.source.created.json +31 -22
  55. data/lib/stripe_mock/webhook_fixtures/customer.source.updated.json +36 -25
  56. data/lib/stripe_mock/webhook_fixtures/customer.subscription.created.json +135 -47
  57. data/lib/stripe_mock/webhook_fixtures/customer.subscription.deleted.json +134 -45
  58. data/lib/stripe_mock/webhook_fixtures/customer.subscription.updated.json +135 -56
  59. data/lib/stripe_mock/webhook_fixtures/customer.updated.json +38 -47
  60. data/lib/stripe_mock/webhook_fixtures/invoice.created.json +176 -49
  61. data/lib/stripe_mock/webhook_fixtures/invoice.finalized.json +171 -0
  62. data/lib/stripe_mock/webhook_fixtures/invoice.paid.json +171 -0
  63. data/lib/stripe_mock/webhook_fixtures/invoice.payment_action_required.json +171 -0
  64. data/lib/stripe_mock/webhook_fixtures/invoice.payment_failed.json +149 -83
  65. data/lib/stripe_mock/webhook_fixtures/invoice.payment_succeeded.json +149 -90
  66. data/lib/stripe_mock/webhook_fixtures/invoice.upcoming.json +70 -0
  67. data/lib/stripe_mock/webhook_fixtures/invoice.updated.json +178 -50
  68. data/lib/stripe_mock/webhook_fixtures/invoiceitem.created.json +87 -13
  69. data/lib/stripe_mock/webhook_fixtures/invoiceitem.updated.json +88 -14
  70. data/lib/stripe_mock/webhook_fixtures/mandate.updated.json +34 -0
  71. data/lib/stripe_mock/webhook_fixtures/payment_intent.amount_capturable_updated.json +170 -0
  72. data/lib/stripe_mock/webhook_fixtures/payment_intent.canceled.json +73 -0
  73. data/lib/stripe_mock/webhook_fixtures/payment_intent.created.json +86 -0
  74. data/lib/stripe_mock/webhook_fixtures/payment_intent.payment_failed.json +225 -0
  75. data/lib/stripe_mock/webhook_fixtures/payment_intent.processing.json +162 -0
  76. data/lib/stripe_mock/webhook_fixtures/payment_intent.requires_action.json +191 -0
  77. data/lib/stripe_mock/webhook_fixtures/payment_intent.succeeded.json +196 -0
  78. data/lib/stripe_mock/webhook_fixtures/payment_link.created.json +47 -0
  79. data/lib/stripe_mock/webhook_fixtures/payment_link.updated.json +50 -0
  80. data/lib/stripe_mock/webhook_fixtures/payment_method.attached.json +63 -0
  81. data/lib/stripe_mock/webhook_fixtures/payment_method.detached.json +62 -0
  82. data/lib/stripe_mock/webhook_fixtures/payout.created.json +40 -0
  83. data/lib/stripe_mock/webhook_fixtures/payout.paid.json +40 -0
  84. data/lib/stripe_mock/webhook_fixtures/payout.updated.json +46 -0
  85. data/lib/stripe_mock/webhook_fixtures/plan.created.json +30 -13
  86. data/lib/stripe_mock/webhook_fixtures/plan.deleted.json +30 -13
  87. data/lib/stripe_mock/webhook_fixtures/plan.updated.json +34 -14
  88. data/lib/stripe_mock/webhook_fixtures/price.created.json +42 -0
  89. data/lib/stripe_mock/webhook_fixtures/price.deleted.json +42 -0
  90. data/lib/stripe_mock/webhook_fixtures/price.updated.json +48 -0
  91. data/lib/stripe_mock/webhook_fixtures/product.created.json +19 -13
  92. data/lib/stripe_mock/webhook_fixtures/product.deleted.json +20 -14
  93. data/lib/stripe_mock/webhook_fixtures/product.updated.json +24 -15
  94. data/lib/stripe_mock/webhook_fixtures/quote.accepted.json +92 -0
  95. data/lib/stripe_mock/webhook_fixtures/quote.canceled.json +92 -0
  96. data/lib/stripe_mock/webhook_fixtures/quote.created.json +92 -0
  97. data/lib/stripe_mock/webhook_fixtures/quote.finalized.json +92 -0
  98. data/lib/stripe_mock/webhook_fixtures/setup_intent.canceled.json +46 -0
  99. data/lib/stripe_mock/webhook_fixtures/setup_intent.created.json +51 -0
  100. data/lib/stripe_mock/webhook_fixtures/setup_intent.setup_failed.json +100 -0
  101. data/lib/stripe_mock/webhook_fixtures/setup_intent.succeeded.json +46 -0
  102. data/lib/stripe_mock/webhook_fixtures/subscription_schedule.canceled.json +119 -0
  103. data/lib/stripe_mock/webhook_fixtures/subscription_schedule.created.json +114 -0
  104. data/lib/stripe_mock/webhook_fixtures/subscription_schedule.released.json +111 -0
  105. data/lib/stripe_mock/webhook_fixtures/subscription_schedule.updated.json +125 -0
  106. data/lib/stripe_mock/webhook_fixtures/tax_rate.created.json +32 -0
  107. data/lib/stripe_mock/webhook_fixtures/tax_rate.updated.json +37 -0
  108. data/lib/stripe_mock.rb +7 -0
  109. data/spec/instance_spec.rb +7 -7
  110. data/spec/integration_examples/completing_checkout_sessions_example.rb +37 -0
  111. data/spec/list_spec.rb +38 -0
  112. data/spec/readme_spec.rb +1 -1
  113. data/spec/server_spec.rb +4 -2
  114. data/spec/shared_stripe_examples/account_examples.rb +9 -1
  115. data/spec/shared_stripe_examples/account_link_examples.rb +16 -0
  116. data/spec/shared_stripe_examples/balance_examples.rb +6 -0
  117. data/spec/shared_stripe_examples/card_token_examples.rb +17 -21
  118. data/spec/shared_stripe_examples/checkout_session_examples.rb +99 -0
  119. data/spec/shared_stripe_examples/customer_examples.rb +49 -23
  120. data/spec/shared_stripe_examples/express_login_link_examples.rb +12 -0
  121. data/spec/shared_stripe_examples/invoice_examples.rb +29 -8
  122. data/spec/shared_stripe_examples/payment_intent_examples.rb +84 -0
  123. data/spec/shared_stripe_examples/payment_method_examples.rb +336 -67
  124. data/spec/shared_stripe_examples/price_examples.rb +223 -0
  125. data/spec/shared_stripe_examples/product_examples.rb +1 -9
  126. data/spec/shared_stripe_examples/promotion_code_examples.rb +68 -0
  127. data/spec/shared_stripe_examples/refund_examples.rb +13 -0
  128. data/spec/shared_stripe_examples/setup_intent_examples.rb +17 -0
  129. data/spec/shared_stripe_examples/subscription_examples.rb +361 -9
  130. data/spec/shared_stripe_examples/transfer_examples.rb +10 -1
  131. data/spec/shared_stripe_examples/webhook_event_examples.rb +51 -5
  132. data/spec/spec_helper.rb +4 -0
  133. data/spec/stripe_mock_spec.rb +2 -2
  134. data/spec/support/stripe_examples.rb +8 -1
  135. data/stripe-ruby-mock.gemspec +7 -2
  136. metadata +73 -12
  137. data/.travis.yml +0 -28
@@ -0,0 +1,223 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples 'Price API' do
4
+ let(:product_id) { "product_id_1" }
5
+ let(:product) { stripe_helper.create_product(id: product_id) }
6
+
7
+ let(:other_product_id) { "product_id_2" }
8
+ let(:other_product) { stripe_helper.create_product(id: other_product_id) }
9
+
10
+ let(:price_attributes) { {
11
+ :id => "price_abc123",
12
+ :product => product_id,
13
+ :nickname => "My Mock price",
14
+ :amount => 9900,
15
+ :currency => "usd",
16
+ :interval => "month"
17
+ } }
18
+ let(:price) { Stripe::Price.create(price_attributes) }
19
+
20
+ let(:price_attributes_without_id){ price_attributes.merge(id: nil) }
21
+ let(:price_without_id){ Stripe::Price.create(price_attributes_without_id) }
22
+
23
+ let(:price_attributes_with_trial) { price_attributes.merge(id: "prod_TRIAL", :trial_period_days => 30) }
24
+ let(:price_with_trial) { Stripe::Price.create(price_attributes_with_trial) }
25
+
26
+ let(:metadata) { {:description => "desc text", :info => "info text"} }
27
+ let(:price_attributes_with_metadata) { price_attributes.merge(id: "prod_META", metadata: metadata) }
28
+ let(:price_with_metadata) { Stripe::Price.create(price_attributes_with_metadata) }
29
+
30
+ before(:each) do
31
+ product
32
+ other_product
33
+ end
34
+
35
+ it "creates a stripe price" do
36
+ expect(price.id).to eq('price_abc123')
37
+ expect(price.nickname).to eq('My Mock price')
38
+ expect(price.amount).to eq(9900)
39
+
40
+ expect(price.currency).to eq('usd')
41
+ expect(price.interval).to eq("month")
42
+
43
+ expect(price_with_metadata.metadata.description).to eq('desc text')
44
+ expect(price_with_metadata.metadata.info).to eq('info text')
45
+
46
+ expect(price_with_trial.trial_period_days).to eq(30)
47
+ end
48
+
49
+ it "creates a stripe price without specifying ID" do
50
+ expect(price_attributes_without_id[:id]).to be_nil
51
+ expect(price_without_id.id).to match(/^test_price_1/)
52
+ end
53
+
54
+ it "stores a created stripe price in memory" do
55
+ price
56
+ price2 = Stripe::Price.create(price_attributes.merge(id: "price_def456", amount: 299))
57
+
58
+ data = test_data_source(:prices)
59
+ expect(data[price.id]).to_not be_nil
60
+ expect(data[price.id][:amount]).to eq(9900)
61
+ expect(data[price2.id]).to_not be_nil
62
+ expect(data[price2.id][:amount]).to eq(299)
63
+ end
64
+
65
+ it "retrieves a stripe price" do
66
+ original = stripe_helper.create_price(product: product_id, amount: 1331, id: 'price_943843')
67
+ price = Stripe::Price.retrieve(original.id)
68
+
69
+ expect(price.id).to eq(original.id)
70
+ expect(price.amount).to eq(original.amount)
71
+ end
72
+
73
+ it "updates a stripe price" do
74
+ stripe_helper.create_price(id: 'super_member', product: product_id, amount: 111)
75
+
76
+ price = Stripe::Price.retrieve('super_member')
77
+ expect(price.amount).to eq(111)
78
+
79
+ price.amount = 789
80
+ price.save
81
+ price = Stripe::Price.retrieve('super_member')
82
+ expect(price.amount).to eq(789)
83
+ end
84
+
85
+ it "cannot retrieve a stripe price that doesn't exist" do
86
+ expect { Stripe::Price.retrieve('nope') }.to raise_error {|e|
87
+ expect(e).to be_a Stripe::InvalidRequestError
88
+ expect(e.param).to eq('price')
89
+ expect(e.http_status).to eq(404)
90
+ }
91
+ end
92
+
93
+ it "retrieves all prices" do
94
+ stripe_helper.create_price(id: 'price One', product: product_id, amount: 54321)
95
+ stripe_helper.create_price(id: 'price Two', product: product_id, amount: 98765)
96
+
97
+ all = Stripe::Price.list
98
+ expect(all.count).to eq(2)
99
+ expect(all.map &:id).to include('price One', 'price Two')
100
+ expect(all.map &:amount).to include(54321, 98765)
101
+ end
102
+
103
+ it 'retrieves prices with limit' do
104
+ 101.times do | i|
105
+ stripe_helper.create_price(id: "price #{i}", product: product_id, amount: 11)
106
+ end
107
+ all = Stripe::Price.list(limit: 100)
108
+
109
+ expect(all.count).to eq(100)
110
+ end
111
+
112
+ it "retrieves prices with lookup keys" do
113
+ stripe_helper.create_price(id: 'price One', product: product_id, amount: 54321, lookup_key: 'one')
114
+ stripe_helper.create_price(id: 'price Two', product: product_id, amount: 98765, lookup_key: 'two')
115
+
116
+ all = Stripe::Price.list({lookup_keys: ['one', 'two']})
117
+ expect(all.count).to eq(2)
118
+ expect(all.map &:id).to include('price One', 'price Two')
119
+ expect(all.map &:amount).to include(54321, 98765)
120
+
121
+ one = Stripe::Price.list({lookup_keys: ['one']})
122
+ expect(one.count).to eq(1)
123
+ expect(one.map &:id).to include('price One')
124
+ expect(one.map &:amount).to include(54321)
125
+
126
+ two = Stripe::Price.list({lookup_keys: ['two']})
127
+ expect(two.count).to eq(1)
128
+ expect(two.map &:id).to include('price Two')
129
+ expect(two.map &:amount).to include(98765)
130
+ end
131
+
132
+ it "retrieves prices filtering by currency" do
133
+ 5.times do | i|
134
+ stripe_helper.create_price(id: "usd price #{i}", product: product_id, amount: 11, currency: 'usd')
135
+ stripe_helper.create_price(id: "brl price #{i}", product: product_id, amount: 11, currency: 'brl')
136
+ end
137
+
138
+ all = Stripe::Price.list()
139
+ expect(all.count).to eq(10)
140
+
141
+ usd = Stripe::Price.list({currency: 'usd'})
142
+ expect(usd.count).to eq(5)
143
+ expect(usd.all? {|p| p.currency == 'usd' }).to be_truthy
144
+
145
+ brl = Stripe::Price.list({currency: 'brl'})
146
+ expect(brl.count).to eq(5)
147
+ expect(brl.all? {|p| p.currency == 'brl' }).to be_truthy
148
+ end
149
+
150
+ it "retrieves prices filtering by product" do
151
+ 5.times do | i|
152
+ stripe_helper.create_price(id: "product 1 price #{i}", product: product_id)
153
+ stripe_helper.create_price(id: "product 2 price #{i}", product: other_product_id)
154
+ end
155
+
156
+ all = Stripe::Price.list()
157
+ expect(all.count).to eq(10)
158
+
159
+ product_prices = Stripe::Price.list({product: product.id})
160
+ expect(product_prices.count).to eq(5)
161
+ expect(product_prices.all? {|p| p.product == product.id }).to be_truthy
162
+
163
+ other_product_prices = Stripe::Price.list({product: other_product.id})
164
+ expect(other_product_prices.count).to eq(5)
165
+ expect(other_product_prices.all? {|p| p.product == other_product.id }).to be_truthy
166
+ end
167
+
168
+ describe "Validations", :live => true do
169
+ include_context "stripe validator"
170
+ let(:params) { stripe_helper.create_price_params(product: product_id) }
171
+ let(:subject) { Stripe::Price.create(params) }
172
+
173
+ describe "Associations" do
174
+ let(:not_found_product_id){ "prod_NONEXIST" }
175
+ let(:not_found_message) { stripe_validator.not_found_message(Stripe::Product, not_found_product_id) }
176
+ let(:params) { stripe_helper.create_price_params(product: not_found_product_id) }
177
+ let(:products) { stripe_helper.list_products(100).data }
178
+
179
+ it "validates associated product" do
180
+ expect(products.map(&:id)).to_not include(not_found_product_id)
181
+ expect { subject }.to raise_error(Stripe::InvalidRequestError, not_found_message)
182
+ end
183
+ end
184
+
185
+ describe "Presence" do
186
+ after do
187
+ params.delete(@name)
188
+ message = "Missing required param: #{@name}."
189
+ expect { subject }.to raise_error(Stripe::InvalidRequestError, message)
190
+ end
191
+
192
+ it("validates presence of currency") { @name = :currency }
193
+ end
194
+ end
195
+
196
+ describe "Mock Data" do
197
+ let(:mock_object) { StripeMock::Data.mock_price }
198
+ let(:known_attributes) { [
199
+ :id,
200
+ :object,
201
+ :active,
202
+ :billing_scheme,
203
+ :created,
204
+ :currency,
205
+ :livemode,
206
+ :lookup_key,
207
+ :metadata,
208
+ :nickname,
209
+ :product,
210
+ :recurring,
211
+ :tiers_mode,
212
+ :transform_quantity,
213
+ :type,
214
+ :unit_amount,
215
+ :unit_amount_decimal
216
+ ] }
217
+
218
+ it "includes all retreived attributes" do
219
+ expect(mock_object.keys).to eql(known_attributes)
220
+ end
221
+ end
222
+
223
+ end
@@ -1,7 +1,7 @@
1
1
  require "spec_helper"
2
2
 
3
3
  shared_examples "Product API" do
4
- let(:product_attributes) { {id: "prod_123", name: "My Mock Product", type: "service"} }
4
+ let(:product_attributes) { {id: "prod_123", name: "My Mock Product"} }
5
5
  let(:product) { Stripe::Product.create(product_attributes) }
6
6
 
7
7
  it "creates a stripe product" do
@@ -101,14 +101,6 @@ shared_examples "Product API" do
101
101
  it("requires a name") { @attribute_name = :name }
102
102
  end
103
103
 
104
- describe "Inclusion" do
105
- it "validates inclusion of type in 'good' or 'service'" do
106
- expect {
107
- Stripe::Product.create(params.merge({type: "OOPS"}))
108
- }.to raise_error(Stripe::InvalidRequestError, "Invalid type: must be one of good or service")
109
- end
110
- end
111
-
112
104
  describe "Uniqueness" do
113
105
  let(:already_exists_message){ stripe_validator.already_exists_message(Stripe::Product) }
114
106
 
@@ -0,0 +1,68 @@
1
+ require "spec_helper"
2
+
3
+ shared_examples "PromotionCode API" do
4
+ let(:coupon) { stripe_helper.create_coupon }
5
+
6
+ it "creates a promotion code" do
7
+ promotion_code = Stripe::PromotionCode.create({id: "promo_123", coupon: coupon.id, code: "FREESTUFF"})
8
+
9
+ expect(promotion_code.id).to eq("promo_123")
10
+ expect(promotion_code.code).to eq("FREESTUFF")
11
+ expect(promotion_code.coupon).to eq(coupon.id)
12
+ end
13
+
14
+ it "creates a promotion code without specifying code" do
15
+ promotion_code = Stripe::PromotionCode.create({id: "promo_123", coupon: coupon.id})
16
+
17
+ expect(promotion_code.id).to eq("promo_123")
18
+ expect(promotion_code.code).to eq("TESTCODE")
19
+ expect(promotion_code.coupon).to eq(coupon.id)
20
+ end
21
+
22
+ it "cannot create a promotion code without a coupon" do
23
+ expect {
24
+ Stripe::PromotionCode.create
25
+ }.to raise_error { |e|
26
+ expect(e).to be_a(Stripe::InvalidRequestError)
27
+ expect(e.message).to eq("Missing required param: coupon")
28
+ }
29
+ end
30
+
31
+ it "requires minimum amount currency when minimum amount is provided" do
32
+ expect {
33
+ Stripe::PromotionCode.create(coupon: coupon, restrictions: {minimum_amount: 100})
34
+ }.to raise_error { |e|
35
+ expect(e).to be_a(Stripe::InvalidRequestError)
36
+ expect(e.message).to eq("You must pass minimum_amount_currency when passing minimum_amount")
37
+ }
38
+ end
39
+
40
+ it "updates a promotion code" do
41
+ promotion_code = Stripe::PromotionCode.create({coupon: coupon.id})
42
+ expect(promotion_code.active).to eq(true)
43
+
44
+ updated = Stripe::PromotionCode.update(promotion_code.id, active: false)
45
+
46
+ expect(updated.active).to eq(false)
47
+ end
48
+
49
+ it "retrieves a promotion code" do
50
+ original = Stripe::PromotionCode.create({coupon: coupon.id})
51
+
52
+ promotion_code = Stripe::PromotionCode.retrieve(original.id)
53
+
54
+ expect(promotion_code.id).to eq(original.id)
55
+ expect(promotion_code.code).to eq(original.code)
56
+ expect(promotion_code.coupon).to eq(original.coupon)
57
+ end
58
+
59
+ it "lists all promotion codes" do
60
+ Stripe::PromotionCode.create({coupon: coupon.id, code: "10PERCENT"})
61
+ Stripe::PromotionCode.create({coupon: coupon.id, code: "20PERCENT"})
62
+
63
+ all = Stripe::PromotionCode.list
64
+
65
+ expect(all.count).to eq(2)
66
+ expect(all.map(&:code)).to include("10PERCENT", "20PERCENT")
67
+ end
68
+ end
@@ -22,6 +22,19 @@ shared_examples 'Refund API' do
22
22
  expect(charge.amount_refunded).to eq(999)
23
23
  end
24
24
 
25
+ it "refunds a stripe payment intent" do
26
+ payment_intent = Stripe::PaymentIntent.create(
27
+ amount: 999,
28
+ currency: 'USD'
29
+ )
30
+
31
+ refund = Stripe::Refund.create(
32
+ payment_intent: payment_intent.id
33
+ )
34
+ expect(refund.amount).to eq(999)
35
+ end
36
+
37
+
25
38
  it "creates a stripe refund with a status" do
26
39
  charge = Stripe::Charge.create(
27
40
  amount: 999,
@@ -10,6 +10,14 @@ shared_examples 'SetupIntent API' do
10
10
  expect(setup_intent.status).to eq('requires_payment_method')
11
11
  end
12
12
 
13
+ it 'creates a stripe setup intent with payment method' do
14
+ setup_intent = Stripe::SetupIntent.create(payment_method: 'random')
15
+
16
+ expect(setup_intent.id).to match(/^test_si/)
17
+ expect(setup_intent.metadata.to_hash).to eq({})
18
+ expect(setup_intent.status).to eq('requires_action')
19
+ end
20
+
13
21
  describe "listing setup_intent" do
14
22
  before do
15
23
  3.times do
@@ -42,6 +50,15 @@ shared_examples 'SetupIntent API' do
42
50
  }
43
51
  end
44
52
 
53
+ it "expands payment_method" do
54
+ payment_method = Stripe::PaymentMethod.create(type: "card")
55
+ original = Stripe::SetupIntent.create(payment_method: payment_method.id)
56
+
57
+ setup_intent = Stripe::SetupIntent.retrieve({id: original.id, expand: ["payment_method"]})
58
+
59
+ expect(setup_intent.payment_method).to eq(payment_method)
60
+ end
61
+
45
62
  it "confirms a stripe setup_intent" do
46
63
  setup_intent = Stripe::SetupIntent.create()
47
64
  confirmed_setup_intent = setup_intent.confirm()