fake_braintree 0.0.5 → 0.0.6
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.
- data/.travis.yml +5 -0
- data/Changelog.md +7 -0
- data/README.md +103 -6
- data/Rakefile +2 -2
- data/fake_braintree.gemspec +6 -1
- data/lib/fake_braintree.rb +49 -10
- data/lib/fake_braintree/customer.rb +81 -25
- data/lib/fake_braintree/helpers.rb +4 -0
- data/lib/fake_braintree/redirect.rb +37 -0
- data/lib/fake_braintree/sinatra_app.rb +48 -15
- data/lib/fake_braintree/subscription.rb +62 -11
- data/lib/fake_braintree/version.rb +1 -1
- data/spec/fake_braintree/credit_card_spec.rb +8 -15
- data/spec/fake_braintree/customer_spec.rb +56 -48
- data/spec/fake_braintree/subscription_spec.rb +67 -41
- data/spec/fake_braintree/transaction_spec.rb +44 -0
- data/spec/fake_braintree/transparent_redirect_spec.rb +76 -0
- data/spec/fake_braintree_spec.rb +79 -26
- data/spec/spec_helper.rb +26 -11
- data/spec/support/braintree_helpers.rb +8 -4
- data/spec/support/customer_helpers.rb +12 -0
- data/spec/support/subscription_helpers.rb +6 -0
- metadata +89 -18
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FakeBraintree::SinatraApp do
|
4
|
+
context "Braintree::Transaction.sale" do
|
5
|
+
it "successfully creates a transaction" do
|
6
|
+
result = Braintree::Transaction.sale(:payment_method_token => cc_token, :amount => 10.00)
|
7
|
+
result.should be_success
|
8
|
+
end
|
9
|
+
|
10
|
+
context "when all cards are declined" do
|
11
|
+
before { FakeBraintree.decline_all_cards! }
|
12
|
+
|
13
|
+
it "fails" do
|
14
|
+
result = Braintree::Transaction.sale(:payment_method_token => cc_token, :amount => 10.00)
|
15
|
+
result.should_not be_success
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe FakeBraintree::SinatraApp do
|
22
|
+
context "Braintree::Transaction.find" do
|
23
|
+
it "can find a created sale" do
|
24
|
+
id = create_transaction.id
|
25
|
+
result = Braintree::Transaction.find(id)
|
26
|
+
result.amount.should == amount
|
27
|
+
end
|
28
|
+
|
29
|
+
it "can find >1 transaction" do
|
30
|
+
Braintree::Transaction.find(create_transaction.id).should be
|
31
|
+
Braintree::Transaction.find(create_transaction.id).should be
|
32
|
+
end
|
33
|
+
|
34
|
+
it "raises an error when the transaction does not exist" do
|
35
|
+
expect { Braintree::Transaction.find('foobar') }.to raise_error(Braintree::NotFoundError)
|
36
|
+
end
|
37
|
+
|
38
|
+
def create_transaction
|
39
|
+
Braintree::Transaction.sale(:payment_method_token => cc_token, :amount => amount).transaction
|
40
|
+
end
|
41
|
+
|
42
|
+
let(:amount) { 10.00 }
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FakeBraintree::SinatraApp do
|
4
|
+
context "Braintree::TransparentRedirect.url" do
|
5
|
+
it "returns a URL that will redirect with a token for the specified request" do
|
6
|
+
redirect_url = "http://example.com/redirect_path"
|
7
|
+
|
8
|
+
response = post_transparent_redirect(:redirect_url => redirect_url, :customer => build_customer_hash)
|
9
|
+
|
10
|
+
response.code.should == "303"
|
11
|
+
response["Location"].should =~ %r{http://example\.com/redirect_path}
|
12
|
+
params = parse_redirect(response)
|
13
|
+
params[:http_status].should == "200"
|
14
|
+
params[:id].should_not be_nil
|
15
|
+
params[:kind].should_not be_nil
|
16
|
+
end
|
17
|
+
|
18
|
+
it "rejects submissions without transparent redirect data" do
|
19
|
+
response = post_transparent_redirect_without_data
|
20
|
+
response.code.should == "422"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "Braintree::TransparentRedirect.confirm" do
|
25
|
+
it "confirms and runs the specified request" do
|
26
|
+
number = "4111111111111111"
|
27
|
+
customer_hash = build_customer_hash(:credit_card => { :number => number })
|
28
|
+
response = post_transparent_redirect(:customer => customer_hash)
|
29
|
+
query = parse_query(response)
|
30
|
+
|
31
|
+
result = Braintree::TransparentRedirect.confirm(query)
|
32
|
+
|
33
|
+
result.should be_success
|
34
|
+
|
35
|
+
customer = Braintree::Customer.find(result.customer.id)
|
36
|
+
customer.credit_cards.first.last_4.should == "1111"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def build_customer_hash(options = {})
|
41
|
+
{
|
42
|
+
:credit_card => {
|
43
|
+
:number => "4111111111111111",
|
44
|
+
:expiration_date => "4/2015",
|
45
|
+
:cardholder_name => "Susie Spender"
|
46
|
+
}.update(options[:credit_card] || {})
|
47
|
+
}
|
48
|
+
end
|
49
|
+
|
50
|
+
def post_transparent_redirect(data)
|
51
|
+
params = data.dup
|
52
|
+
redirect_url = params.delete(:redirect_url) || "http://example.com/redirect_path"
|
53
|
+
params[:tr_data] = Braintree::TransparentRedirect.create_customer_data(:redirect_url => redirect_url)
|
54
|
+
post_transparent_redirect_params(params)
|
55
|
+
end
|
56
|
+
|
57
|
+
def post_transparent_redirect_without_data
|
58
|
+
post_transparent_redirect_params({})
|
59
|
+
end
|
60
|
+
|
61
|
+
def post_transparent_redirect_params(params)
|
62
|
+
uri = URI.parse(Braintree::TransparentRedirect.url)
|
63
|
+
Net::HTTP.start(uri.host, uri.port) do |http|
|
64
|
+
http.post(uri.path, Rack::Utils.build_nested_query(params))
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def parse_redirect(response)
|
69
|
+
query = parse_query(response)
|
70
|
+
Braintree::Configuration.gateway.transparent_redirect.parse_and_validate_query_string(query)
|
71
|
+
end
|
72
|
+
|
73
|
+
def parse_query(response)
|
74
|
+
URI.parse(response["Location"]).query
|
75
|
+
end
|
76
|
+
end
|
data/spec/fake_braintree_spec.rb
CHANGED
@@ -1,16 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe FakeBraintree, ".credit_card_from_token" do
|
4
|
-
let(:cc_number) { %w(4111 1111 1111 9876).join }
|
5
|
-
let(:cc_number_2) { %w(4111 1111 1111 2222).join }
|
6
|
-
let(:expiration_date) { "04/2016" }
|
7
|
-
let(:expiration_date_2) { "05/2019" }
|
8
|
-
let(:token) { braintree_credit_card_token(cc_number, expiration_date) }
|
9
|
-
let(:token_2) { braintree_credit_card_token(cc_number_2, expiration_date_2) }
|
10
|
-
|
11
4
|
it "looks up the credit card based on a CC token" do
|
12
5
|
credit_card = FakeBraintree.credit_card_from_token(token)
|
13
|
-
credit_card["last_4"].should ==
|
6
|
+
credit_card["last_4"].should == TEST_CC_NUMBER[-4,4]
|
14
7
|
credit_card["expiration_year"].should == "2016"
|
15
8
|
credit_card["expiration_month"].should == "04"
|
16
9
|
|
@@ -19,27 +12,28 @@ describe FakeBraintree, ".credit_card_from_token" do
|
|
19
12
|
credit_card["expiration_year"].should == "2019"
|
20
13
|
credit_card["expiration_month"].should == "05"
|
21
14
|
end
|
15
|
+
|
16
|
+
let(:cc_number_2) { %w(4111 1111 1111 2222).join }
|
17
|
+
let(:expiration_date) { "04/2016" }
|
18
|
+
let(:expiration_date_2) { "05/2019" }
|
19
|
+
let(:token) { braintree_credit_card_token(TEST_CC_NUMBER, expiration_date) }
|
20
|
+
let(:token_2) { braintree_credit_card_token(cc_number_2, expiration_date_2) }
|
22
21
|
end
|
23
22
|
|
24
23
|
describe FakeBraintree, ".decline_all_cards!" do
|
25
|
-
|
26
|
-
let(:expiration_date) { "04/2016" }
|
27
|
-
let(:token) { braintree_credit_card_token(cc_number, expiration_date) }
|
28
|
-
let(:amount) { 10.00 }
|
29
|
-
|
30
|
-
before do
|
31
|
-
FakeBraintree.decline_all_cards!
|
32
|
-
end
|
24
|
+
before { FakeBraintree.decline_all_cards! }
|
33
25
|
|
34
26
|
it "declines all cards" do
|
35
|
-
|
36
|
-
result.should_not be_success
|
27
|
+
create_sale.should_not be_success
|
37
28
|
end
|
38
29
|
|
39
30
|
it "stops declining cards after clear! is called" do
|
40
31
|
FakeBraintree.clear!
|
41
|
-
|
42
|
-
|
32
|
+
create_sale.should be_success
|
33
|
+
end
|
34
|
+
|
35
|
+
def create_sale
|
36
|
+
Braintree::CreditCard.sale(cc_token, :amount => 10.00)
|
43
37
|
end
|
44
38
|
end
|
45
39
|
|
@@ -49,11 +43,11 @@ describe FakeBraintree, ".log_file_path" do
|
|
49
43
|
end
|
50
44
|
end
|
51
45
|
|
52
|
-
describe
|
46
|
+
describe Braintree::Configuration do
|
53
47
|
subject { Braintree::Configuration }
|
54
48
|
|
55
|
-
it "sets the environment to
|
56
|
-
subject.environment.should == :
|
49
|
+
it "sets the environment to development" do
|
50
|
+
subject.environment.should == :development
|
57
51
|
end
|
58
52
|
|
59
53
|
it "sets some fake API credentials" do
|
@@ -74,7 +68,7 @@ end
|
|
74
68
|
|
75
69
|
describe FakeBraintree, ".clear_log!" do
|
76
70
|
it "clears the log file" do
|
77
|
-
|
71
|
+
write_to_log
|
78
72
|
subject.clear_log!
|
79
73
|
File.read(FakeBraintree.log_file_path).should == ""
|
80
74
|
end
|
@@ -83,9 +77,17 @@ describe FakeBraintree, ".clear_log!" do
|
|
83
77
|
FakeBraintree.expects(:clear_log!)
|
84
78
|
FakeBraintree.clear!
|
85
79
|
end
|
80
|
+
|
81
|
+
def write_to_log
|
82
|
+
Braintree::Configuration.logger.info('foo bar baz')
|
83
|
+
end
|
86
84
|
end
|
87
85
|
|
88
86
|
describe FakeBraintree, "VALID_CREDIT_CARDS" do
|
87
|
+
it "includes only credit cards that are valid in the Braintree sandbox" do
|
88
|
+
FakeBraintree::VALID_CREDIT_CARDS.sort.should == valid_credit_cards.sort
|
89
|
+
end
|
90
|
+
|
89
91
|
let(:valid_credit_cards) do
|
90
92
|
%w(4111111111111111 4005519200000004
|
91
93
|
4009348888881881 4012000033330026
|
@@ -96,8 +98,59 @@ describe FakeBraintree, "VALID_CREDIT_CARDS" do
|
|
96
98
|
3530111333300000
|
97
99
|
)
|
98
100
|
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe FakeBraintree, ".failure_response" do
|
104
|
+
it "can be called with no arguments" do
|
105
|
+
expect { FakeBraintree.failure_response }.not_to raise_error
|
106
|
+
end
|
107
|
+
end
|
99
108
|
|
100
|
-
|
101
|
-
|
109
|
+
describe FakeBraintree, ".generate_transaction" do
|
110
|
+
it "includes the subscription id" do
|
111
|
+
transaction = FakeBraintree.generate_transaction(:subscription_id => 'foobar')
|
112
|
+
transaction['subscription_id'].should == 'foobar'
|
113
|
+
end
|
114
|
+
|
115
|
+
it "allows setting created_at" do
|
116
|
+
time = Time.now
|
117
|
+
transaction = FakeBraintree.generate_transaction(:created_at => time)
|
118
|
+
transaction['created_at'].should == time
|
119
|
+
end
|
120
|
+
|
121
|
+
it "sets created_at to Time.now by default" do
|
122
|
+
Timecop.freeze do
|
123
|
+
transaction = FakeBraintree.generate_transaction
|
124
|
+
transaction['created_at'].should == Time.now
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
it "allows no arguments" do
|
129
|
+
expect { FakeBraintree.generate_transaction }.not_to raise_error
|
130
|
+
end
|
131
|
+
|
132
|
+
context "status_history" do
|
133
|
+
it "returns a hash with a status_history key" do
|
134
|
+
FakeBraintree.generate_transaction(:amount => '20').should have_key('status_history')
|
135
|
+
end
|
136
|
+
|
137
|
+
it "has a timestamp of Time.now" do
|
138
|
+
Timecop.freeze do
|
139
|
+
transaction = FakeBraintree.generate_transaction(:status => Braintree::Transaction::Status::Failed,
|
140
|
+
:subscription_id => 'my_subscription_id')
|
141
|
+
transaction['status_history'][0]['timestamp'].should == Time.now
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
it "has the desired amount" do
|
146
|
+
transaction = FakeBraintree.generate_transaction(:amount => '20.00')
|
147
|
+
transaction['status_history'][0]['amount'].should == '20.00'
|
148
|
+
end
|
149
|
+
|
150
|
+
it "has the desired status" do
|
151
|
+
status = Braintree::Transaction::Status::Failed
|
152
|
+
transaction = FakeBraintree.generate_transaction(:status => status)
|
153
|
+
transaction['status_history'][0]['status'].should == status
|
154
|
+
end
|
102
155
|
end
|
103
156
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,16 +1,31 @@
|
|
1
|
-
|
2
|
-
# in spec/support/ and its subdirectories.
|
3
|
-
require 'rspec'
|
4
|
-
require 'fake_braintree'
|
5
|
-
Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each {|f| require f}
|
1
|
+
require 'spork'
|
6
2
|
|
7
|
-
|
8
|
-
|
3
|
+
Spork.prefork do
|
4
|
+
# Requires supporting ruby files with custom matchers and macros, etc,
|
5
|
+
# in spec/support/ and its subdirectories.
|
6
|
+
require 'rspec'
|
7
|
+
require 'fake_braintree'
|
8
|
+
require 'timecop'
|
9
|
+
Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each {|f| require f}
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
Dir.mkdir('tmp') unless File.directory?('tmp')
|
12
|
+
File.new('tmp/braintree_log', 'w').close
|
12
13
|
|
13
|
-
|
14
|
+
TEST_CC_NUMBER = %w(4111 1111 1111 1111).join
|
14
15
|
|
15
|
-
|
16
|
+
RSpec.configure do |config|
|
17
|
+
config.mock_with :mocha
|
18
|
+
|
19
|
+
config.include BraintreeHelpers
|
20
|
+
config.include CustomerHelpers
|
21
|
+
config.include SubscriptionHelpers
|
22
|
+
|
23
|
+
config.before do
|
24
|
+
FakeBraintree.clear!
|
25
|
+
FakeBraintree.verify_all_cards = false
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
Spork.each_run do
|
16
31
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module BraintreeHelpers
|
2
2
|
def create_braintree_customer(cc_number, expiration_date)
|
3
3
|
Braintree::Customer.create(
|
4
|
-
email
|
5
|
-
credit_card
|
6
|
-
number
|
7
|
-
expiration_date
|
4
|
+
:email => "me@example.com",
|
5
|
+
:credit_card => {
|
6
|
+
:number => cc_number,
|
7
|
+
:expiration_date => expiration_date
|
8
8
|
}
|
9
9
|
).customer
|
10
10
|
end
|
@@ -12,4 +12,8 @@ module BraintreeHelpers
|
|
12
12
|
def braintree_credit_card_token(cc_number, expiration_date)
|
13
13
|
create_braintree_customer(cc_number, expiration_date).credit_cards[0].token
|
14
14
|
end
|
15
|
+
|
16
|
+
def cc_token
|
17
|
+
braintree_credit_card_token(TEST_CC_NUMBER, '04/2016')
|
18
|
+
end
|
15
19
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module CustomerHelpers
|
2
|
+
def create_customer(credit_card_options = {})
|
3
|
+
credit_card_options[:number] ||= TEST_CC_NUMBER
|
4
|
+
credit_card_options[:expiration_date] ||= '04/2016'
|
5
|
+
Braintree::Customer.create(:credit_card => credit_card_options)
|
6
|
+
end
|
7
|
+
|
8
|
+
def create_customer_with_invalid_card(credit_card_options = {})
|
9
|
+
credit_card_options[:number] = '123456'
|
10
|
+
create_customer(credit_card_options)
|
11
|
+
end
|
12
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fake_braintree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-12-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement: &
|
15
|
+
name: capybara
|
16
|
+
requirement: &70247558335960 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70247558335960
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activesupport
|
27
|
-
requirement: &
|
27
|
+
requirement: &70247558333760 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70247558333760
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: i18n
|
38
|
-
requirement: &
|
38
|
+
requirement: &70247558345380 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70247558345380
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: sinatra
|
49
|
-
requirement: &
|
49
|
+
requirement: &70247558343320 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70247558343320
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: braintree
|
60
|
-
requirement: &
|
60
|
+
requirement: &70247558341980 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,21 @@ dependencies:
|
|
65
65
|
version: '2.5'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70247558341980
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mongrel
|
71
|
+
requirement: &70247562466060 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 1.2.0.pre
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *70247562466060
|
69
80
|
- !ruby/object:Gem::Dependency
|
70
81
|
name: rspec
|
71
|
-
requirement: &
|
82
|
+
requirement: &70247562473440 !ruby/object:Gem::Requirement
|
72
83
|
none: false
|
73
84
|
requirements:
|
74
85
|
- - ~>
|
@@ -76,10 +87,10 @@ dependencies:
|
|
76
87
|
version: 2.6.0
|
77
88
|
type: :development
|
78
89
|
prerelease: false
|
79
|
-
version_requirements: *
|
90
|
+
version_requirements: *70247562473440
|
80
91
|
- !ruby/object:Gem::Dependency
|
81
92
|
name: mocha
|
82
|
-
requirement: &
|
93
|
+
requirement: &70247562468440 !ruby/object:Gem::Requirement
|
83
94
|
none: false
|
84
95
|
requirements:
|
85
96
|
- - ~>
|
@@ -87,7 +98,51 @@ dependencies:
|
|
87
98
|
version: 0.9.12
|
88
99
|
type: :development
|
89
100
|
prerelease: false
|
90
|
-
version_requirements: *
|
101
|
+
version_requirements: *70247562468440
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: timecop
|
104
|
+
requirement: &70247562490280 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.3.5
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *70247562490280
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: spork
|
115
|
+
requirement: &70247558422540 !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ~>
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: 0.9.0.rc9
|
121
|
+
type: :development
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: *70247558422540
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: bundler
|
126
|
+
requirement: &70247558426500 !ruby/object:Gem::Requirement
|
127
|
+
none: false
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 1.0.14
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: *70247558426500
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: rake
|
137
|
+
requirement: &70247558440000 !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
143
|
+
type: :development
|
144
|
+
prerelease: false
|
145
|
+
version_requirements: *70247558440000
|
91
146
|
description: A fake Braintree that you can run integration tests against
|
92
147
|
email:
|
93
148
|
- gabe@thoughtbot.com
|
@@ -97,6 +152,7 @@ extensions: []
|
|
97
152
|
extra_rdoc_files: []
|
98
153
|
files:
|
99
154
|
- .gitignore
|
155
|
+
- .travis.yml
|
100
156
|
- Changelog.md
|
101
157
|
- Gemfile
|
102
158
|
- README.md
|
@@ -105,6 +161,7 @@ files:
|
|
105
161
|
- lib/fake_braintree.rb
|
106
162
|
- lib/fake_braintree/customer.rb
|
107
163
|
- lib/fake_braintree/helpers.rb
|
164
|
+
- lib/fake_braintree/redirect.rb
|
108
165
|
- lib/fake_braintree/sinatra_app.rb
|
109
166
|
- lib/fake_braintree/subscription.rb
|
110
167
|
- lib/fake_braintree/valid_credit_cards.rb
|
@@ -112,9 +169,13 @@ files:
|
|
112
169
|
- spec/fake_braintree/credit_card_spec.rb
|
113
170
|
- spec/fake_braintree/customer_spec.rb
|
114
171
|
- spec/fake_braintree/subscription_spec.rb
|
172
|
+
- spec/fake_braintree/transaction_spec.rb
|
173
|
+
- spec/fake_braintree/transparent_redirect_spec.rb
|
115
174
|
- spec/fake_braintree_spec.rb
|
116
175
|
- spec/spec_helper.rb
|
117
176
|
- spec/support/braintree_helpers.rb
|
177
|
+
- spec/support/customer_helpers.rb
|
178
|
+
- spec/support/subscription_helpers.rb
|
118
179
|
homepage: ''
|
119
180
|
licenses: []
|
120
181
|
post_install_message:
|
@@ -127,15 +188,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
127
188
|
- - ! '>='
|
128
189
|
- !ruby/object:Gem::Version
|
129
190
|
version: '0'
|
191
|
+
segments:
|
192
|
+
- 0
|
193
|
+
hash: -527011835497576816
|
130
194
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
195
|
none: false
|
132
196
|
requirements:
|
133
197
|
- - ! '>='
|
134
198
|
- !ruby/object:Gem::Version
|
135
199
|
version: '0'
|
200
|
+
segments:
|
201
|
+
- 0
|
202
|
+
hash: -527011835497576816
|
136
203
|
requirements: []
|
137
204
|
rubyforge_project:
|
138
|
-
rubygems_version: 1.8.
|
205
|
+
rubygems_version: 1.8.11
|
139
206
|
signing_key:
|
140
207
|
specification_version: 3
|
141
208
|
summary: A fake Braintree that you can run integration tests against
|
@@ -143,6 +210,10 @@ test_files:
|
|
143
210
|
- spec/fake_braintree/credit_card_spec.rb
|
144
211
|
- spec/fake_braintree/customer_spec.rb
|
145
212
|
- spec/fake_braintree/subscription_spec.rb
|
213
|
+
- spec/fake_braintree/transaction_spec.rb
|
214
|
+
- spec/fake_braintree/transparent_redirect_spec.rb
|
146
215
|
- spec/fake_braintree_spec.rb
|
147
216
|
- spec/spec_helper.rb
|
148
217
|
- spec/support/braintree_helpers.rb
|
218
|
+
- spec/support/customer_helpers.rb
|
219
|
+
- spec/support/subscription_helpers.rb
|