spree_affirm 0.2.19 → 0.2.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +15 -0
  3. data/Gemfile +19 -0
  4. data/LICENSE +26 -0
  5. data/README.md +47 -0
  6. data/Rakefile +15 -0
  7. data/Versionfile +5 -0
  8. data/app/assets/javascripts/spree/backend/spree_affirm.js +3 -0
  9. data/app/assets/javascripts/spree/frontend/spree_affirm.js +2 -0
  10. data/app/assets/stylesheets/spree/backend/spree_affirm.css +4 -0
  11. data/app/assets/stylesheets/spree/frontend/spree_affirm.css +4 -0
  12. data/app/controllers/spree/affirm_controller.rb +127 -0
  13. data/app/models/affirm/address_validator.rb +25 -0
  14. data/app/models/spree/affirm_checkout.rb +147 -0
  15. data/app/models/spree/gateway/affirm.rb +58 -0
  16. data/app/views/spree/admin/log_entries/_affirm.html.erb +4 -0
  17. data/app/views/spree/admin/log_entries/index.html.erb +28 -0
  18. data/app/views/spree/admin/payments/source_forms/_affirm.html.erb +19 -0
  19. data/app/views/spree/admin/payments/source_views/_affirm.html.erb +12 -0
  20. data/app/views/spree/checkout/affirm/_learn_more.html.erb +0 -0
  21. data/app/views/spree/checkout/payment/_affirm.html.erb +190 -0
  22. data/bin/rails +7 -0
  23. data/config/locales/en.yml +31 -0
  24. data/config/routes.rb +5 -0
  25. data/db/migrate/20140514194315_create_affirm_checkout.rb +10 -0
  26. data/lib/active_merchant/billing/affirm.rb +161 -0
  27. data/lib/generators/spree_affirm/install/install_generator.rb +21 -0
  28. data/lib/spree_affirm.rb +2 -0
  29. data/lib/spree_affirm/engine.rb +27 -0
  30. data/lib/spree_affirm/factories.rb +5 -0
  31. data/lib/spree_affirm/factories/affirm_checkout_factory.rb +219 -0
  32. data/lib/spree_affirm/factories/affirm_payment_method_factory.rb +8 -0
  33. data/lib/spree_affirm/factories/payment_factory.rb +10 -0
  34. data/lib/spree_affirm/version.rb +3 -0
  35. data/spec/controllers/affirm_controller_spec.rb +138 -0
  36. data/spec/lib/active_merchant/billing/affirm_spec.rb +294 -0
  37. data/spec/models/affirm_address_validator_spec.rb +13 -0
  38. data/spec/models/spree_affirm_checkout_spec.rb +349 -0
  39. data/spec/models/spree_gateway_affirm_spec.rb +137 -0
  40. data/spec/spec_helper.rb +98 -0
  41. data/spree_affirm.gemspec +30 -0
  42. metadata +53 -7
@@ -0,0 +1,137 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Gateway::Affirm do
4
+ let(:affirm_payment) { FactoryGirl.create(:affirm_payment) }
5
+ let(:affirm_checkout) { FactoryGirl.create(:affirm_checkout) }
6
+
7
+ describe '#provider_class' do
8
+ it "returns the Affirm ActiveMerchant class" do
9
+ expect(affirm_payment.payment_method.provider_class).to be(ActiveMerchant::Billing::Affirm)
10
+ end
11
+ end
12
+
13
+ describe '#payment_source_class' do
14
+ it "returns the affirm_checkout class" do
15
+ expect(affirm_payment.payment_method.payment_source_class).to be(Spree::AffirmCheckout)
16
+ end
17
+ end
18
+
19
+ describe '#source_required?' do
20
+ it "returns true" do
21
+ expect(affirm_payment.payment_method.source_required?).to be(true)
22
+ end
23
+ end
24
+
25
+ describe '#method_type?' do
26
+ it 'returns "affirm"' do
27
+ expect(affirm_payment.payment_method.method_type).to eq("affirm")
28
+ end
29
+ end
30
+
31
+ describe '#actions?' do
32
+ it "retuns capture, void and credit" do
33
+ expect(affirm_payment.payment_method.actions).to eq(['capture', 'void', 'credit'])
34
+ end
35
+ end
36
+
37
+ describe '#supports?' do
38
+ it "returns true if the source is an AffirmCheckout" do
39
+ expect(affirm_payment.payment_method.supports?(affirm_checkout)).to be(true)
40
+ end
41
+
42
+ it "returns false when the source is not an affirm" do
43
+ expect(affirm_payment.payment_method.supports?(6)).to be(false)
44
+ expect(affirm_payment.payment_method.supports?(affirm_payment)).to be(false)
45
+ expect(affirm_payment.payment_method.supports?(Spree::Order.new)).to be(false)
46
+ end
47
+ end
48
+
49
+
50
+ describe "#cancel" do
51
+ context "when there is no payment with the given charge_ari" do
52
+ it "returns nil" do
53
+ expect(affirm_payment.payment_method.cancel("xxxx-xxxx")).to be(nil)
54
+ end
55
+ end
56
+
57
+ context "when the payment is in a completed state" do
58
+ before(:each) do
59
+ affirm_payment.stub(:completed?).and_return true
60
+ affirm_payment.state = "completed"
61
+ affirm_payment.save
62
+ end
63
+
64
+ context "when credit_allowed amount is > 0" do
65
+ it "calls credit! on the payment with the credit_allowed amount" do
66
+ Spree::Payment.stub_chain(:valid, :where, :first).and_return(affirm_payment)
67
+ affirm_payment.stub(:can_credit?).and_return(true)
68
+ expect(affirm_payment).to receive(:credit!).and_return false
69
+ affirm_payment.payment_method.cancel affirm_payment.response_code
70
+ end
71
+
72
+ it "creates an adjustment for the -credit_allowed amount" do
73
+ Spree::Payment.stub_chain(:valid, :where, :first).and_return(affirm_payment)
74
+ affirm_payment.stub(:can_credit?).and_return(true)
75
+ expect(affirm_payment).to receive(:credit!).and_return false
76
+ _payment_amount = affirm_payment.credit_allowed
77
+ affirm_payment.payment_method.cancel affirm_payment.response_code
78
+
79
+ expect(affirm_payment.order.adjustments.count).to be > 0
80
+ expect(affirm_payment.order.adjustments.last.amount).to eq(-_payment_amount)
81
+ end
82
+ end
83
+
84
+ context "when credit_allowed amount is 0" do
85
+ it "does not credit the payment" do
86
+ Spree::Payment.stub_chain(:valid, :where, :first).and_return(affirm_payment)
87
+ affirm_payment.stub(:can_credit?).and_return(false)
88
+ expect(affirm_payment).not_to receive(:credit!)
89
+ affirm_payment.payment_method.cancel affirm_payment.response_code
90
+ end
91
+ end
92
+ end
93
+
94
+ context "when the payment is in a failed state" do
95
+ before do
96
+ affirm_payment.state = "failed"
97
+ affirm_payment.save
98
+ end
99
+
100
+ it "does nothing" do
101
+ expect(affirm_payment).not_to receive(:credit!)
102
+ expect(affirm_payment).not_to receive(:void_transaction!)
103
+ affirm_payment.payment_method.cancel affirm_payment.response_code
104
+ end
105
+ end
106
+
107
+ context "when the payment is in an invalid state" do
108
+ before do
109
+ affirm_payment.state = "invalid"
110
+ affirm_payment.save
111
+ end
112
+
113
+ it "does nothing" do
114
+ expect(affirm_payment).not_to receive(:credit!)
115
+ expect(affirm_payment).not_to receive(:void_transaction!)
116
+ affirm_payment.payment_method.cancel affirm_payment.response_code
117
+ end
118
+ end
119
+
120
+
121
+ context "when the payment is in a pending state" do
122
+ before do
123
+ affirm_payment.stub(:pending?).and_return true
124
+ affirm_payment.state = "pending"
125
+ affirm_payment.save
126
+ end
127
+
128
+ it "voids the transaction" do
129
+ Spree::Payment.stub_chain(:valid, :where, :first).and_return(affirm_payment)
130
+ expect(affirm_payment).not_to receive(:credit!)
131
+ expect(affirm_payment).to receive(:void_transaction!).and_return false
132
+ affirm_payment.payment_method.cancel affirm_payment.response_code
133
+ end
134
+ end
135
+
136
+ end
137
+ end
@@ -0,0 +1,98 @@
1
+ # Run Coverage report
2
+ require 'simplecov'
3
+ require 'minitest'
4
+ require 'simplecov-rcov'
5
+
6
+ SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
7
+ SimpleCov.start do
8
+ add_filter 'spec'
9
+ add_filter 'lib/spree_affirm/factories'
10
+ add_filter 'bundled'
11
+ add_group 'Controllers', 'app/controllers'
12
+ add_group 'Helpers', 'app/helpers'
13
+ add_group 'Mailers', 'app/mailers'
14
+ add_group 'Models', 'app/models'
15
+ add_group 'Views', 'app/views'
16
+ add_group 'Libraries', 'lib'
17
+ end
18
+
19
+ # Configure Rails Environment
20
+ ENV['RAILS_ENV'] = 'test'
21
+
22
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
23
+
24
+ require 'rspec/rails'
25
+ require 'database_cleaner'
26
+ require 'ffaker'
27
+
28
+ # Requires supporting ruby files with custom matchers and macros, etc,
29
+ # in spec/support/ and its subdirectories.
30
+ Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
31
+
32
+ # Requires factories defined in spree_core
33
+ require 'spree/testing_support/authorization_helpers'
34
+ require 'spree/testing_support/factories'
35
+ require 'spree/testing_support/preferences'
36
+ require 'spree/testing_support/controller_requests'
37
+ require 'spree/testing_support/flash'
38
+ require 'spree/testing_support/url_helpers'
39
+ require 'spree/testing_support/order_walkthrough'
40
+ require 'spree/testing_support/caching'
41
+ require "spree/testing_support/i18n"
42
+
43
+
44
+ # Requires factories defined in lib/spree_affirm/factories.rb
45
+ require 'spree_affirm/factories'
46
+
47
+ RSpec.configure do |config|
48
+ config.include FactoryGirl::Syntax::Methods
49
+
50
+ # == URL Helpers
51
+ #
52
+ # Allows access to Spree's routes in specs:
53
+ #
54
+ # visit spree.admin_path
55
+ # current_path.should eql(spree.products_path)
56
+ config.include Spree::TestingSupport::UrlHelpers
57
+ config.include Spree::TestingSupport::Preferences
58
+ config.include Spree::TestingSupport::ControllerRequests
59
+ config.include Spree::TestingSupport::Flash
60
+
61
+
62
+ # == Mock Framework
63
+ #
64
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
65
+ #
66
+ # config.mock_with :mocha
67
+ # config.mock_with :flexmock
68
+ # config.mock_with :rr
69
+ config.mock_with :rspec
70
+ config.color = true
71
+
72
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
73
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
74
+
75
+ # Capybara javascript drivers require transactional fixtures set to false, and we use DatabaseCleaner
76
+ # to cleanup after each test instead. Without transactional fixtures set to false the records created
77
+ # to setup a test will be unavailable to the browser, which runs under a separate server instance.
78
+ config.use_transactional_fixtures = false
79
+
80
+ # Ensure Suite is set to use transactions for speed.
81
+ config.before :suite do
82
+ DatabaseCleaner.strategy = :transaction
83
+ DatabaseCleaner.clean_with :truncation
84
+ end
85
+
86
+ # Before each spec check if it is a Javascript test and switch between using database transactions or not where necessary.
87
+ config.before :each do
88
+ DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction
89
+ DatabaseCleaner.start
90
+ end
91
+
92
+ # After each spec clean the database.
93
+ config.after :each do
94
+ DatabaseCleaner.clean
95
+ end
96
+
97
+ config.fail_fast = ENV['FAIL_FAST'] || false
98
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: UTF-8
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "spree_affirm/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.platform = Gem::Platform::RUBY
7
+ s.name = 'spree_affirm'
8
+ s.version = SpreeAffirm::VERSION
9
+ s.summary = 'Affirm Spree Payment Gateway'
10
+ s.description = 'Affirm payment Gateway for spree'
11
+ s.required_ruby_version = '>= 1.9.3'
12
+
13
+ s.author = 'Yu Pan'
14
+ s.email = 'yu.pan@affirm.com'
15
+ s.homepage = 'http://www.spreecommerce.com'
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.require_path = 'lib'
20
+ s.requirements << 'none'
21
+
22
+ s.add_dependency 'spree_core', '>= 2.2.0'
23
+
24
+ s.add_development_dependency 'factory_girl', '~> 4.2'
25
+ s.add_development_dependency 'ffaker', '~> 1.16'
26
+ s.add_development_dependency 'rspec-rails', '~> 2.13'
27
+ s.add_development_dependency 'simplecov', '~> 0.9'
28
+ s.add_development_dependency 'simplecov-rcov', '~> 0.2'
29
+ s.add_development_dependency 'sqlite3', '~> 1.3'
30
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_affirm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.19
4
+ version: 0.2.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yu Pan
@@ -14,16 +14,16 @@ dependencies:
14
14
  name: spree_core
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: '2.2'
19
+ version: 2.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
- version: '2.2'
26
+ version: 2.2.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: factory_girl
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -113,7 +113,47 @@ email: yu.pan@affirm.com
113
113
  executables: []
114
114
  extensions: []
115
115
  extra_rdoc_files: []
116
- files: []
116
+ files:
117
+ - .gitignore
118
+ - Gemfile
119
+ - LICENSE
120
+ - README.md
121
+ - Rakefile
122
+ - Versionfile
123
+ - app/assets/javascripts/spree/backend/spree_affirm.js
124
+ - app/assets/javascripts/spree/frontend/spree_affirm.js
125
+ - app/assets/stylesheets/spree/backend/spree_affirm.css
126
+ - app/assets/stylesheets/spree/frontend/spree_affirm.css
127
+ - app/controllers/spree/affirm_controller.rb
128
+ - app/models/affirm/address_validator.rb
129
+ - app/models/spree/affirm_checkout.rb
130
+ - app/models/spree/gateway/affirm.rb
131
+ - app/views/spree/admin/log_entries/_affirm.html.erb
132
+ - app/views/spree/admin/log_entries/index.html.erb
133
+ - app/views/spree/admin/payments/source_forms/_affirm.html.erb
134
+ - app/views/spree/admin/payments/source_views/_affirm.html.erb
135
+ - app/views/spree/checkout/affirm/_learn_more.html.erb
136
+ - app/views/spree/checkout/payment/_affirm.html.erb
137
+ - bin/rails
138
+ - config/locales/en.yml
139
+ - config/routes.rb
140
+ - db/migrate/20140514194315_create_affirm_checkout.rb
141
+ - lib/active_merchant/billing/affirm.rb
142
+ - lib/generators/spree_affirm/install/install_generator.rb
143
+ - lib/spree_affirm.rb
144
+ - lib/spree_affirm/engine.rb
145
+ - lib/spree_affirm/factories.rb
146
+ - lib/spree_affirm/factories/affirm_checkout_factory.rb
147
+ - lib/spree_affirm/factories/affirm_payment_method_factory.rb
148
+ - lib/spree_affirm/factories/payment_factory.rb
149
+ - lib/spree_affirm/version.rb
150
+ - spec/controllers/affirm_controller_spec.rb
151
+ - spec/lib/active_merchant/billing/affirm_spec.rb
152
+ - spec/models/affirm_address_validator_spec.rb
153
+ - spec/models/spree_affirm_checkout_spec.rb
154
+ - spec/models/spree_gateway_affirm_spec.rb
155
+ - spec/spec_helper.rb
156
+ - spree_affirm.gemspec
117
157
  homepage: http://www.spreecommerce.com
118
158
  licenses: []
119
159
  metadata: {}
@@ -138,4 +178,10 @@ rubygems_version: 2.2.2
138
178
  signing_key:
139
179
  specification_version: 4
140
180
  summary: Affirm Spree Payment Gateway
141
- test_files: []
181
+ test_files:
182
+ - spec/controllers/affirm_controller_spec.rb
183
+ - spec/lib/active_merchant/billing/affirm_spec.rb
184
+ - spec/models/affirm_address_validator_spec.rb
185
+ - spec/models/spree_affirm_checkout_spec.rb
186
+ - spec/models/spree_gateway_affirm_spec.rb
187
+ - spec/spec_helper.rb