fake_braintree 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Changelog.md CHANGED
@@ -1,8 +1,21 @@
1
+ # 0.1.0 (not yet released)
2
+ * FakeBraintree.{customers, transactions, failures, subscriptions, redirects}
3
+ are now accessed via FakeBraintree.registry. For example,
4
+ FakeBraintree.customers is now FakeBraintree.registry.customers
5
+ * FakeBraintree.credit_card_from_token is now FakeBraintree.registry.credit_card_from_token
6
+ * The server code (it intercepts calls to Braintree) now lives in FakeBraintree::Server
7
+ * Braintree::Customer.create will use the provided customer ID instead of
8
+ overwriting it (#15).
9
+ * Braintree::Subscription.cancel now works
10
+
1
11
  # 0.0.6
2
12
  * Flesh out the README
3
13
  * Add support for transparent redirect
4
14
  * Add basic support for adding add-ons
5
15
  * Add basic support for adding discounts
16
+ * Add support for Braintree::Customer.update
17
+ * Add support for Braintree::Customer.delete
18
+ * Add support for Braintree::Subscription.delete
6
19
  * Lots of internal refactorings
7
20
 
8
21
  # 0.0.5
data/README.md CHANGED
@@ -20,6 +20,7 @@ Currently in alpha (i.e. it does not support every Braintree call).
20
20
  * `Braintree::Subscription.find`
21
21
  * `Braintree::Subscription.create`
22
22
  * `Braintree::Subscription.update`
23
+ * `Braintree::Subscription.cancel`
23
24
 
24
25
  ### CreditCard
25
26
  * `Braintree::CreditCard.find`
@@ -60,6 +61,30 @@ If you're using Cucumber, add this too:
60
61
  FakeBraintree.clear!
61
62
  end
62
63
 
64
+ ## Spork
65
+
66
+ To use fake\_braintree with Spork, do this:
67
+
68
+ # Gemfile
69
+ group :test do
70
+ gem 'fake_braintree', :require => false
71
+ end
72
+
73
+ # spec/spec_helper.rb
74
+ Spork.each_run do
75
+ require 'fake_braintree'
76
+ # ...other FakeBraintree configuration, for example:
77
+ # FakeBraintree.verify_all_cards!
78
+ end
79
+
80
+ # features/support/env.rb
81
+ Spork.each_run do
82
+ require 'fake_braintree'
83
+ # ...other FakeBraintree configuration, for example:
84
+ # FakeBraintree.verify_all_cards!
85
+ end
86
+
87
+
63
88
  ## Verifying credit cards
64
89
 
65
90
  To verify every credit card you try to use, call:
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.add_dependency 'mongrel', '~> 1.2.0.pre'
25
25
 
26
26
  s.add_development_dependency 'rspec', '~> 2.6.0'
27
- s.add_development_dependency 'mocha', '~> 0.9.12'
27
+ s.add_development_dependency 'bourne', '~> 1.0'
28
28
  s.add_development_dependency 'timecop', '~> 0.3.5'
29
29
  s.add_development_dependency 'spork', '~> 0.9.0.rc9'
30
30
  s.add_development_dependency 'bundler', '>= 1.0.14'
@@ -1,35 +1,28 @@
1
1
  require 'fileutils'
2
2
  require 'braintree'
3
- require 'capybara'
4
- require 'capybara/server'
5
- require 'rack/handler/mongrel'
3
+ require 'active_support/core_ext/module/attribute_accessors'
6
4
 
7
5
  require 'fake_braintree/helpers'
8
6
  require 'fake_braintree/customer'
9
7
  require 'fake_braintree/subscription'
10
8
  require 'fake_braintree/redirect'
11
9
 
10
+ require 'fake_braintree/registry'
11
+ require 'fake_braintree/server'
12
12
  require 'fake_braintree/sinatra_app'
13
13
  require 'fake_braintree/valid_credit_cards'
14
14
  require 'fake_braintree/version'
15
15
 
16
16
  module FakeBraintree
17
- class << self
18
- @customers = {}
19
- @subscriptions = {}
20
- @failures = {}
21
- @transactions = {}
22
- @redirects = {}
23
-
24
- @decline_all_cards = false
25
- @verify_all_cards = false
26
- attr_accessor :customers, :subscriptions, :failures, :transactions, :decline_all_cards, :verify_all_cards, :redirects
27
- end
17
+ mattr_accessor :registry, :verify_all_cards, :decline_all_cards
28
18
 
29
19
  def self.activate!
20
+ self.registry = Registry.new
21
+ self.verify_all_cards = false
22
+
30
23
  set_configuration
31
24
  clear!
32
- boot_server
25
+ Server.new.boot
33
26
  end
34
27
 
35
28
  def self.log_file_path
@@ -37,11 +30,7 @@ module FakeBraintree
37
30
  end
38
31
 
39
32
  def self.clear!
40
- self.customers = {}
41
- self.subscriptions = {}
42
- self.failures = {}
43
- self.transactions = {}
44
- self.redirects = {}
33
+ self.registry.clear!
45
34
  self.decline_all_cards = false
46
35
  clear_log!
47
36
  end
@@ -52,11 +41,11 @@ module FakeBraintree
52
41
  end
53
42
 
54
43
  def self.failure?(card_number)
55
- self.failures.include?(card_number)
44
+ registry.failure?(card_number)
56
45
  end
57
46
 
58
47
  def self.failure_response(card_number = nil)
59
- failure = self.failures[card_number] || {}
48
+ failure = registry.failures[card_number] || {}
60
49
  failure["errors"] ||= { "errors" => [] }
61
50
 
62
51
  { "message" => failure["message"],
@@ -83,22 +72,13 @@ module FakeBraintree
83
72
  end
84
73
 
85
74
  def self.decline_all_cards?
86
- self.decline_all_cards
75
+ decline_all_cards
87
76
  end
88
77
 
89
78
  def self.verify_all_cards!
90
79
  self.verify_all_cards = true
91
80
  end
92
81
 
93
- def self.credit_card_from_token(token)
94
- self.customers.values.detect do |customer|
95
- next unless customer.key?("credit_cards")
96
-
97
- card = customer["credit_cards"].detect {|card| card["token"] == token }
98
- return card if card
99
- end
100
- end
101
-
102
82
  def self.generate_transaction(options = {})
103
83
  history_item = { 'timestamp' => Time.now,
104
84
  'amount' => options[:amount],
@@ -118,23 +98,6 @@ module FakeBraintree
118
98
  Braintree::Configuration.private_key = "xxx"
119
99
  end
120
100
 
121
- def self.boot_server
122
- with_mongrel_runner do
123
- server = Capybara::Server.new(FakeBraintree::SinatraApp)
124
- server.boot
125
- ENV['GATEWAY_PORT'] = server.port.to_s
126
- end
127
- end
128
-
129
- def self.with_mongrel_runner
130
- default_server_process = Capybara.server
131
- Capybara.server do |app, port|
132
- Rack::Handler::Mongrel.run(app, :Port => port)
133
- end
134
- yield
135
- ensure
136
- Capybara.server(&default_server_process)
137
- end
138
101
  end
139
102
 
140
103
  FakeBraintree.activate!
@@ -3,8 +3,10 @@ module FakeBraintree
3
3
  include Helpers
4
4
 
5
5
  def initialize(customer_hash, options)
6
- @customer_hash = customer_hash.merge("merchant_id" => options[:merchant_id],
7
- "id" => options[:id])
6
+ @customer_hash = {
7
+ "id" => options[:id],
8
+ "merchant_id" => options[:merchant_id]
9
+ }.merge(customer_hash)
8
10
  end
9
11
 
10
12
  def create
@@ -12,7 +14,7 @@ module FakeBraintree
12
14
  failure_response
13
15
  else
14
16
  hash = customer_hash
15
- FakeBraintree.customers[hash["id"]] = hash
17
+ FakeBraintree.registry.customers[hash["id"]] = hash
16
18
  gzipped_response(201, hash.to_xml(:root => 'customer'))
17
19
  end
18
20
  end
@@ -27,7 +29,7 @@ module FakeBraintree
27
29
  end
28
30
 
29
31
  def delete
30
- FakeBraintree.customers[existing_customer_id] = nil
32
+ FakeBraintree.registry.customers[existing_customer_id] = nil
31
33
  gzipped_response(200, '')
32
34
  end
33
35
 
@@ -63,7 +65,7 @@ module FakeBraintree
63
65
  end
64
66
 
65
67
  def existing_customer_hash
66
- existing_customer_id && FakeBraintree.customers[existing_customer_id]
68
+ existing_customer_id && FakeBraintree.registry.customers[existing_customer_id]
67
69
  end
68
70
 
69
71
  def update_existing_customer!
@@ -0,0 +1,28 @@
1
+ class FakeBraintree::Registry
2
+ def initialize
3
+ clear!
4
+ end
5
+
6
+ attr_accessor :customers, :subscriptions, :failures, :transactions, :redirects
7
+
8
+ def clear!
9
+ @customers = {}
10
+ @subscriptions = {}
11
+ @failures = {}
12
+ @transactions = {}
13
+ @redirects = {}
14
+ end
15
+
16
+ def failure?(card_number)
17
+ @failures.keys.include?(card_number)
18
+ end
19
+
20
+ def credit_card_from_token(token)
21
+ @customers.values.detect do |customer|
22
+ next unless customer.key?("credit_cards")
23
+
24
+ card = customer["credit_cards"].detect {|card| card["token"] == token }
25
+ return card if card
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,25 @@
1
+ require 'capybara'
2
+ require 'capybara/server'
3
+ require 'rack/handler/mongrel'
4
+
5
+ class FakeBraintree::Server
6
+ def boot
7
+ with_mongrel_runner do
8
+ server = Capybara::Server.new(FakeBraintree::SinatraApp)
9
+ server.boot
10
+ ENV['GATEWAY_PORT'] = server.port.to_s
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def with_mongrel_runner
17
+ default_server_process = Capybara.server
18
+ Capybara.server do |app, port|
19
+ Rack::Handler::Mongrel.run(app, :Port => port)
20
+ end
21
+ yield
22
+ ensure
23
+ Capybara.server(&default_server_process)
24
+ end
25
+ end
@@ -18,7 +18,7 @@ module FakeBraintree
18
18
 
19
19
  # Braintree::Customer.find
20
20
  get "/merchants/:merchant_id/customers/:id" do
21
- customer = FakeBraintree.customers[params[:id]]
21
+ customer = FakeBraintree.registry.customers[params[:id]]
22
22
  if customer
23
23
  gzipped_response(200, customer.to_xml(:root => 'customer'))
24
24
  else
@@ -49,7 +49,7 @@ module FakeBraintree
49
49
 
50
50
  # Braintree::Subscription.find
51
51
  get "/merchants/:merchant_id/subscriptions/:id" do
52
- subscription = FakeBraintree.subscriptions[params[:id]]
52
+ subscription = FakeBraintree.registry.subscriptions[params[:id]]
53
53
  if subscription
54
54
  gzipped_response(200, subscription.to_xml(:root => 'subscription'))
55
55
  else
@@ -64,9 +64,17 @@ module FakeBraintree
64
64
  Subscription.new(subscription_hash, options).update
65
65
  end
66
66
 
67
+ # Braintree::Subscription.cancel
68
+ put "/merchants/:merchant_id/subscriptions/:id/cancel" do
69
+ subscription = FakeBraintree.registry.subscriptions[params[:id]]
70
+ updates = {"status" => Braintree::Subscription::Status::Canceled}
71
+ options = {:id => params[:id], :merchant_id => params[:merchant_id]}
72
+ Subscription.new(updates, options).update
73
+ end
74
+
67
75
  # Braintree::CreditCard.find
68
76
  get "/merchants/:merchant_id/payment_methods/:credit_card_token" do
69
- credit_card = FakeBraintree.credit_card_from_token(params[:credit_card_token])
77
+ credit_card = FakeBraintree.registry.credit_card_from_token(params[:credit_card_token])
70
78
  gzipped_response(200, credit_card.to_xml(:root => "credit_card"))
71
79
  end
72
80
 
@@ -79,14 +87,14 @@ module FakeBraintree
79
87
  transaction = Hash.from_xml(request.body)["transaction"]
80
88
  transaction_id = md5("#{params[:merchant_id]}#{Time.now.to_f}")
81
89
  transaction_response = {"id" => transaction_id, "amount" => transaction["amount"]}
82
- FakeBraintree.transactions[transaction_id] = transaction_response
90
+ FakeBraintree.registry.transactions[transaction_id] = transaction_response
83
91
  gzipped_response(200, transaction_response.to_xml(:root => "transaction"))
84
92
  end
85
93
  end
86
94
 
87
95
  # Braintree::Transaction.find
88
96
  get "/merchants/:merchant_id/transactions/:transaction_id" do
89
- transaction = FakeBraintree.transactions[params[:transaction_id]]
97
+ transaction = FakeBraintree.registry.transactions[params[:transaction_id]]
90
98
  if transaction
91
99
  gzipped_response(200, transaction.to_xml(:root => "transaction"))
92
100
  else
@@ -98,7 +106,7 @@ module FakeBraintree
98
106
  post "/merchants/:merchant_id/transparent_redirect_requests" do
99
107
  if params[:tr_data]
100
108
  redirect = Redirect.new(params, params[:merchant_id])
101
- FakeBraintree.redirects[redirect.id] = redirect
109
+ FakeBraintree.registry.redirects[redirect.id] = redirect
102
110
  redirect to(redirect.url), 303
103
111
  else
104
112
  [422, { "Content-Type" => "text/html" }, ["Invalid submission"]]
@@ -107,7 +115,7 @@ module FakeBraintree
107
115
 
108
116
  # Braintree::TransparentRedirect.confirm
109
117
  post "/merchants/:merchant_id/transparent_redirect_requests/:id/confirm" do
110
- redirect = FakeBraintree.redirects[params[:id]]
118
+ redirect = FakeBraintree.registry.redirects[params[:id]]
111
119
  redirect.confirm
112
120
  end
113
121
  end
@@ -9,7 +9,7 @@ module FakeBraintree
9
9
 
10
10
  def create
11
11
  hash = subscription_hash
12
- FakeBraintree.subscriptions[hash["id"]] = hash
12
+ FakeBraintree.registry.subscriptions[hash["id"]] = hash
13
13
  gzipped_response(201, hash.to_xml(:root => 'subscription'))
14
14
  end
15
15
 
@@ -17,6 +17,8 @@ module FakeBraintree
17
17
  if existing_subscription_hash
18
18
  hash = update_existing_subscription!
19
19
  gzipped_response(200, hash.to_xml(:root => 'subscription'))
20
+ else
21
+ gzipped_response(404, {})
20
22
  end
21
23
  end
22
24
 
@@ -29,7 +31,7 @@ module FakeBraintree
29
31
  subscription_hash["plan_id"] = @subscription_hash["plan_id"]
30
32
  subscription_hash["next_billing_date"] = braintree_formatted_date(1.month.from_now)
31
33
  subscription_hash["payment_method_token"] = @subscription_hash["payment_method_token"]
32
- subscription_hash["status"] = Braintree::Subscription::Status::Active
34
+ subscription_hash["status"] ||= Braintree::Subscription::Status::Active
33
35
 
34
36
  subscription_hash
35
37
  end
@@ -37,12 +39,12 @@ module FakeBraintree
37
39
  private
38
40
 
39
41
  def existing_subscription_hash
40
- @subscription_hash['id'] && FakeBraintree.subscriptions[@subscription_hash["id"]]
42
+ @subscription_hash['id'] && FakeBraintree.registry.subscriptions[@subscription_hash["id"]]
41
43
  end
42
44
 
43
45
  def update_existing_subscription!
44
46
  new_hash = existing_subscription_hash.merge(subscription_hash)
45
- FakeBraintree.subscriptions[@subscription_hash['id']] = new_hash
47
+ FakeBraintree.registry.subscriptions[@subscription_hash['id']] = new_hash
46
48
  end
47
49
 
48
50
  def braintree_formatted_date(date)
@@ -1,3 +1,3 @@
1
1
  module FakeBraintree
2
- VERSION = "0.0.6"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -1,25 +1,23 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe FakeBraintree::SinatraApp do
4
- context "Braintree::CreditCard.find" do
5
- it "gets the correct credit card" do
6
- credit_card = Braintree::CreditCard.find(token)
3
+ describe "Braintree::CreditCard.find" do
4
+ it "gets the correct credit card" do
5
+ credit_card = Braintree::CreditCard.find(token)
7
6
 
8
- credit_card.last_4.should == TEST_CC_NUMBER[-4,4]
9
- credit_card.expiration_month.should == month
10
- credit_card.expiration_year.should == year
11
- end
12
-
13
- let(:month) { '04' }
14
- let(:year) { '2016' }
15
- let(:token) { braintree_credit_card_token(TEST_CC_NUMBER, [month, year].join('/')) }
7
+ credit_card.last_4.should == TEST_CC_NUMBER[-4,4]
8
+ credit_card.expiration_month.should == month
9
+ credit_card.expiration_year.should == year
16
10
  end
17
11
 
18
- context "Braintree::CreditCard.sale" do
19
- it "successfully creates a sale" do
20
- result = Braintree::CreditCard.sale(cc_token, :amount => 10.00)
21
- result.should be_success
22
- Braintree::Transaction.find(result.transaction.id).should be
23
- end
12
+ let(:month) { '04' }
13
+ let(:year) { '2016' }
14
+ let(:token) { braintree_credit_card_token(TEST_CC_NUMBER, [month, year].join('/')) }
15
+ end
16
+
17
+ describe "Braintree::CreditCard.sale" do
18
+ it "successfully creates a sale" do
19
+ result = Braintree::CreditCard.sale(cc_token, :amount => 10.00)
20
+ result.should be_success
21
+ Braintree::Transaction.find(result.transaction.id).should be
24
22
  end
25
23
  end
@@ -14,6 +14,12 @@ describe "Braintree::Customer.create" do
14
14
  result.should be_success
15
15
  end
16
16
 
17
+ it "does not overwrite a passed customer id" do
18
+ result = Braintree::Customer.create({ "id" => '123' })
19
+
20
+ result.customer.id.should eq('123')
21
+ end
22
+
17
23
  it "creates a customer using an expiration month and year" do
18
24
  result = Braintree::Customer.create(:credit_card => { :number => TEST_CC_NUMBER,
19
25
  :expiration_month => '04',
@@ -0,0 +1,94 @@
1
+ require 'spec_helper'
2
+
3
+ describe FakeBraintree::Registry do
4
+ it "exposes a customers accessor" do
5
+ registry.customers['abc123'] = "Bob"
6
+ registry.customers['abc123'].should == "Bob"
7
+ end
8
+
9
+ it "exposes a subscriptions accessor" do
10
+ registry.subscriptions['abc123'] = "Bob"
11
+ registry.subscriptions['abc123'].should == "Bob"
12
+ end
13
+
14
+ it "exposes a failures accessor" do
15
+ registry.failures['abc123'] = "Bob"
16
+ registry.failures['abc123'].should == "Bob"
17
+ end
18
+
19
+ it "exposes a transactions accessor" do
20
+ registry.transactions['abc123'] = "Bob"
21
+ registry.transactions['abc123'].should == "Bob"
22
+ end
23
+
24
+ it "exposes a redirects accessor" do
25
+ registry.redirects['abc123'] = "Bob"
26
+ registry.redirects['abc123'].should == "Bob"
27
+ end
28
+
29
+ let(:registry) { subject }
30
+ end
31
+
32
+ describe FakeBraintree::Registry, "#clear!" do
33
+ it "clears stored customers" do
34
+ registry.customers['abc123'] = "Bob"
35
+ registry.clear!
36
+ registry.customers.should be_empty
37
+ end
38
+
39
+ it "clears stored subscriptions" do
40
+ registry.subscriptions['abc123'] = "Bob"
41
+ registry.clear!
42
+ registry.subscriptions.should be_empty
43
+ end
44
+
45
+ it "clears stored failures" do
46
+ registry.failures['abc123'] = "Bob"
47
+ registry.clear!
48
+ registry.failures.should be_empty
49
+ end
50
+
51
+ it "clears stored transactions" do
52
+ registry.transactions['abc123'] = "Bob"
53
+ registry.clear!
54
+ registry.transactions.should be_empty
55
+ end
56
+
57
+ it "clears stored redirects" do
58
+ registry.redirects['abc123'] = "Bob"
59
+ registry.clear!
60
+ registry.redirects.should be_empty
61
+ end
62
+
63
+ let(:registry) { subject }
64
+ end
65
+
66
+ describe FakeBraintree::Registry, "#failure?" do
67
+ it "returns false if the given CC number is not marked as a failure" do
68
+ registry.failure?('not-a-failure').should be_false
69
+ end
70
+
71
+ it "returns true if the given CC number is marked as a failure" do
72
+ registry.failures['abc123'] = 'whatever'
73
+ registry.failure?('abc123').should be_true
74
+ end
75
+
76
+
77
+ let(:registry) { subject }
78
+ end
79
+
80
+ describe FakeBraintree::Registry, ".credit_card_from_token" do
81
+ it "looks up the credit card based on a CC token" do
82
+ number = %w(4111 1111 1111 2222).join
83
+ expiration_date = "04/2016"
84
+ customer = create_braintree_customer(number, expiration_date)
85
+ credit_card = customer.credit_cards.first
86
+
87
+ # registry.customers[customer.id] = customer
88
+
89
+ registry.credit_card_from_token(credit_card.token)["last_4"].should == "2222"
90
+ end
91
+
92
+ # let(:registry) { FakeBraintree::Registry.new }
93
+ let(:registry) { FakeBraintree.registry }
94
+ end
@@ -24,8 +24,8 @@ describe "Braintree::Subscription.create" do
24
24
  first_result.subscription.id.should_not == second_result.subscription.id
25
25
  end
26
26
 
27
- it "stores created subscriptions in FakeBraintree.subscriptions" do
28
- FakeBraintree.subscriptions[create_subscription.subscription.id].should_not be_nil
27
+ it "stores created subscriptions in FakeBraintree.registry.subscriptions" do
28
+ FakeBraintree.registry.subscriptions[create_subscription.subscription.id].should_not be_nil
29
29
  end
30
30
 
31
31
  it "sets the next billing date to a string of 1.month.from_now in UTC" do
@@ -80,3 +80,17 @@ describe "Braintree::Subscription.update" do
80
80
  let(:subscription_id) { subscription.subscription.id }
81
81
  let(:subscription) { create_subscription }
82
82
  end
83
+
84
+ describe "Braintree::Subscription.cancel" do
85
+ it "can cancel a subscription" do
86
+ Braintree::Subscription.cancel(subscription_id).should be_success
87
+ Braintree::Subscription.find(subscription_id).status.should == Braintree::Subscription::Status::Canceled
88
+ end
89
+
90
+ it "can't cancel an unknown subscription" do
91
+ expect { Braintree::Subscription.cancel("totally-bogus-id") }.to raise_error(Braintree::NotFoundError)
92
+ end
93
+
94
+ let(:subscription_id) { subscription.subscription.id }
95
+ let(:subscription) { create_subscription }
96
+ end
@@ -1,25 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe FakeBraintree, ".credit_card_from_token" do
4
- it "looks up the credit card based on a CC token" do
5
- credit_card = FakeBraintree.credit_card_from_token(token)
6
- credit_card["last_4"].should == TEST_CC_NUMBER[-4,4]
7
- credit_card["expiration_year"].should == "2016"
8
- credit_card["expiration_month"].should == "04"
9
-
10
- credit_card = FakeBraintree.credit_card_from_token(token_2)
11
- credit_card["last_4"].should == "2222"
12
- credit_card["expiration_year"].should == "2019"
13
- credit_card["expiration_month"].should == "05"
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) }
21
- end
22
-
23
3
  describe FakeBraintree, ".decline_all_cards!" do
24
4
  before { FakeBraintree.decline_all_cards! }
25
5
 
@@ -46,22 +26,24 @@ end
46
26
  describe Braintree::Configuration do
47
27
  subject { Braintree::Configuration }
48
28
 
49
- it "sets the environment to development" do
29
+ it "is running in the development environment" do
50
30
  subject.environment.should == :development
51
31
  end
52
32
 
53
- it "sets some fake API credentials" do
33
+ it "has some fake API credentials" do
54
34
  subject.merchant_id.should == "xxx"
55
35
  subject.public_key.should == "xxx"
56
36
  subject.private_key.should == "xxx"
57
37
  end
38
+ end
58
39
 
40
+ describe FakeBraintree do
59
41
  it "creates a log file" do
60
42
  File.exist?(FakeBraintree.log_file_path).should == true
61
43
  end
62
44
 
63
45
  it "logs to the correct path" do
64
- subject.logger.info('Logger test')
46
+ Braintree::Configuration.logger.info('Logger test')
65
47
  File.readlines(FakeBraintree.log_file_path).last.should == "Logger test\n"
66
48
  end
67
49
  end
data/spec/spec_helper.rb CHANGED
@@ -6,6 +6,7 @@ Spork.prefork do
6
6
  require 'rspec'
7
7
  require 'fake_braintree'
8
8
  require 'timecop'
9
+ require 'bourne'
9
10
  Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each {|f| require f}
10
11
 
11
12
  Dir.mkdir('tmp') unless File.directory?('tmp')
metadata CHANGED
@@ -1,156 +1,216 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: fake_braintree
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.6
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - thoughtbot, inc.
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2011-12-15 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2012-01-11 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ version_requirements: &id001 !ruby/object:Gem::Requirement
22
+ none: false
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ hash: 3
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ requirement: *id001
31
+ type: :runtime
32
+ prerelease: false
15
33
  name: capybara
16
- requirement: &70247558335960 !ruby/object:Gem::Requirement
34
+ - !ruby/object:Gem::Dependency
35
+ version_requirements: &id002 !ruby/object:Gem::Requirement
17
36
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ hash: 3
41
+ segments:
42
+ - 0
43
+ version: "0"
44
+ requirement: *id002
22
45
  type: :runtime
23
46
  prerelease: false
24
- version_requirements: *70247558335960
25
- - !ruby/object:Gem::Dependency
26
47
  name: activesupport
27
- requirement: &70247558333760 !ruby/object:Gem::Requirement
48
+ - !ruby/object:Gem::Dependency
49
+ version_requirements: &id003 !ruby/object:Gem::Requirement
28
50
  none: false
29
- requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
32
- version: '0'
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ hash: 3
55
+ segments:
56
+ - 0
57
+ version: "0"
58
+ requirement: *id003
33
59
  type: :runtime
34
60
  prerelease: false
35
- version_requirements: *70247558333760
36
- - !ruby/object:Gem::Dependency
37
61
  name: i18n
38
- requirement: &70247558345380 !ruby/object:Gem::Requirement
62
+ - !ruby/object:Gem::Dependency
63
+ version_requirements: &id004 !ruby/object:Gem::Requirement
39
64
  none: false
40
- requirements:
41
- - - ! '>='
42
- - !ruby/object:Gem::Version
43
- version: '0'
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ hash: 3
69
+ segments:
70
+ - 0
71
+ version: "0"
72
+ requirement: *id004
44
73
  type: :runtime
45
74
  prerelease: false
46
- version_requirements: *70247558345380
47
- - !ruby/object:Gem::Dependency
48
75
  name: sinatra
49
- requirement: &70247558343320 !ruby/object:Gem::Requirement
50
- none: false
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- type: :runtime
56
- prerelease: false
57
- version_requirements: *70247558343320
58
- - !ruby/object:Gem::Dependency
59
- name: braintree
60
- requirement: &70247558341980 !ruby/object:Gem::Requirement
76
+ - !ruby/object:Gem::Dependency
77
+ version_requirements: &id005 !ruby/object:Gem::Requirement
61
78
  none: false
62
- requirements:
79
+ requirements:
63
80
  - - ~>
64
- - !ruby/object:Gem::Version
65
- version: '2.5'
81
+ - !ruby/object:Gem::Version
82
+ hash: 9
83
+ segments:
84
+ - 2
85
+ - 5
86
+ version: "2.5"
87
+ requirement: *id005
66
88
  type: :runtime
67
89
  prerelease: false
68
- version_requirements: *70247558341980
69
- - !ruby/object:Gem::Dependency
70
- name: mongrel
71
- requirement: &70247562466060 !ruby/object:Gem::Requirement
90
+ name: braintree
91
+ - !ruby/object:Gem::Dependency
92
+ version_requirements: &id006 !ruby/object:Gem::Requirement
72
93
  none: false
73
- requirements:
94
+ requirements:
74
95
  - - ~>
75
- - !ruby/object:Gem::Version
96
+ - !ruby/object:Gem::Version
97
+ hash: 961915972
98
+ segments:
99
+ - 1
100
+ - 2
101
+ - 0
102
+ - pre
76
103
  version: 1.2.0.pre
104
+ requirement: *id006
77
105
  type: :runtime
78
106
  prerelease: false
79
- version_requirements: *70247562466060
80
- - !ruby/object:Gem::Dependency
81
- name: rspec
82
- requirement: &70247562473440 !ruby/object:Gem::Requirement
107
+ name: mongrel
108
+ - !ruby/object:Gem::Dependency
109
+ version_requirements: &id007 !ruby/object:Gem::Requirement
83
110
  none: false
84
- requirements:
111
+ requirements:
85
112
  - - ~>
86
- - !ruby/object:Gem::Version
113
+ - !ruby/object:Gem::Version
114
+ hash: 23
115
+ segments:
116
+ - 2
117
+ - 6
118
+ - 0
87
119
  version: 2.6.0
120
+ requirement: *id007
88
121
  type: :development
89
122
  prerelease: false
90
- version_requirements: *70247562473440
91
- - !ruby/object:Gem::Dependency
92
- name: mocha
93
- requirement: &70247562468440 !ruby/object:Gem::Requirement
123
+ name: rspec
124
+ - !ruby/object:Gem::Dependency
125
+ version_requirements: &id008 !ruby/object:Gem::Requirement
94
126
  none: false
95
- requirements:
127
+ requirements:
96
128
  - - ~>
97
- - !ruby/object:Gem::Version
98
- version: 0.9.12
129
+ - !ruby/object:Gem::Version
130
+ hash: 15
131
+ segments:
132
+ - 1
133
+ - 0
134
+ version: "1.0"
135
+ requirement: *id008
99
136
  type: :development
100
137
  prerelease: false
101
- version_requirements: *70247562468440
102
- - !ruby/object:Gem::Dependency
103
- name: timecop
104
- requirement: &70247562490280 !ruby/object:Gem::Requirement
138
+ name: bourne
139
+ - !ruby/object:Gem::Dependency
140
+ version_requirements: &id009 !ruby/object:Gem::Requirement
105
141
  none: false
106
- requirements:
142
+ requirements:
107
143
  - - ~>
108
- - !ruby/object:Gem::Version
144
+ - !ruby/object:Gem::Version
145
+ hash: 25
146
+ segments:
147
+ - 0
148
+ - 3
149
+ - 5
109
150
  version: 0.3.5
151
+ requirement: *id009
110
152
  type: :development
111
153
  prerelease: false
112
- version_requirements: *70247562490280
113
- - !ruby/object:Gem::Dependency
114
- name: spork
115
- requirement: &70247558422540 !ruby/object:Gem::Requirement
154
+ name: timecop
155
+ - !ruby/object:Gem::Dependency
156
+ version_requirements: &id010 !ruby/object:Gem::Requirement
116
157
  none: false
117
- requirements:
158
+ requirements:
118
159
  - - ~>
119
- - !ruby/object:Gem::Version
160
+ - !ruby/object:Gem::Version
161
+ hash: 15424151
162
+ segments:
163
+ - 0
164
+ - 9
165
+ - 0
166
+ - rc
167
+ - 9
120
168
  version: 0.9.0.rc9
169
+ requirement: *id010
121
170
  type: :development
122
171
  prerelease: false
123
- version_requirements: *70247558422540
124
- - !ruby/object:Gem::Dependency
125
- name: bundler
126
- requirement: &70247558426500 !ruby/object:Gem::Requirement
172
+ name: spork
173
+ - !ruby/object:Gem::Dependency
174
+ version_requirements: &id011 !ruby/object:Gem::Requirement
127
175
  none: false
128
- requirements:
129
- - - ! '>='
130
- - !ruby/object:Gem::Version
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ hash: 11
180
+ segments:
181
+ - 1
182
+ - 0
183
+ - 14
131
184
  version: 1.0.14
185
+ requirement: *id011
132
186
  type: :development
133
187
  prerelease: false
134
- version_requirements: *70247558426500
135
- - !ruby/object:Gem::Dependency
136
- name: rake
137
- requirement: &70247558440000 !ruby/object:Gem::Requirement
188
+ name: bundler
189
+ - !ruby/object:Gem::Dependency
190
+ version_requirements: &id012 !ruby/object:Gem::Requirement
138
191
  none: false
139
- requirements:
140
- - - ! '>='
141
- - !ruby/object:Gem::Version
142
- version: '0'
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ hash: 3
196
+ segments:
197
+ - 0
198
+ version: "0"
199
+ requirement: *id012
143
200
  type: :development
144
201
  prerelease: false
145
- version_requirements: *70247558440000
202
+ name: rake
146
203
  description: A fake Braintree that you can run integration tests against
147
- email:
204
+ email:
148
205
  - gabe@thoughtbot.com
149
206
  - ben@thoughtbot.com
150
207
  executables: []
208
+
151
209
  extensions: []
210
+
152
211
  extra_rdoc_files: []
153
- files:
212
+
213
+ files:
154
214
  - .gitignore
155
215
  - .travis.yml
156
216
  - Changelog.md
@@ -162,12 +222,15 @@ files:
162
222
  - lib/fake_braintree/customer.rb
163
223
  - lib/fake_braintree/helpers.rb
164
224
  - lib/fake_braintree/redirect.rb
225
+ - lib/fake_braintree/registry.rb
226
+ - lib/fake_braintree/server.rb
165
227
  - lib/fake_braintree/sinatra_app.rb
166
228
  - lib/fake_braintree/subscription.rb
167
229
  - lib/fake_braintree/valid_credit_cards.rb
168
230
  - lib/fake_braintree/version.rb
169
231
  - spec/fake_braintree/credit_card_spec.rb
170
232
  - spec/fake_braintree/customer_spec.rb
233
+ - spec/fake_braintree/registry_spec.rb
171
234
  - spec/fake_braintree/subscription_spec.rb
172
235
  - spec/fake_braintree/transaction_spec.rb
173
236
  - spec/fake_braintree/transparent_redirect_spec.rb
@@ -176,39 +239,43 @@ files:
176
239
  - spec/support/braintree_helpers.rb
177
240
  - spec/support/customer_helpers.rb
178
241
  - spec/support/subscription_helpers.rb
179
- homepage: ''
242
+ homepage: ""
180
243
  licenses: []
244
+
181
245
  post_install_message:
182
246
  rdoc_options: []
183
- require_paths:
247
+
248
+ require_paths:
184
249
  - lib
185
- required_ruby_version: !ruby/object:Gem::Requirement
250
+ required_ruby_version: !ruby/object:Gem::Requirement
186
251
  none: false
187
- requirements:
188
- - - ! '>='
189
- - !ruby/object:Gem::Version
190
- version: '0'
191
- segments:
252
+ requirements:
253
+ - - ">="
254
+ - !ruby/object:Gem::Version
255
+ hash: 3
256
+ segments:
192
257
  - 0
193
- hash: -527011835497576816
194
- required_rubygems_version: !ruby/object:Gem::Requirement
258
+ version: "0"
259
+ required_rubygems_version: !ruby/object:Gem::Requirement
195
260
  none: false
196
- requirements:
197
- - - ! '>='
198
- - !ruby/object:Gem::Version
199
- version: '0'
200
- segments:
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ hash: 3
265
+ segments:
201
266
  - 0
202
- hash: -527011835497576816
267
+ version: "0"
203
268
  requirements: []
269
+
204
270
  rubyforge_project:
205
271
  rubygems_version: 1.8.11
206
272
  signing_key:
207
273
  specification_version: 3
208
274
  summary: A fake Braintree that you can run integration tests against
209
- test_files:
275
+ test_files:
210
276
  - spec/fake_braintree/credit_card_spec.rb
211
277
  - spec/fake_braintree/customer_spec.rb
278
+ - spec/fake_braintree/registry_spec.rb
212
279
  - spec/fake_braintree/subscription_spec.rb
213
280
  - spec/fake_braintree/transaction_spec.rb
214
281
  - spec/fake_braintree/transparent_redirect_spec.rb