Skip to content

Commit c9d9103

Browse files
Merge remote-tracking branch 'upstream/master'
2 parents a70d8cd + 0c1c780 commit c9d9103

File tree

6 files changed

+198
-3
lines changed

6 files changed

+198
-3
lines changed

lib/stripe_mock.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
require 'stripe_mock/request_handlers/sources.rb'
4949
require 'stripe_mock/request_handlers/customers.rb'
5050
require 'stripe_mock/request_handlers/coupons.rb'
51+
require 'stripe_mock/request_handlers/disputes.rb'
5152
require 'stripe_mock/request_handlers/events.rb'
5253
require 'stripe_mock/request_handlers/invoices.rb'
5354
require 'stripe_mock/request_handlers/invoice_items.rb'

lib/stripe_mock/data.rb

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,75 @@ def self.mock_transfer(params={})
466466
}.merge(params)
467467
end
468468

469+
def self.mock_disputes(ids=[])
470+
disputes = {}
471+
ids.each do |id|
472+
disputes[id] = self.mock_dispute(id: id)
473+
end
474+
disputes
475+
end
476+
477+
def self.mock_dispute(params={})
478+
id = params[:id] || "dp_test_dispute"
479+
{
480+
:id => id,
481+
:object => "dispute",
482+
:amount => 195,
483+
:balance_transactions => [],
484+
:charge => "ch_15RsQR2eZvKYlo2CA8IfzCX0",
485+
:created => 1422915137,
486+
:currency => "usd",
487+
:evidence => self.mock_dispute_evidence,
488+
:evidence_details => self.mock_dispute_evidence_details,
489+
:is_charge_refundable => false,
490+
:livemode => false,
491+
:metadata => {},
492+
:reason => "general",
493+
:status => "under_review"
494+
}.merge(params)
495+
end
496+
497+
def self.mock_dispute_evidence
498+
{
499+
:access_activity_log => nil,
500+
:billing_address => nil,
501+
:cancellation_policy => nil,
502+
:cancellation_policy_disclosure => nil,
503+
:cancellation_rebuttal => nil,
504+
:customer_communication => nil,
505+
:customer_email_address => nil,
506+
:customer_name => nil,
507+
:customer_purchase_ip => nil,
508+
:customer_signature => nil,
509+
:duplicate_charge_documentation => nil,
510+
:duplicate_charge_explanation => nil,
511+
:duplicate_charge_id => nil,
512+
:product_description => nil,
513+
:receipt => nil,
514+
:refund_policy => nil,
515+
:refund_policy_disclosure => nil,
516+
:refund_refusal_explanation => nil,
517+
:service_date => nil,
518+
:service_documentation => nil,
519+
:shipping_address => nil,
520+
:shipping_carrier => nil,
521+
:shipping_date => nil,
522+
:shipping_documentation => nil,
523+
:shipping_tracking_number => nil,
524+
:uncategorized_file => nil,
525+
:uncategorized_text => nil
526+
}
527+
end
528+
529+
def self.mock_dispute_evidence_details
530+
{
531+
:due_by => 1424303999,
532+
:has_evidence => false,
533+
:past_due => false,
534+
:submission_count => 0
535+
}
536+
end
537+
469538
def self.mock_transfer_array
470539
{
471540
:data => [test_transfer, test_transfer, test_transfer],

lib/stripe_mock/instance.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def self.handler_for_method_url(method_url)
2525
include StripeMock::RequestHandlers::Subscriptions # must be before Customers
2626
include StripeMock::RequestHandlers::Customers
2727
include StripeMock::RequestHandlers::Coupons
28+
include StripeMock::RequestHandlers::Disputes
2829
include StripeMock::RequestHandlers::Events
2930
include StripeMock::RequestHandlers::Invoices
3031
include StripeMock::RequestHandlers::InvoiceItems
@@ -35,7 +36,7 @@ def self.handler_for_method_url(method_url)
3536
include StripeMock::RequestHandlers::Tokens
3637

3738

38-
attr_reader :accounts, :bank_tokens, :charges, :coupons, :customers, :events,
39+
attr_reader :accounts, :bank_tokens, :charges, :coupons, :customers, :disputes, :events,
3940
:invoices, :invoice_items, :orders, :plans, :recipients, :transfers,
4041
:subscriptions
4142

@@ -48,6 +49,7 @@ def initialize
4849
@customers = {}
4950
@charges = {}
5051
@coupons = {}
52+
@disputes = Data.mock_disputes(['dp_05RsQX2eZvKYlo2C0FRTGSSA','dp_15RsQX2eZvKYlo2C0ERTYUIA', 'dp_25RsQX2eZvKYlo2C0ZXCVBNM', 'dp_35RsQX2eZvKYlo2C0QAZXSWE', 'dp_45RsQX2eZvKYlo2C0EDCVFRT', 'dp_55RsQX2eZvKYlo2C0OIKLJUY', 'dp_65RsQX2eZvKYlo2C0ASDFGHJ', 'dp_75RsQX2eZvKYlo2C0EDCXSWQ', 'dp_85RsQX2eZvKYlo2C0UJMCDET', 'dp_95RsQX2eZvKYlo2C0EDFRYUI'])
5153
@events = {}
5254
@invoices = {}
5355
@invoice_items = {}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
module StripeMock
2+
module RequestHandlers
3+
module Disputes
4+
5+
def Disputes.included(klass)
6+
klass.add_handler 'get /v1/disputes/(.*)', :get_dispute
7+
klass.add_handler 'post /v1/disputes/(.*)/close', :close_dispute
8+
klass.add_handler 'post /v1/disputes/(.*)', :update_dispute
9+
klass.add_handler 'get /v1/disputes', :list_disputes
10+
end
11+
12+
def get_dispute(route, method_url, params, headers)
13+
route =~ method_url
14+
assert_existence :dispute, $1, disputes[$1]
15+
end
16+
17+
def update_dispute(route, method_url, params, headers)
18+
dispute = get_dispute(route, method_url, params, headers)
19+
dispute.merge!(params)
20+
dispute
21+
end
22+
23+
def close_dispute(route, method_url, params, headers)
24+
dispute = get_dispute(route, method_url, params, headers)
25+
dispute.merge!({:status => 'lost'})
26+
dispute
27+
end
28+
29+
def list_disputes(route, method_url, params, headers)
30+
Data.mock_list_object(disputes.values, params)
31+
end
32+
33+
end
34+
end
35+
end
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
require 'spec_helper'
2+
require 'pp'
3+
4+
shared_examples 'Dispute API' do
5+
6+
it "returns an error if dispute does not exist" do
7+
dispute_id = 'dp_xxxxxxxxxxxxxxxxxxxxxxxx'
8+
9+
expect {
10+
Stripe::Dispute.retrieve(dispute_id)
11+
}.to raise_error { |e|
12+
expect(e).to be_a(Stripe::InvalidRequestError)
13+
expect(e.message).to eq('No such dispute: ' + dispute_id)
14+
}
15+
end
16+
17+
it "retrieves a single dispute" do
18+
dispute_id = 'dp_05RsQX2eZvKYlo2C0FRTGSSA'
19+
dispute = Stripe::Dispute.retrieve(dispute_id)
20+
21+
expect(dispute).to be_a(Stripe::Dispute)
22+
expect(dispute.id).to eq(dispute_id)
23+
end
24+
25+
it "updates a dispute" do
26+
dispute_id = 'dp_65RsQX2eZvKYlo2C0ASDFGHJ'
27+
dispute = Stripe::Dispute.retrieve(dispute_id)
28+
29+
expect(dispute).to be_a(Stripe::Dispute)
30+
expect(dispute.id).to eq(dispute_id)
31+
expect(dispute.evidence.customer_name).to eq(nil)
32+
expect(dispute.evidence.product_description).to eq(nil)
33+
expect(dispute.evidence.shipping_documentation).to eq(nil)
34+
35+
dispute.evidence = {
36+
:customer_name => 'Rebel Idealist',
37+
:product_description => 'Lorem ipsum dolor sit amet.',
38+
:shipping_documentation => 'fil_15BZxW2eZvKYlo2CvQbrn9dc',
39+
}
40+
dispute.save
41+
42+
dispute = Stripe::Dispute.retrieve(dispute_id)
43+
44+
expect(dispute).to be_a(Stripe::Dispute)
45+
expect(dispute.id).to eq(dispute_id)
46+
expect(dispute.evidence.customer_name).to eq('Rebel Idealist')
47+
expect(dispute.evidence.product_description).to eq('Lorem ipsum dolor sit amet.')
48+
expect(dispute.evidence.shipping_documentation).to eq('fil_15BZxW2eZvKYlo2CvQbrn9dc')
49+
end
50+
51+
it "closes a dispute" do
52+
dispute_id = 'dp_75RsQX2eZvKYlo2C0EDCXSWQ'
53+
54+
dispute = Stripe::Dispute.retrieve(dispute_id)
55+
56+
expect(dispute).to be_a(Stripe::Dispute)
57+
expect(dispute.id).to eq(dispute_id)
58+
expect(dispute.status).to eq('under_review')
59+
60+
dispute.close
61+
62+
dispute = Stripe::Dispute.retrieve(dispute_id)
63+
64+
expect(dispute).to be_a(Stripe::Dispute)
65+
expect(dispute.id).to eq(dispute_id)
66+
expect(dispute.status).to eq('lost')
67+
end
68+
69+
describe "listing disputes" do
70+
71+
it "retrieves all disputes" do
72+
disputes = Stripe::Dispute.all
73+
74+
expect(disputes.count).to eq(10)
75+
expect(disputes.map &:id).to include('dp_05RsQX2eZvKYlo2C0FRTGSSA','dp_15RsQX2eZvKYlo2C0ERTYUIA', 'dp_25RsQX2eZvKYlo2C0ZXCVBNM', 'dp_35RsQX2eZvKYlo2C0QAZXSWE', 'dp_45RsQX2eZvKYlo2C0EDCVFRT', 'dp_55RsQX2eZvKYlo2C0OIKLJUY', 'dp_65RsQX2eZvKYlo2C0ASDFGHJ', 'dp_75RsQX2eZvKYlo2C0EDCXSWQ', 'dp_85RsQX2eZvKYlo2C0UJMCDET', 'dp_95RsQX2eZvKYlo2C0EDFRYUI')
76+
end
77+
78+
it "retrieves disputes with a limit(3)" do
79+
disputes = Stripe::Dispute.all(limit: 3)
80+
81+
expect(disputes.count).to eq(3)
82+
expect(disputes.map &:id).to include('dp_05RsQX2eZvKYlo2C0FRTGSSA','dp_15RsQX2eZvKYlo2C0ERTYUIA', 'dp_25RsQX2eZvKYlo2C0ZXCVBNM')
83+
end
84+
85+
end
86+
87+
end

spec/support/stripe_examples.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ def require_stripe_examples
44
Dir["./spec/integration_examples/**/*.rb"].each {|f| require f}
55
end
66

7-
def it_behaves_like_stripe(&block)
7+
def it_behaves_like_stripe(&block)
88
it_behaves_like 'Account API', &block
99
it_behaves_like 'Bank Account Token Mocking', &block
1010
it_behaves_like 'Card Token Mocking', &block
1111
it_behaves_like 'Card API', &block
1212
it_behaves_like 'Charge API', &block
1313
it_behaves_like 'Coupon API', &block
14-
it_behaves_like 'Customer API', &block
14+
it_behaves_like 'Customer API', &block
15+
it_behaves_like 'Dispute API', &block
1516
it_behaves_like 'Extra Features', &block
1617
it_behaves_like 'Invoice API', &block
1718
it_behaves_like 'Invoice Item API', &block

0 commit comments

Comments
 (0)