workarea-sezzle 1.0.0 → 1.0.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b01482b4ee55ec93d7bc5522231e9ced6c616753b53fa121d3218ad69521a8b7
4
- data.tar.gz: b83998b2ca6869dfe0fa803832a6f518f217f618936034f0858fb378b490ca43
3
+ metadata.gz: 1f64801c67844cdc36f81d900b207460bd0a5fc3a07583ce69d62d5460a3aafa
4
+ data.tar.gz: 93e04f04ad21cbe38e222d3197120fcdcf60dc5fff94e5f575c179955c143246
5
5
  SHA512:
6
- metadata.gz: 34c76b5010f111b4090e9a7bd4c065cd19c3807dcb5def346f452d67979de50dab031cc7ff797dffa9c9ff68edd596d87b23720d5a00a15e8f03653e2b3209db
7
- data.tar.gz: 4948b6c5c1683c9089fa2f57b5184c9868cdf327d1a6d62fc325ab2263ad6678681733297985be4f801e82d0a26b62404fee3cc1f850b67a8263e1843fb47621
6
+ metadata.gz: 9ad298f476db067ae3ae3250c30ea43bb97a9642f5535788b0dd749986eb88b582f3fdbefa7211809114967ea9a37104a2eaea082ea4103e0ae2b37997a7ed78
7
+ data.tar.gz: d14a015cef5f988db405f20085b08be82136c7056311937ee2032909c1f18dd28b7f85ec58104023904f853171d446d2a4d657f7a7d7a3538fd28e35581fe538
data/CHANGELOG.md ADDED
@@ -0,0 +1,57 @@
1
+ Workarea Sezzle 1.0.5 (2021-05-13)
2
+ --------------------------------------------------------------------------------
3
+
4
+ * Ensure return URLs sent to sezzle include locale when not default
5
+
6
+
7
+ Matt Duffy
8
+
9
+ * Prep new release
10
+
11
+
12
+ Jeff Yucis
13
+
14
+ * Verify that that the authorization was successful when completing a sezzle purchase.
15
+
16
+
17
+ Jeff Yucis
18
+
19
+ * SEZZ-5 Add multi-language support
20
+
21
+ Only supports EN and FR, per Sezzle docs.
22
+ Add new helper for getting Rails locale.
23
+ Remove translation templates as they were the defaults anyway.
24
+ Add language to script.
25
+
26
+ James Dobson
27
+
28
+
29
+
30
+ Workarea Sezzle 1.0.4 (2021-03-29)
31
+ --------------------------------------------------------------------------------
32
+
33
+ * Verify that that the authorization was successful when completing a sezzle purchase.
34
+
35
+ Jeff Yucis
36
+
37
+ * SEZZ-5 Add multi-language support
38
+
39
+ Only supports EN and FR, per Sezzle docs.
40
+ Add new helper for getting Rails locale.
41
+ Remove translation templates as they were the defaults anyway.
42
+ Add language to script.
43
+
44
+ James Dobson
45
+
46
+
47
+
48
+ Workarea Sezzle 1.0.3 (2021-01-08)
49
+ --------------------------------------------------------------------------------
50
+
51
+ * SEZZ-4 Change from ID to class select. For package product considerations.
52
+
53
+
54
+ James Dobson
55
+
56
+
57
+
data/Rakefile CHANGED
@@ -32,9 +32,9 @@ require 'workarea/sezzle/version'
32
32
 
33
33
  desc "Release version #{Workarea::Sezzle::VERSION} of the gem"
34
34
  task :release do
35
- # Rake::Task['workarea:changelog'].execute
36
- # system 'git add CHANGELOG.md'
37
- # system 'git commit -m "Update CHANGELOG"'
35
+ Rake::Task['workarea:changelog'].execute
36
+ system 'git add CHANGELOG.md'
37
+ system 'git commit -m "Update CHANGELOG"'
38
38
 
39
39
  system "git tag -a v#{Workarea::Sezzle::VERSION} -m 'Tagging #{Workarea::Sezzle::VERSION}'"
40
40
  system 'git push origin HEAD --follow-tags'
@@ -45,11 +45,16 @@ module Workarea
45
45
 
46
46
  shipping = current_shipping
47
47
 
48
+ # verify that the authorization was successfull
49
+ tender = payment.sezzle
50
+ verifcation_response = gateway.get_order(tender.sezzle_id)
51
+ verfied = verifcation_response.body["authorization"]["approved"] rescue false
52
+
48
53
  Pricing.perform(current_order, shipping)
49
54
  payment.adjust_tender_amounts(current_order.total_price)
50
55
 
51
56
  # place the order.
52
- if current_checkout.place_order
57
+ if verfied && current_checkout.place_order
53
58
  completed_place_order
54
59
  else
55
60
  incomplete_place_order
@@ -0,0 +1,9 @@
1
+ module Workarea
2
+ module Storefront
3
+ module SezzleHelper
4
+ def sezzle_language
5
+ I18n.locale == :fr ? 'fr' : 'en'
6
+ end
7
+ end
8
+ end
9
+ end
@@ -1,7 +1,7 @@
1
1
  module Workarea
2
2
  module Sezzle
3
3
  class OrderBuilder
4
- module ProductUrl
4
+ module Routing
5
5
  include Workarea::I18n::DefaultUrlOptions
6
6
  include Storefront::Engine.routes.url_helpers
7
7
  extend self
@@ -114,14 +114,14 @@ module Workarea
114
114
  end
115
115
 
116
116
  def complete_url
117
- Storefront::Engine.routes.url_helpers.complete_sezzle_url(
117
+ Routing.complete_sezzle_url(
118
118
  host: Workarea.config.host,
119
119
  order_id: order.id
120
120
  )
121
121
  end
122
122
 
123
123
  def cancel_url
124
- Storefront::Engine.routes.url_helpers.cancel_sezzle_url(
124
+ Routing.cancel_sezzle_url(
125
125
  host: Workarea.config.host,
126
126
  order_id: order.id
127
127
  )
@@ -0,0 +1,4 @@
1
+ json.type 'sezzle'
2
+ json.amount tender.amount
3
+ json.sezzle_id tender.sezzle_id
4
+ json.sezzle_payment_intent tender.intent
@@ -1,5 +1,5 @@
1
1
  - if Workarea.config.sezzle_merchant_id.present?
2
- #sezzle.sezzle.sezzle--cart
2
+ .sezzle.sezzle--cart
3
3
  .sezzle__prices
4
4
  %span.sezzle__price
5
5
  = number_to_currency(cart.total_price)
@@ -1,5 +1,5 @@
1
1
  - if Workarea.config.sezzle_merchant_id.present?
2
- #sezzle.sezzle.sezzle--product
2
+ .sezzle.sezzle--product
3
3
  .sezzle__prices
4
4
  - if product.show_sell_range?
5
5
  %span.sezzle__price= number_to_currency(product.sell_min_price)
@@ -11,12 +11,9 @@
11
11
  {
12
12
  targetXPath: "#{Workarea.config.sezzle.cart_config[:target_xpath]}",
13
13
  renderToPath: "#{Workarea.config.sezzle.cart_config[:render_to_path]}",
14
- urlMatch: "#{Workarea.config.sezzle.cart_config[:url_match]}",
15
- altVersionTemplate: {
16
- 'en': '4 interest-free payments of %%price%% with %%logo%% %%info%%',
17
- 'fr': '4 paiements de %%price%% sans intérêts avec %%logo%% %%info%%'
18
- }
14
+ urlMatch: "#{Workarea.config.sezzle.cart_config[:url_match]}"
19
15
  }
20
- ]
16
+ ],
17
+ language: "#{sezzle_language}"
21
18
  }
22
19
  %script{ src: "https://widget.sezzle.com/v1/javascript/price-widget?uuid=#{Workarea.config.sezzle_merchant_id}" }
@@ -7,14 +7,14 @@ Workarea.configure do |config|
7
7
  config.sezzle.open_timeout = 10
8
8
 
9
9
  config.sezzle.product_config = {
10
- target_xpath: '#sezzle/.sezzle__prices',
10
+ target_xpath: '.sezzle/.sezzle__prices',
11
11
  render_to_path: './',
12
12
  url_match: 'products',
13
13
  split_price_elements_on: '–'
14
14
  }
15
15
 
16
16
  config.sezzle.cart_config = {
17
- target_xpath: '#sezzle/.sezzle__prices',
17
+ target_xpath: '.sezzle/.sezzle__prices',
18
18
  render_to_path: './',
19
19
  url_match: 'cart'
20
20
  }
@@ -97,6 +97,11 @@ module Workarea
97
97
  Response.new(response(payment_response_body))
98
98
  end
99
99
 
100
+ def get_order(id, attrs = {})
101
+ return Response.new(response(get_order_response_auth_failure)) if id == 'failure'
102
+ Response.new(response(get_order_response))
103
+ end
104
+
100
105
  private
101
106
 
102
107
  def response(body, status = 200)
@@ -123,6 +128,52 @@ module Workarea
123
128
  "uuid": '6c9db5d4-d09a-4224-860a-b5438ac32ca8'
124
129
  }
125
130
  end
131
+
132
+ def get_order_response
133
+ {
134
+ "authorization": {
135
+ "approved": true,
136
+ "authorization_amount": {
137
+ "amount_in_cents": 10000,
138
+ "currency": "USD"
139
+ },
140
+ "metadata": {
141
+ "location_id": "123",
142
+ "store_manager": "Jane Doe",
143
+ "store_name": "Downtown Minneapolis"
144
+ },
145
+ "order_amount": {
146
+ "amount_in_cents": 10000,
147
+ "currency": "USD"
148
+ },
149
+ "reference_id": "ord_12345",
150
+ "uuid": "12a34bc5-6de7-890f-g123-4hi1238jk902"
151
+ }
152
+ }
153
+ end
154
+
155
+ def get_order_response_auth_failure
156
+ {
157
+ "authorization": {
158
+ "approved": false,
159
+ "authorization_amount": {
160
+ "amount_in_cents": 10000,
161
+ "currency": "USD"
162
+ },
163
+ "metadata": {
164
+ "location_id": "123",
165
+ "store_manager": "Jane Doe",
166
+ "store_name": "Downtown Minneapolis"
167
+ },
168
+ "order_amount": {
169
+ "amount_in_cents": 10000,
170
+ "currency": "USD"
171
+ },
172
+ "reference_id": "ord_12345",
173
+ "uuid": "12a34bc5-6de7-890f-g123-4hi1238jk902"
174
+ }
175
+ }
176
+ end
126
177
  end
127
178
  end
128
179
  end
@@ -5,6 +5,12 @@ module Workarea
5
5
  class Engine < ::Rails::Engine
6
6
  include Workarea::Plugin
7
7
  isolate_namespace Workarea::Sezzle
8
+
9
+ config.to_prepare do
10
+ Workarea::Storefront::ApplicationController.helper(
11
+ Workarea::Storefront::SezzleHelper
12
+ )
13
+ end
8
14
  end
9
15
  end
10
16
  end
@@ -35,6 +35,13 @@ module Workarea
35
35
  Sezzle::Response.new(response)
36
36
  end
37
37
 
38
+ def get_order(id, attrs = {})
39
+ response = connection.get do |req|
40
+ req.url "v2/order/#{id}"
41
+ end
42
+ Sezzle::Response.new(response)
43
+ end
44
+
38
45
  private
39
46
 
40
47
  def connection
@@ -1,5 +1,5 @@
1
1
  module Workarea
2
2
  module Sezzle
3
- VERSION = '1.0.0'.freeze
3
+ VERSION = '1.0.5'.freeze
4
4
  end
5
5
  end
@@ -155,15 +155,15 @@ module Workarea
155
155
  assert_equal('purchase', store_credit_tender.transactions.first.action)
156
156
  end
157
157
 
158
- def test_failed_sezzle_capture
158
+ def test_failed_sezzle_authorize
159
159
  payment = Payment.find(order.id)
160
160
 
161
- payment.set_sezzle(token: 'error_token')
162
-
163
- params = { token: 'error_token', status: 'SUCCESS' }
164
-
165
- get storefront.complete_sezzle_path(params)
161
+ payment.set_sezzle(
162
+ sezzle_id: 'failure',
163
+ sezzle_response: '{}'
164
+ )
166
165
 
166
+ get storefront.complete_sezzle_path(order_id: order.id)
167
167
  payment.reload
168
168
  order.reload
169
169
 
@@ -3,6 +3,22 @@ require 'test_helper'
3
3
  module Workarea
4
4
  module Sezzle
5
5
  class OrderBuilderTest < Workarea::TestCase
6
+ setup :set_i18n
7
+ teardown :reset_i18n
8
+
9
+ def set_i18n
10
+ @_default_locale = ::I18n.config.default_locale
11
+ @_locale = ::I18n.locale
12
+
13
+ ::I18n.config.default_locale = :en
14
+ ::I18n.locale = :en
15
+ end
16
+
17
+ def reset_i18n
18
+ ::I18n.config.default_locale = @_default_locale
19
+ ::I18n.locale = @_locale
20
+ end
21
+
6
22
  def test_build
7
23
  create_order_total_discount
8
24
  order = create_order
@@ -16,8 +32,23 @@ module Workarea
16
32
 
17
33
  order.reload
18
34
  payment.reload
35
+
36
+ ::I18n.locale = :fr
19
37
  order_hash = Workarea::Sezzle::OrderBuilder.new(order).build
20
38
 
39
+ assert_includes(order_hash[:cancel_url][:href], 'locale=fr')
40
+ assert_includes(order_hash[:complete_url][:href], 'locale=fr')
41
+
42
+ assert_nothing_raised { order_hash.to_json }
43
+
44
+ ::I18n.locale = :en
45
+ order_hash = Workarea::Sezzle::OrderBuilder.new(order).build
46
+
47
+ assert_nothing_raised { order_hash.to_json }
48
+
49
+ refute_includes(order_hash[:cancel_url][:href], 'locale=')
50
+ refute_includes(order_hash[:complete_url][:href], 'locale=')
51
+
21
52
  customer = order_hash[:customer]
22
53
  assert_equal(order.email, customer[:email])
23
54
  assert_equal('Bob', customer[:first_name])
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: workarea-sezzle
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Yucis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-01 00:00:00.000000000 Z
11
+ date: 2021-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: workarea
@@ -37,6 +37,7 @@ files:
37
37
  - ".gitignore"
38
38
  - ".rubocop.yml"
39
39
  - ".scss-lint.yml"
40
+ - CHANGELOG.md
40
41
  - Gemfile
41
42
  - LICENSE
42
43
  - README.md
@@ -56,18 +57,20 @@ files:
56
57
  - app/controllers/workarea/storefront/checkout/place_order_controller.decorator
57
58
  - app/controllers/workarea/storefront/sezzle_controller.rb
58
59
  - app/helpers/.keep
60
+ - app/helpers/workarea/storefront/sezzle_helper.rb
59
61
  - app/mailers/.keep
60
62
  - app/models/.keep
63
+ - app/models/workarea/payment.decorator
61
64
  - app/models/workarea/payment/authorize/sezzle.rb
62
65
  - app/models/workarea/payment/capture/sezzle.rb
63
66
  - app/models/workarea/payment/purchase/sezzle.rb
64
67
  - app/models/workarea/payment/refund/sezzle.rb
65
68
  - app/models/workarea/payment/tender/sezzle.rb
66
- - app/models/workarea/paymentl.decorator
67
69
  - app/services/workarea/sezzle/order_builder.rb
68
70
  - app/view_models/workarea/storefront/checkout/payment_view_model.decorator
69
71
  - app/views/.keep
70
72
  - app/views/workarea/admin/orders/tenders/_sezzle.html.haml
73
+ - app/views/workarea/api/storefront/orders/tenders/_sezzle.json.jbuilder
71
74
  - app/views/workarea/storefront/carts/_sezzle_widget.html.haml
72
75
  - app/views/workarea/storefront/checkouts/_sezzle_payment.html.haml
73
76
  - app/views/workarea/storefront/order_mailer/tenders/_sezzle.html.haml