spree_bitpay 1.0.2 → 2.0.0

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 (56) hide show
  1. checksums.yaml +4 -4
  2. metadata +44 -1243
  3. data/.gitignore +0 -26
  4. data/.rspec +0 -1
  5. data/.travis.yml +0 -18
  6. data/Gemfile +0 -7
  7. data/LICENSE.txt +0 -22
  8. data/README.md +0 -79
  9. data/Rakefile +0 -21
  10. data/app/assets/images/BC_nBG_64px.png +0 -0
  11. data/app/assets/images/bitcoin.png +0 -0
  12. data/app/assets/javascripts/easyModal.js-master/.gitignore +0 -1
  13. data/app/assets/javascripts/easyModal.js-master/README.md +0 -3
  14. data/app/assets/javascripts/easyModal.js-master/bower.json +0 -20
  15. data/app/assets/javascripts/easyModal.js-master/jquery.easyModal.js +0 -161
  16. data/app/assets/javascripts/spree/backend/spree_bitpay.js +0 -3
  17. data/app/assets/javascripts/spree/frontend/spree_bitpay.js +0 -86
  18. data/app/assets/stylesheets/spree/backend/spree_bitpay.css +0 -3
  19. data/app/assets/stylesheets/spree/frontend/spree_bitpay.css +0 -58
  20. data/app/controllers/spree/bitpay_controller.rb +0 -243
  21. data/app/models/order_decorator.rb +0 -17
  22. data/app/models/spree/bitpay_invoice.rb +0 -23
  23. data/app/models/spree/payment_method/bitpay.rb +0 -64
  24. data/app/overrides/spree/payments/_payment/bitpay_payment_params.html.erb.deface +0 -55
  25. data/app/views/spree/admin/payments/source_views/_bitpay.html.erb +0 -23
  26. data/app/views/spree/checkout/payment/_bitpay.html.erb +0 -4
  27. data/bin/rails +0 -7
  28. data/config/locales/en.yml +0 -16
  29. data/config/routes.rb +0 -9
  30. data/db/migrate/20140720052959_create_spree_bitpay_invoices.rb +0 -8
  31. data/db/migrate/20140725200946_add_fields_to_spree_bitpay_invoice.rb +0 -14
  32. data/db/migrate/20140729192827_add_index_to_spree_payments.rb +0 -5
  33. data/lib/generators/spree_bitpay/install/install_generator.rb +0 -32
  34. data/lib/spree_bitpay.rb +0 -3
  35. data/lib/spree_bitpay/engine.rb +0 -28
  36. data/lib/spree_bitpay/factories.rb +0 -6
  37. data/lib/spree_bitpay/version.rb +0 -3
  38. data/script/rails +0 -7
  39. data/spec/factories/bitpay_test_factories.rb +0 -58
  40. data/spec/features/bitpay_plugin_spec.rb +0 -75
  41. data/spec/fixtures/valid_confirmed_callback.json +0 -27
  42. data/spec/fixtures/valid_confirmed_invoice.json +0 -15
  43. data/spec/fixtures/valid_expired_invoice.json +0 -16
  44. data/spec/fixtures/valid_invalid_callback.json +0 -27
  45. data/spec/fixtures/valid_invalid_invoice.json +0 -15
  46. data/spec/fixtures/valid_new_invoice.json +0 -15
  47. data/spec/fixtures/valid_overpaid_callback.json +0 -27
  48. data/spec/fixtures/valid_overpaid_invoice.json +0 -15
  49. data/spec/fixtures/valid_paid_callback.json +0 -27
  50. data/spec/fixtures/valid_paid_invoice.json +0 -15
  51. data/spec/models/spree/order_spec.rb +0 -41
  52. data/spec/models/spree/payment_method/bitpay.rb +0 -26
  53. data/spec/requests/notifications_spec.rb +0 -218
  54. data/spec/spec_helper.rb +0 -131
  55. data/spree_bitpay.gemspec +0 -40
  56. data/testapp.sh +0 -6
@@ -1,27 +0,0 @@
1
- {"id":"123BitPayInvoiceID",
2
- "url":"https://localhost:8088/invoice?id=123BitPayInvoiceID",
3
- "posData":"{\"paymentID\":\"123PAYMENTID\",\"orderID\":\"123ORDERID\"}",
4
- "status":"paid",
5
- "btcPrice":"0.0512",
6
- "price":29.14,
7
- "currency":"USD",
8
- "invoiceTime":1407881291063,
9
- "expirationTime":1407882191063,
10
- "currentTime":1407882058099,
11
- "btcPaid":"0.0512",
12
- "rate":568.69,
13
- "exceptionStatus":"paidOver",
14
- "bitpay":
15
- {"id":"123BitPayInvoiceID",
16
- "url":"https://localhost:8088/invoice?id=123BitPayInvoiceID",
17
- "posData":"{\"paymentID\":\"123PAYMENTID\",\"orderID\":\"123ORDERID\"}",
18
- "status":"confirmed",
19
- "btcPrice":"0.0512",
20
- "price":29.14,
21
- "currency":"USD",
22
- "invoiceTime":1407881291063,
23
- "expirationTime":1407882191063,
24
- "currentTime":1407882058099,
25
- "btcPaid":"0.0512",
26
- "rate":568.69,
27
- "exceptionStatus":"paidOver"}}
@@ -1,15 +0,0 @@
1
- {
2
- "id": "123BitPayInvoiceID",
3
- "url": "https://localhost:8088/invoice?id=123BitPayInvoiceID",
4
- "posData": "{\"paymentID\":\"123PAYMENTID\",\"orderID\":\"123ORDERID\"}",
5
- "status": "paid",
6
- "btcPrice": "0.0720",
7
- "price": 38.58,
8
- "currency": "USD",
9
- "invoiceTime": 1407988706154,
10
- "expirationTime": 1407989606154,
11
- "currentTime": 1407988785613,
12
- "btcPaid": "0.0720",
13
- "rate": 536.19,
14
- "exceptionStatus": "paidOver"
15
- }
@@ -1,27 +0,0 @@
1
- {"id":"123BitPayInvoiceID",
2
- "url":"https://localhost:8088/invoice?id=123BitPayInvoiceID",
3
- "posData":"{\"paymentID\":\"123PAYMENTID\",\"orderID\":\"123ORDERID\"}",
4
- "status":"paid",
5
- "btcPrice":"0.0512",
6
- "price":29.14,
7
- "currency":"USD",
8
- "invoiceTime":1407881291063,
9
- "expirationTime":1407882191063,
10
- "currentTime":1407882058099,
11
- "btcPaid":"0.0512",
12
- "rate":568.69,
13
- "exceptionStatus":false,
14
- "bitpay":
15
- {"id":"123BitPayInvoiceID",
16
- "url":"https://localhost:8088/invoice?id=123BitPayInvoiceID",
17
- "posData":"{\"paymentID\":\"123PAYMENTID\",\"orderID\":\"123ORDERID\"}",
18
- "status":"confirmed",
19
- "btcPrice":"0.0512",
20
- "price":29.14,
21
- "currency":"USD",
22
- "invoiceTime":1407881291063,
23
- "expirationTime":1407882191063,
24
- "currentTime":1407882058099,
25
- "btcPaid":"0.0512",
26
- "rate":568.69,
27
- "exceptionStatus":false}}
@@ -1,15 +0,0 @@
1
- {
2
- "id": "123BitPayInvoiceID",
3
- "url": "https://localhost:8088/invoice?id=123BitPayInvoiceID",
4
- "posData": "{\"paymentID\":\"123PAYMENTID\",\"orderID\":\"123ORDERID\"}",
5
- "status": "paid",
6
- "btcPrice": "0.0720",
7
- "price": 38.58,
8
- "currency": "USD",
9
- "invoiceTime": 1407988706154,
10
- "expirationTime": 1407989606154,
11
- "currentTime": 1407988785613,
12
- "btcPaid": "0.0720",
13
- "rate": 536.19,
14
- "exceptionStatus": false
15
- }
@@ -1,41 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Order do
4
- let!(:processing_payment) { FactoryGirl.create(:abstract_btc_payment, order: subject, state: 'processing') }
5
-
6
- describe "#validate_bitpay_payment" do
7
- it "returns the paymets unchanged if there is only one processing payment, and no checkout payments" do
8
- FactoryGirl.create(:invalid_payment, order: subject)
9
- subject.update!
10
- subject.validate_bitpay_payment
11
- expect(subject.payments.map(&:state)).to eq ['processing', 'invalid']
12
- end
13
-
14
- it "returns a checkout payment if there is a checkout payment and a processing payment" do
15
- checkout_payment = FactoryGirl.create(:abstract_btc_payment, order: subject, state: 'checkout')
16
- subject.update!
17
- subject.validate_bitpay_payment
18
- expect(subject.payments.map(&:state)).to eq ['failed', 'checkout']
19
- end
20
- end
21
-
22
- describe "#get_bitpay_payment" do
23
- before do
24
- FactoryGirl.create(:invalid_payment, order: subject)
25
- end
26
-
27
- it "returns a single processing payment if there is only one processing payment" do
28
- subject.update!
29
- expect(subject.get_bitpay_payment).to eq processing_payment
30
- end
31
-
32
- it 'returns a checkout payment if one exists' do
33
- FactoryGirl.create(:abstract_btc_payment, order: subject, state: 'processing')
34
- checkout_payment = FactoryGirl.create(:abstract_btc_payment, order: subject, state: 'checkout')
35
- subject.update!
36
- expect(subject.get_bitpay_payment).to eq checkout_payment
37
- end
38
- end
39
- end
40
-
41
-
@@ -1,26 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::PaymentMethod::Bitpay do
4
- describe '#scan_the_server' do
5
- subject = FactoryGirl.create(:bitcoin_payment_method)
6
-
7
- context 'when the invoice does not exist' do
8
- it "returns 'invoice not found'" do
9
- expect_any_instance_of(BitPay::Client).to receive(:get).and_return( { "error"=> { "type"=>"notFound", "message"=>"Invoice not found"} } )
10
- expect(subject.scan_the_server("5")).to eq("Invoice not found")
11
- end
12
- end
13
-
14
- context 'when the invoice has expired or paid' do
15
- it "returns 'expired' for expired invoices" do
16
- expect_any_instance_of(BitPay::Client).to receive(:get).and_return(get_fixture("valid_expired_invoice.json"))
17
- expect(subject.scan_the_server("5")).to eq("expired")
18
- end
19
-
20
- it "returns 'paid' for paid invoices" do
21
- expect_any_instance_of(BitPay::Client).to receive(:get).and_return(get_fixture("valid_paid_invoice.json"))
22
- expect(subject.scan_the_server("5")).to eq("paid")
23
- end
24
- end
25
- end
26
- end
@@ -1,218 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "Notifications" do
4
- it "rejects malformed notifications" do
5
-
6
- # Send malformed notification callback
7
- callback_body = "THIS IS OBVIOUSLY NOT VALID JSON"
8
- post bitpay_notification_path, callback_body
9
-
10
- # Expect malformed response code
11
- expect(response).to have_http_status(:unprocessable_entity)
12
- end
13
-
14
- it "Handles 'paid' notification" do
15
-
16
- order = create(:processing_payment_with_confirming_order).order
17
- payment = order.payments.first
18
-
19
- # Validate Starting State
20
- expect(order.state).to eq("confirm")
21
- expect(payment.state).to eq("processing")
22
-
23
- # Send 'paid' notification callback
24
- callback_body = get_fixture("valid_paid_callback.json")
25
- invoice = get_fixture("valid_paid_invoice.json")
26
-
27
- stub_request(:get, "https://bitpay.com/api/invoice/123BitPayInvoiceID").
28
- to_return(:status => 200, :body => invoice.to_json)
29
-
30
- post bitpay_notification_path, callback_body
31
-
32
- expect(WebMock).to have_requested(:get, "https://bitpay.com/api/invoice/123BitPayInvoiceID")
33
-
34
- expect(order.reload.state).to eq("complete")
35
- expect(payment.reload.state).to eq("pending")
36
-
37
- end
38
-
39
- it "Handles 'confirmed' notification" do
40
-
41
- order = create(:pending_payment_with_complete_order).order
42
- payment = order.payments.first
43
-
44
- # Validate Starting State
45
- expect(order.state).to eq("complete")
46
- expect(payment.state).to eq("pending")
47
-
48
- # Send 'paid' notification callback
49
- callback_body = get_fixture("valid_confirmed_callback.json")
50
- invoice = get_fixture("valid_confirmed_invoice.json")
51
-
52
- stub_request(:get, "https://bitpay.com/api/invoice/123BitPayInvoiceID").
53
- to_return(:status => 200, :body => invoice.to_json)
54
-
55
- post bitpay_notification_path, callback_body
56
- expect(WebMock).to have_requested(:get, "https://bitpay.com/api/invoice/123BitPayInvoiceID")
57
-
58
- expect(order.reload.state).to eq("complete")
59
- expect(payment.reload.state).to eq("completed")
60
- end
61
-
62
- it "Handles Overpayment" do
63
- # Should behave identically to exact payment
64
- # Could enhance by adding flag/notification for merchant
65
-
66
- payment = create(:processing_payment_with_confirming_order)
67
- order = payment.order
68
-
69
- # Validate Starting State
70
- expect(order.state).to eq("confirm")
71
- expect(order.payments.first.state).to eq("processing")
72
-
73
- # Send 'paid' notification callback
74
- callback_body = get_fixture("valid_overpaid_callback.json")
75
- invoice = get_fixture("valid_overpaid_invoice.json")
76
-
77
- stub_request(:get, "https://bitpay.com/api/invoice/123BitPayInvoiceID").
78
- to_return(:status => 200, :body => invoice.to_json)
79
-
80
- post bitpay_notification_path, callback_body
81
- expect(WebMock).to have_requested(:get, "https://bitpay.com/api/invoice/123BitPayInvoiceID")
82
-
83
- expect(order.reload.state).to eq("complete")
84
- expect(payment.reload.state).to eq("pending")
85
- end
86
-
87
- it "Handles Expired Invoices that are later accepted" do
88
- # An underpaid invoice will not send notifications - however it might be marked expired/paidPartial if the merchant refreshes status
89
- # In coordination with BitPay support, a merchant can have the invoice marked paid, and it should move from expired to paid properly
90
-
91
- payment = create(:invalid_payment_with_confirming_order)
92
- order = payment.order
93
-
94
- # Validate Starting State
95
- expect(order.state).to eq("confirm")
96
- expect(order.payments.first.state).to eq("invalid")
97
-
98
- invoice = get_fixture("valid_confirmed_invoice.json")
99
-
100
- stub_request(:get, "https://bitpay.com/api/invoice/123BitPayInvoiceID").
101
- to_return(:status => 200, :body => invoice.to_json)
102
-
103
- # Call the "refresh" method
104
- get bitpay_refresh_path, payment: payment.id
105
- expect(WebMock).to have_requested(:get, "https://bitpay.com/api/invoice/123BitPayInvoiceID")
106
-
107
- expect(order.reload.state).to eq("complete")
108
- expect(payment.reload.state).to eq("completed")
109
- end
110
-
111
- it "Handles 'paid' notifications for Payments in 'invalid' state" do
112
- # If a user somehow pays an invoice after the payment has been marked 'invalid', we should still recover the payment
113
-
114
- payment = create(:invalid_payment_with_confirming_order)
115
- order = payment.order
116
-
117
- # Validate Starting State
118
- expect(order.state).to eq("confirm")
119
- expect(order.payments.first.state).to eq("invalid")
120
-
121
-
122
- # Send 'paid' notification callback
123
- callback_body = get_fixture("valid_paid_callback.json")
124
- invoice = get_fixture("valid_paid_invoice.json")
125
-
126
- stub_request(:get, "https://bitpay.com/api/invoice/123BitPayInvoiceID").
127
- to_return(:status => 200, :body => invoice.to_json)
128
-
129
- post bitpay_notification_path, callback_body
130
- expect(WebMock).to have_requested(:get, "https://bitpay.com/api/invoice/123BitPayInvoiceID")
131
-
132
- expect(order.reload.state).to eq("complete")
133
- expect(payment.reload.state).to eq("pending")
134
- end
135
-
136
- it "Handles 'invalid' notification" do
137
- # Should cause payment to move into "failed" state
138
-
139
- order = create(:pending_payment_with_complete_order).order
140
- payment = order.payments.first
141
-
142
- # Validate Starting State
143
- expect(order.state).to eq("complete")
144
- expect(payment.state).to eq("pending")
145
-
146
- # Send 'paid' notification callback
147
- callback_body = get_fixture("valid_invalid_callback.json")
148
- invoice = get_fixture("valid_invalid_invoice.json")
149
-
150
- stub_request(:get, "https://bitpay.com/api/invoice/123BitPayInvoiceID").
151
- to_return(:status => 200, :body => invoice.to_json)
152
-
153
- post bitpay_notification_path, callback_body
154
- expect(WebMock).to have_requested(:get, "https://bitpay.com/api/invoice/123BitPayInvoiceID")
155
-
156
- expect(order.reload.state).to eq("complete")
157
- expect(payment.reload.state).to eq("failed")
158
- end
159
-
160
- it "Handles non-existent orders" do
161
- # Should return "unprocessable" code if no order exists
162
- callback_body = get_fixture("valid_paid_callback.json")
163
- post bitpay_notification_path, callback_body
164
-
165
- # Expect malformed response code
166
- expect(response).to have_http_status(:unprocessable_entity)
167
-
168
- end
169
-
170
- it "Handles false 'paid' notifications" do
171
- # Should not change order
172
- order = create(:processing_payment_with_confirming_order).order
173
- payment = order.payments.first
174
-
175
- # Validate Starting State
176
- expect(order.state).to eq("confirm")
177
- expect(payment.state).to eq("processing")
178
-
179
- # Send 'paid' notification callback, but invoice is in 'new' state
180
- callback_body = get_fixture("valid_paid_callback.json")
181
- invoice = get_fixture("valid_new_invoice.json")
182
-
183
- stub_request(:get, "https://bitpay.com/api/invoice/123BitPayInvoiceID").
184
- to_return(:status => 200, :body => invoice.to_json)
185
-
186
- post bitpay_notification_path, callback_body
187
-
188
- expect(WebMock).to have_requested(:get, "https://bitpay.com/api/invoice/123BitPayInvoiceID")
189
-
190
- expect(order.reload.state).to eq("confirm")
191
- expect(payment.reload.state).to eq("processing")
192
- end
193
-
194
- it "Handles false 'confirmed' notifications" do
195
- # Should not change order
196
- order = create(:processing_payment_with_confirming_order).order
197
- payment = order.payments.first
198
-
199
- # Validate Starting State
200
- expect(order.state).to eq("confirm")
201
- expect(payment.state).to eq("processing")
202
-
203
- # Send 'confirmed' notification callback, but invoice is in 'new' state
204
- callback_body = get_fixture("valid_confirmed_callback.json")
205
- invoice = get_fixture("valid_new_invoice.json")
206
-
207
- stub_request(:get, "https://bitpay.com/api/invoice/123BitPayInvoiceID").
208
- to_return(:status => 200, :body => invoice.to_json)
209
-
210
- post bitpay_notification_path, callback_body
211
-
212
- expect(WebMock).to have_requested(:get, "https://bitpay.com/api/invoice/123BitPayInvoiceID")
213
-
214
- expect(order.reload.state).to eq("confirm")
215
- expect(payment.reload.state).to eq("processing")
216
- end
217
-
218
- end
@@ -1,131 +0,0 @@
1
- # Run Coverage report
2
- require 'simplecov'
3
- SimpleCov.start do
4
- add_filter 'spec/dummy'
5
- add_group 'Controllers', 'app/controllers'
6
- add_group 'Helpers', 'app/helpers'
7
- add_group 'Mailers', 'app/mailers'
8
- add_group 'Models', 'app/models'
9
- add_group 'Views', 'app/views'
10
- add_group 'Libraries', 'lib'
11
- end
12
-
13
- # Configure Rails Environment
14
- ENV['RAILS_ENV'] = 'test'
15
-
16
- require File.expand_path('../dummy/config/environment.rb', __FILE__)
17
-
18
- require 'rspec/rails'
19
- require 'capybara/rspec'
20
- require 'webmock/rspec'
21
- require 'database_cleaner'
22
- require 'ffaker'
23
- require 'pry'
24
-
25
- # Requires supporting ruby files with custom matchers and macros, etc,
26
- # in spec/support/ and its subdirectories.
27
- Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
28
-
29
- # Requires factories and other useful helpers defined in spree_core.
30
- require 'spree/testing_support/authorization_helpers'
31
- require 'spree/testing_support/capybara_ext'
32
- require 'spree/testing_support/controller_requests'
33
- require 'spree/testing_support/factories'
34
- require 'spree/testing_support/url_helpers'
35
-
36
- # Requires factories defined in lib/spree_bitpay/factories.rb
37
- require 'spree_bitpay/factories'
38
-
39
- # Require factories under spec/factories
40
- Dir["#{File.dirname(__FILE__)}/factories/**"].each do |f|
41
- require File.expand_path(f)
42
- end
43
-
44
- # Use Poltergeist driver for compatibility with Travis CI, and tell it to ignore JS errors
45
- require 'capybara/poltergeist'
46
- Capybara.register_driver :poltergeist do |app|
47
- Capybara::Poltergeist::Driver.new(app, :js_errors => false)
48
- end
49
- Capybara.javascript_driver = :poltergeist
50
-
51
- RSpec.configure do |config|
52
-
53
- # Deprecation Stuff
54
- config.expose_current_running_example_as :example
55
- config.infer_spec_type_from_file_location!
56
-
57
- config.include FactoryGirl::Syntax::Methods
58
-
59
- # == URL Helpers
60
- #
61
- # Allows access to Spree's routes in specs:
62
- #
63
- # visit spree.admin_path
64
- # current_path.should eql(spree.products_path)
65
- config.include Spree::TestingSupport::UrlHelpers
66
- config.include Spree::Core::Engine.routes.url_helpers
67
-
68
- # == Mock Framework
69
- #
70
- # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
71
- #
72
- # config.mock_with :mocha
73
- # config.mock_with :flexmock
74
- # config.mock_with :rr
75
- config.mock_with :rspec
76
- config.color = true
77
-
78
- # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
79
- # config.fixture_path = "#{::Rails.root}/spec/fixtures"
80
-
81
- # Capybara javascript drivers require transactional fixtures set to false, and we use DatabaseCleaner
82
- # to cleanup after each test instead. Without transactional fixtures set to false the records created
83
- # to setup a test will be unavailable to the browser, which runs under a separate server instance.
84
- config.use_transactional_fixtures = false
85
-
86
- # Ensure Suite is set to use transactions for speed.
87
- config.before :suite do
88
- DatabaseCleaner.strategy = :transaction
89
- DatabaseCleaner.clean_with :truncation
90
- end
91
-
92
- config.before :each do
93
- # Disable Webmock restrictions for feature tests.
94
- if example.metadata[:type] == :feature
95
- WebMock.allow_net_connect!
96
- else
97
- WebMock.disable_net_connect!
98
- DatabaseCleaner.clean_with :truncation
99
- end
100
-
101
- #DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction
102
- #DatabaseCleaner.start
103
- end
104
-
105
- # # After each spec clean the database.
106
- # config.after :each do
107
- # DatabaseCleaner.clean
108
- # end
109
-
110
-
111
- # In event of errors, open page
112
- # config.after do
113
- # if example.metadata[:type] == :feature and example.exception.present?
114
- # save_and_open_screenshot
115
- # end
116
- # end
117
-
118
- #config.fail_fast = true
119
- config.fail_fast = ENV['FAIL_FAST'] || false
120
- #config.order = "random"
121
- end
122
-
123
- ####
124
- # Helper Methods
125
- ###
126
-
127
- ## Gets the fixture by name
128
- #
129
- def get_fixture(name)
130
- JSON.parse(File.read(File.expand_path("../fixtures/#{name}", __FILE__)))
131
- end