spree_affirm 0.2.3

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.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/Gemfile +19 -0
  4. data/LICENSE +29 -0
  5. data/README.md +51 -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 +68 -0
  13. data/app/models/spree/affirm_checkout.rb +38 -0
  14. data/app/models/spree/gateway/affirm.rb +51 -0
  15. data/app/views/spree/admin/log_entries/_affirm.html.erb +4 -0
  16. data/app/views/spree/admin/log_entries/index.html.erb +28 -0
  17. data/app/views/spree/admin/payments/source_forms/_affirm.html.erb +19 -0
  18. data/app/views/spree/admin/payments/source_views/_affirm.html.erb +12 -0
  19. data/app/views/spree/checkout/payment/_affirm.html.erb +195 -0
  20. data/bin/rails +7 -0
  21. data/config/locales/en.yml +29 -0
  22. data/config/routes.rb +5 -0
  23. data/db/migrate/20140514194315_create_affirm_checkout.rb +10 -0
  24. data/lib/active_merchant/billing/affirm.rb +161 -0
  25. data/lib/generators/spree_affirm/install/install_generator.rb +21 -0
  26. data/lib/spree_affirm/engine.rb +27 -0
  27. data/lib/spree_affirm/factories/affirm_checkout_factory.rb +211 -0
  28. data/lib/spree_affirm/factories/affirm_payment_method_factory.rb +8 -0
  29. data/lib/spree_affirm/factories/payment_factory.rb +10 -0
  30. data/lib/spree_affirm/factories.rb +5 -0
  31. data/lib/spree_affirm/version.rb +3 -0
  32. data/lib/spree_affirm.rb +2 -0
  33. data/spec/controllers/affirm_controller_spec.rb +138 -0
  34. data/spec/lib/active_merchant/billing/affirm_spec.rb +294 -0
  35. data/spec/models/affirm_address_validator_spec.rb +13 -0
  36. data/spec/models/spree_affirm_checkout_spec.rb +328 -0
  37. data/spec/models/spree_gateway_affirm_spec.rb +134 -0
  38. data/spec/spec_helper.rb +98 -0
  39. data/spree_affirm.gemspec +30 -0
  40. metadata +190 -0
@@ -0,0 +1,134 @@
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
+ end
79
+ end
80
+
81
+ context "when credit_allowed amount is 0" do
82
+ it "does not credit the payment" do
83
+ Spree::Payment.stub_chain(:valid, :where, :first).and_return(affirm_payment)
84
+ affirm_payment.stub(:can_credit?).and_return(false)
85
+ expect(affirm_payment).not_to receive(:credit!)
86
+ affirm_payment.payment_method.cancel affirm_payment.response_code
87
+ end
88
+ end
89
+ end
90
+
91
+ context "when the payment is in a failed state" do
92
+ before do
93
+ affirm_payment.state = "failed"
94
+ affirm_payment.save
95
+ end
96
+
97
+ it "does nothing" do
98
+ expect(affirm_payment).not_to receive(:credit!)
99
+ expect(affirm_payment).not_to receive(:void_transaction!)
100
+ affirm_payment.payment_method.cancel affirm_payment.response_code
101
+ end
102
+ end
103
+
104
+ context "when the payment is in an invalid state" do
105
+ before do
106
+ affirm_payment.state = "invalid"
107
+ affirm_payment.save
108
+ end
109
+
110
+ it "does nothing" do
111
+ expect(affirm_payment).not_to receive(:credit!)
112
+ expect(affirm_payment).not_to receive(:void_transaction!)
113
+ affirm_payment.payment_method.cancel affirm_payment.response_code
114
+ end
115
+ end
116
+
117
+
118
+ context "when the payment is in a pending state" do
119
+ before do
120
+ affirm_payment.stub(:pending?).and_return true
121
+ affirm_payment.state = "pending"
122
+ affirm_payment.save
123
+ end
124
+
125
+ it "voids the transaction" do
126
+ Spree::Payment.stub_chain(:valid, :where, :first).and_return(affirm_payment)
127
+ expect(affirm_payment).not_to receive(:credit!)
128
+ expect(affirm_payment).to receive(:void_transaction!).and_return false
129
+ affirm_payment.payment_method.cancel affirm_payment.response_code
130
+ end
131
+ end
132
+
133
+ end
134
+ 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 = 'Affirm'
14
+ s.email = 'mts@affirm.com'
15
+ s.homepage = 'http://www.affirm.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', '>= 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 ADDED
@@ -0,0 +1,190 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spree_affirm
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.3
5
+ platform: ruby
6
+ authors:
7
+ - Affirm
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-04-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: spree_core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.2'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.2.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.2'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.2.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: factory_girl
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '4.2'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '4.2'
47
+ - !ruby/object:Gem::Dependency
48
+ name: ffaker
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.16'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.16'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rspec-rails
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '2.13'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '2.13'
75
+ - !ruby/object:Gem::Dependency
76
+ name: simplecov
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0.9'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '0.9'
89
+ - !ruby/object:Gem::Dependency
90
+ name: simplecov-rcov
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '0.2'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '0.2'
103
+ - !ruby/object:Gem::Dependency
104
+ name: sqlite3
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.3'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '1.3'
117
+ description: Affirm payment Gateway for Spree
118
+ email: mts@affirm.com
119
+ executables: []
120
+ extensions: []
121
+ extra_rdoc_files: []
122
+ files:
123
+ - ".gitignore"
124
+ - Gemfile
125
+ - LICENSE
126
+ - README.md
127
+ - Rakefile
128
+ - Versionfile
129
+ - app/assets/javascripts/spree/backend/spree_affirm.js
130
+ - app/assets/javascripts/spree/frontend/spree_affirm.js
131
+ - app/assets/stylesheets/spree/backend/spree_affirm.css
132
+ - app/assets/stylesheets/spree/frontend/spree_affirm.css
133
+ - app/controllers/spree/affirm_controller.rb
134
+ - app/models/spree/affirm_checkout.rb
135
+ - app/models/spree/gateway/affirm.rb
136
+ - app/views/spree/admin/log_entries/_affirm.html.erb
137
+ - app/views/spree/admin/log_entries/index.html.erb
138
+ - app/views/spree/admin/payments/source_forms/_affirm.html.erb
139
+ - app/views/spree/admin/payments/source_views/_affirm.html.erb
140
+ - app/views/spree/checkout/payment/_affirm.html.erb
141
+ - bin/rails
142
+ - config/locales/en.yml
143
+ - config/routes.rb
144
+ - db/migrate/20140514194315_create_affirm_checkout.rb
145
+ - lib/active_merchant/billing/affirm.rb
146
+ - lib/generators/spree_affirm/install/install_generator.rb
147
+ - lib/spree_affirm.rb
148
+ - lib/spree_affirm/engine.rb
149
+ - lib/spree_affirm/factories.rb
150
+ - lib/spree_affirm/factories/affirm_checkout_factory.rb
151
+ - lib/spree_affirm/factories/affirm_payment_method_factory.rb
152
+ - lib/spree_affirm/factories/payment_factory.rb
153
+ - lib/spree_affirm/version.rb
154
+ - spec/controllers/affirm_controller_spec.rb
155
+ - spec/lib/active_merchant/billing/affirm_spec.rb
156
+ - spec/models/affirm_address_validator_spec.rb
157
+ - spec/models/spree_affirm_checkout_spec.rb
158
+ - spec/models/spree_gateway_affirm_spec.rb
159
+ - spec/spec_helper.rb
160
+ - spree_affirm.gemspec
161
+ homepage: http://www.affirm.com
162
+ licenses: []
163
+ metadata: {}
164
+ post_install_message:
165
+ rdoc_options: []
166
+ require_paths:
167
+ - lib
168
+ required_ruby_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: 1.9.3
173
+ required_rubygems_version: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ requirements:
179
+ - none
180
+ rubygems_version: 3.1.2
181
+ signing_key:
182
+ specification_version: 4
183
+ summary: Affirm Spree Payment Gateway
184
+ test_files:
185
+ - spec/controllers/affirm_controller_spec.rb
186
+ - spec/lib/active_merchant/billing/affirm_spec.rb
187
+ - spec/models/affirm_address_validator_spec.rb
188
+ - spec/models/spree_affirm_checkout_spec.rb
189
+ - spec/models/spree_gateway_affirm_spec.rb
190
+ - spec/spec_helper.rb