Skip to content

Commit 19c8a77

Browse files
committed
move to headers hash for idempotent calls
1 parent 9053d23 commit 19c8a77

File tree

4 files changed

+43
-26
lines changed

4 files changed

+43
-26
lines changed

lib/stripe_mock/request_handlers/charges.rb

+6-3
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,12 @@ def Charges.included(klass)
1313
end
1414

1515
def new_charge(route, method_url, params, headers)
16-
if params[:idempotency_key] && charges.any?
17-
original_charge = charges.values.find { |c| c[:idempotency_key] == params[:idempotency_key]}
18-
return charges[original_charge[:id]] if original_charge
16+
if headers && headers[:idempotency_key]
17+
params[:idempotency_key] = headers[:idempotency_key]
18+
if charges.any?
19+
original_charge = charges.values.find { |c| c[:idempotency_key] == headers[:idempotency_key]}
20+
return charges[original_charge[:id]] if original_charge
21+
end
1922
end
2023

2124
id = new_id('ch')

lib/stripe_mock/request_handlers/refunds.rb

+6-3
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@ def Refunds.included(klass)
1010
end
1111

1212
def new_refund(route, method_url, params, headers)
13-
if params[:idempotency_key] && refunds.any?
14-
original_refund = refunds.values.find { |c| c[:idempotency_key] == params[:idempotency_key]}
15-
return refunds[original_refund[:id]] if original_refund
13+
if headers && headers[:idempotency_key]
14+
params[:idempotency_key] = headers[:idempotency_key]
15+
if refunds.any?
16+
original_refund = refunds.values.find { |c| c[:idempotency_key] == headers[:idempotency_key]}
17+
return refunds[original_refund[:id]] if original_refund
18+
end
1619
end
1720

1821
charge = assert_existence :charge, params[:charge], charges[params[:charge]]

spec/shared_stripe_examples/charge_examples.rb

+15-10
Original file line numberDiff line numberDiff line change
@@ -476,29 +476,34 @@
476476

477477
describe "idempotency" do
478478
let(:customer) { Stripe::Customer.create(email: '[email protected]') }
479-
let(:idempotent_charge_params) {{
479+
let(:charge_params) {{
480480
amount: 777,
481481
currency: 'USD',
482482
customer: customer.id,
483-
capture: true,
483+
capture: true
484+
}}
485+
let(:charge_headers) {{
484486
idempotency_key: 'onceisenough'
485487
}}
486488

487489
it "returns the original charge if the same idempotency_key is passed in" do
488-
charge1 = Stripe::Charge.create(idempotent_charge_params)
489-
charge2 = Stripe::Charge.create(idempotent_charge_params)
490+
charge1 = Stripe::Charge.create(charge_params, charge_headers)
491+
charge2 = Stripe::Charge.create(charge_params, charge_headers)
490492

491493
expect(charge1).to eq(charge2)
492494
end
493495

494-
it "returns different charges if different idempotency_keys are used for each charge" do
495-
idempotent_charge_params2 = idempotent_charge_params.clone
496-
idempotent_charge_params2[:idempotency_key] = 'thisoneisdifferent'
496+
context 'different key' do
497+
let(:different_charge_headers) {{
498+
idempotency_key: 'thisoneisdifferent'
499+
}}
497500

498-
charge1 = Stripe::Charge.create(idempotent_charge_params)
499-
charge2 = Stripe::Charge.create(idempotent_charge_params2)
501+
it "returns different charges if different idempotency_keys are used for each charge" do
502+
charge1 = Stripe::Charge.create(charge_params, charge_headers)
503+
charge2 = Stripe::Charge.create(charge_params, different_charge_headers)
500504

501-
expect(charge1).not_to eq(charge2)
505+
expect(charge1).not_to eq(charge2)
506+
end
502507
end
503508
end
504509

spec/shared_stripe_examples/refund_examples.rb

+16-10
Original file line numberDiff line numberDiff line change
@@ -337,26 +337,32 @@
337337
capture: true
338338
)
339339
end
340-
let(:idempotent_refund_params) {{
341-
charge: charge.id,
340+
let(:refund_params) {{
341+
charge: charge.id
342+
}}
343+
344+
let(:refund_headers) {{
342345
idempotency_key: 'onceisenough'
343346
}}
344347

345348
it "returns the original refund if the same idempotency_key is passed in" do
346-
refund1 = Stripe::Refund.create(idempotent_refund_params)
347-
refund2 = Stripe::Refund.create(idempotent_refund_params)
349+
refund1 = Stripe::Refund.create(refund_params, refund_headers)
350+
refund2 = Stripe::Refund.create(refund_params, refund_headers)
348351

349352
expect(refund1).to eq(refund2)
350353
end
351354

352-
it "returns different charges if different idempotency_keys are used for each charge" do
353-
idempotent_refund_params2 = idempotent_refund_params.clone
354-
idempotent_refund_params2[:idempotency_key] = 'thisoneisdifferent'
355+
context 'different key' do
356+
let(:different_refund_headers) {{
357+
idempotency_key: 'thisoneisdifferent'
358+
}}
355359

356-
refund1 = Stripe::Refund.create(idempotent_refund_params)
357-
refund2 = Stripe::Refund.create(idempotent_refund_params2)
360+
it "returns different charges if different idempotency_keys are used for each charge" do
361+
refund1 = Stripe::Refund.create(refund_params, refund_headers)
362+
refund2 = Stripe::Refund.create(refund_params, different_refund_headers)
358363

359-
expect(refund1).not_to eq(refund2)
364+
expect(refund1).not_to eq(refund2)
365+
end
360366
end
361367
end
362368
end

0 commit comments

Comments
 (0)