workarea-klarna 1.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.editorconfig +20 -0
- data/.eslintrc.json +36 -0
- data/.github/workflows/ci.yml +61 -0
- data/.gitignore +24 -0
- data/.rubocop.yml +2 -0
- data/.stylelintrc.json +8 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +81 -0
- data/Gemfile +17 -0
- data/LICENSE +52 -0
- data/README.md +79 -0
- data/Rakefile +56 -0
- data/app/assets/javascripts/workarea/storefront/klarna/modules/klarna_widget.js +99 -0
- data/app/controllers/workarea/storefront/checkout/addresses_controller.decorator +8 -0
- data/app/controllers/workarea/storefront/checkout/place_order_controller.decorator +9 -0
- data/app/controllers/workarea/storefront/checkouts_controller.decorator +13 -0
- data/app/models/workarea/checkout/steps/payment.decorator +22 -0
- data/app/models/workarea/order.decorator +7 -0
- data/app/models/workarea/payment.decorator +34 -0
- data/app/models/workarea/payment/authorize/klarna.rb +21 -0
- data/app/models/workarea/payment/capture/klarna.rb +21 -0
- data/app/models/workarea/payment/klarna_session.rb +18 -0
- data/app/models/workarea/payment/purchase/klarna.rb +21 -0
- data/app/models/workarea/payment/refund/klarna.rb +18 -0
- data/app/models/workarea/payment/tender/klarna.rb +53 -0
- data/app/services/workarea/setup_klarna_session.rb +24 -0
- data/app/view_models/workarea/storefront/checkout/payment_view_model.decorator +41 -0
- data/app/views/workarea/admin/orders/tenders/_klarna.html.haml +4 -0
- data/app/views/workarea/storefront/checkouts/_klarna_payments.html.haml +22 -0
- data/app/views/workarea/storefront/klarna/_sdk.html.haml +2 -0
- data/app/views/workarea/storefront/order_mailer/tenders/_klarna.html.haml +2 -0
- data/app/views/workarea/storefront/orders/tenders/_klarna.html.haml +6 -0
- data/bin/rails +20 -0
- data/config/initializers/appends.rb +14 -0
- data/config/initializers/configuration.rb +32 -0
- data/config/initializers/fields.rb +43 -0
- data/config/locales/en.yml +30 -0
- data/config/routes.rb +2 -0
- data/lib/workarea/klarna.rb +30 -0
- data/lib/workarea/klarna/bogus_gateway.rb +19 -0
- data/lib/workarea/klarna/engine.rb +10 -0
- data/lib/workarea/klarna/gateway.rb +92 -0
- data/lib/workarea/klarna/gateway/cancel_request.rb +16 -0
- data/lib/workarea/klarna/gateway/capture_request.rb +24 -0
- data/lib/workarea/klarna/gateway/create_session_request.rb +22 -0
- data/lib/workarea/klarna/gateway/order.rb +249 -0
- data/lib/workarea/klarna/gateway/place_order_request.rb +34 -0
- data/lib/workarea/klarna/gateway/refund_request.rb +24 -0
- data/lib/workarea/klarna/gateway/release_request.rb +16 -0
- data/lib/workarea/klarna/gateway/request.rb +91 -0
- data/lib/workarea/klarna/gateway/response.rb +38 -0
- data/lib/workarea/klarna/gateway/update_session_request.rb +30 -0
- data/lib/workarea/klarna/version.rb +5 -0
- data/package.json +9 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/config/manifest.js +4 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/jobs/application_job.rb +2 -0
- data/test/dummy/app/mailers/application_mailer.rb +4 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +34 -0
- data/test/dummy/bin/update +29 -0
- data/test/dummy/config.ru +5 -0
- data/test/dummy/config/application.rb +24 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/cable.yml +9 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +54 -0
- data/test/dummy/config/environments/production.rb +86 -0
- data/test/dummy/config/environments/test.rb +43 -0
- data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/new_framework_defaults.rb +21 -0
- data/test/dummy/config/initializers/workarea.rb +5 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/puma.rb +47 -0
- data/test/dummy/config/routes.rb +5 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config/spring.rb +6 -0
- data/test/dummy/db/seeds.rb +2 -0
- data/test/dummy/log/.keep +0 -0
- data/test/factories/workarea/klarna.rb +146 -0
- data/test/integration/workarea/storefront/klarna_session_integration_test.rb +40 -0
- data/test/lib/workarea/klarna/gateway/capture_request_test.rb +26 -0
- data/test/lib/workarea/klarna/gateway/create_session_request_test.rb +26 -0
- data/test/lib/workarea/klarna/gateway/order_test.rb +135 -0
- data/test/lib/workarea/klarna/gateway/place_order_request_test.rb +34 -0
- data/test/lib/workarea/klarna/gateway/refund_request_test.rb +26 -0
- data/test/lib/workarea/klarna/gateway/request_test.rb +87 -0
- data/test/lib/workarea/klarna/gateway/response_test.rb +75 -0
- data/test/lib/workarea/klarna/gateway/update_session_request_test.rb +27 -0
- data/test/lib/workarea/klarna/gateway_test.rb +58 -0
- data/test/models/workarea/checkout/steps/klarna_payment_test.rb +79 -0
- data/test/models/workarea/klarna_payment_test.rb +45 -0
- data/test/models/workarea/payment/authorize/klarna_test.rb +34 -0
- data/test/models/workarea/payment/capture/klarna_test.rb +51 -0
- data/test/models/workarea/payment/tender/klarna_test.rb +81 -0
- data/test/services/workarea/setup_klarna_session_test.rb +42 -0
- data/test/teaspoon_env.rb +6 -0
- data/test/test_helper.rb +10 -0
- data/test/vcr_cassettes/klarna_authorize.yml +62 -0
- data/test/vcr_cassettes/klarna_capture.yml +60 -0
- data/test/vcr_cassettes/klarna_create_session.yml +61 -0
- data/test/vcr_cassettes/klarna_refund.yml +60 -0
- data/test/view_models/workarea/storefront/checkout/klarna_payment_view_model_test.rb +62 -0
- data/workarea-klarna.gemspec +20 -0
- metadata +177 -0
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Workarea
|
4
|
+
class Payment
|
5
|
+
class Tender
|
6
|
+
class KlarnaTest < TestCase
|
7
|
+
def test_authorization_token_expired?
|
8
|
+
tender = Klarna.new
|
9
|
+
refute(tender.authorization_token_expired?)
|
10
|
+
|
11
|
+
tender.authorization_token = '123'
|
12
|
+
refute(tender.authorization_token_expired?)
|
13
|
+
|
14
|
+
travel_to 61.minutes.from_now
|
15
|
+
|
16
|
+
assert(tender.authorization_token_expired?)
|
17
|
+
|
18
|
+
tender.authorization_token = '123'
|
19
|
+
assert(tender.authorization_token_expired?)
|
20
|
+
|
21
|
+
tender.authorization_token = '456'
|
22
|
+
refute(tender.authorization_token_expired?)
|
23
|
+
ensure
|
24
|
+
travel_back
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_clear_authorization!
|
28
|
+
payment = Payment.new(klarna: { authorization_token: '123' })
|
29
|
+
tender = payment.klarna
|
30
|
+
|
31
|
+
assert(tender.authorization_token.present?)
|
32
|
+
assert(tender.authorization_token_expires_at.present?)
|
33
|
+
|
34
|
+
tender.clear_authorization!
|
35
|
+
|
36
|
+
refute(tender.authorization_token.present?)
|
37
|
+
refute(tender.authorization_token_expires_at.present?)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_placed_order_data
|
41
|
+
payment = Payment.new(
|
42
|
+
klarna: { authorization_token: '123', amount: 5.to_m }
|
43
|
+
)
|
44
|
+
tender = payment.klarna
|
45
|
+
|
46
|
+
refute(tender.placed_order_data.present?)
|
47
|
+
assert_nil(tender.order_id)
|
48
|
+
assert_nil(tender.redirect_url)
|
49
|
+
|
50
|
+
txn = payment.klarna.build_transaction(action: 'purchase')
|
51
|
+
txn.update!(
|
52
|
+
success: true,
|
53
|
+
response: ActiveMerchant::Billing::Response.new(
|
54
|
+
true,
|
55
|
+
'foo bar',
|
56
|
+
{ 'order_id' => '111', 'redirect_url' => '/test-purchase' }
|
57
|
+
)
|
58
|
+
)
|
59
|
+
|
60
|
+
assert(tender.placed_order_data.present?)
|
61
|
+
assert_equal('111', tender.order_id)
|
62
|
+
assert_equal('/test-purchase', tender.redirect_url)
|
63
|
+
|
64
|
+
txn = payment.klarna.build_transaction(action: 'authorize')
|
65
|
+
txn.update!(
|
66
|
+
success: true,
|
67
|
+
response: ActiveMerchant::Billing::Response.new(
|
68
|
+
true,
|
69
|
+
'foo bar',
|
70
|
+
{ 'order_id' => '222', 'redirect_url' => '/test-capture' }
|
71
|
+
)
|
72
|
+
)
|
73
|
+
|
74
|
+
assert(tender.placed_order_data.present?)
|
75
|
+
assert_equal('222', tender.order_id)
|
76
|
+
assert_equal('/test-capture', tender.redirect_url)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Workarea
|
4
|
+
class SetupKlarnaSessionTest < TestCase
|
5
|
+
setup :configure_klarna_data
|
6
|
+
|
7
|
+
def test_perform
|
8
|
+
klarna_gateway_class.any_instance.expects(:create_session).never
|
9
|
+
|
10
|
+
order = create_order
|
11
|
+
checkout = Checkout.new(order)
|
12
|
+
|
13
|
+
SetupKlarnaSession.new(checkout).perform
|
14
|
+
|
15
|
+
checkout.payment.build_address(unsupported_address)
|
16
|
+
assert(checkout.payment.address.valid?)
|
17
|
+
|
18
|
+
SetupKlarnaSession.new(checkout).perform
|
19
|
+
|
20
|
+
checkout.payment.address.attributes = supported_eur_address
|
21
|
+
|
22
|
+
klarna_gateway_class
|
23
|
+
.any_instance
|
24
|
+
.expects(:create_session)
|
25
|
+
.once
|
26
|
+
.returns(OpenStruct.new(success?: true, body: { session_id: '123' }))
|
27
|
+
|
28
|
+
SetupKlarnaSession.new(checkout).perform
|
29
|
+
|
30
|
+
session = Payment::KlarnaSession.find(order.id)
|
31
|
+
assert_equal('123', session.session_id)
|
32
|
+
|
33
|
+
klarna_gateway_class
|
34
|
+
.any_instance
|
35
|
+
.expects(:update_session)
|
36
|
+
.once
|
37
|
+
.with(order, session.session_id)
|
38
|
+
|
39
|
+
SetupKlarnaSession.new(checkout).perform
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
# Configure Rails Environment
|
2
|
+
ENV['RAILS_ENV'] = 'test'
|
3
|
+
|
4
|
+
require File.expand_path("../../test/dummy/config/environment.rb", __FILE__)
|
5
|
+
require 'rails/test_help'
|
6
|
+
require 'workarea/test_help'
|
7
|
+
|
8
|
+
# Filter out Minitest backtrace while allowing backtrace from other libraries
|
9
|
+
# to be shown.
|
10
|
+
Minitest.backtrace_filter = Minitest::BacktraceFilter.new
|
@@ -0,0 +1,62 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api-na.playground.klarna.com//payments/v1/authorizations/31ae5ab6-d4d5-145f-b71b-36cd8404c5ba/order
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"purchase_country":"US","purchase_currency":"USD","locale":"en","order_amount":1412,"order_tax_amount":112,"order_lines":[{"name":"Integration
|
9
|
+
Product","type":"physical","reference":"SKU","quantity":2,"unit_price":500,"total_amount":1000,"product_url":"http://www.example.com/products/integration-product","product_identifiers":{"category_path":"Home
|
10
|
+
\u003e Pants"}},{"name":"Shipping","type":"shipping_fee","quantity":1,"unit_price":700,"total_amount":700},{"name":"Order
|
11
|
+
Discounts","type":"discount","quantity":1,"unit_price":-100,"total_amount":-100},{"name":"Tax","type":"sales_tax","quantity":1,"unit_price":112,"total_amount":112},{"name":"Store
|
12
|
+
Credit","type":"store_credit","quantity":1,"unit_price":-300,"total_amount":-300}],"billing_address":{"given_name":"Ben","family_name":"Crouse","email":"user0@workarea.com","street_address":"22
|
13
|
+
S. 3rd St.","street_address2":"Second Floor","postal_code":"19106","city":"Philadelphia","region":"PA","phone":null,"country":"US"},"shipping_address":{"given_name":"Ben","family_name":"Crouse","email":"user0@workarea.com","street_address":"22
|
14
|
+
S. 3rd St.","street_address2":"Second Floor","postal_code":"19106","city":"Philadelphia","region":"PA","phone":null,"country":"US"},"merchant_urls":{"confirmation":"http://www.example.com/checkout/confirmation"},"merchant_reference1":"A110ADB728","auto_capture":false}'
|
15
|
+
headers:
|
16
|
+
User-Agent:
|
17
|
+
- Workarea/3.5.16
|
18
|
+
Authorization:
|
19
|
+
- Basic Zm9vOmJhcg==
|
20
|
+
Content-Type:
|
21
|
+
- application/json
|
22
|
+
Accept-Encoding:
|
23
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
24
|
+
Accept:
|
25
|
+
- "*/*"
|
26
|
+
response:
|
27
|
+
status:
|
28
|
+
code: 200
|
29
|
+
message: OK
|
30
|
+
headers:
|
31
|
+
Date:
|
32
|
+
- Thu, 23 Jul 2020 23:52:38 GMT
|
33
|
+
Content-Type:
|
34
|
+
- application/json
|
35
|
+
Transfer-Encoding:
|
36
|
+
- chunked
|
37
|
+
Connection:
|
38
|
+
- keep-alive
|
39
|
+
Server:
|
40
|
+
- openresty
|
41
|
+
Vary:
|
42
|
+
- Accept-Encoding
|
43
|
+
Render-Time:
|
44
|
+
- '76'
|
45
|
+
Klarna-Correlation-Id:
|
46
|
+
- d0099594-4ee1-4f37-bc58-66cdb876b33a
|
47
|
+
Strict-Transport-Security:
|
48
|
+
- max-age=31536000; includeSubDomains
|
49
|
+
body:
|
50
|
+
encoding: ASCII-8BIT
|
51
|
+
string: |-
|
52
|
+
{
|
53
|
+
"order_id" : "48ab3d6b-e3b5-1f2b-8544-0469e87e9e1e",
|
54
|
+
"redirect_url" : "https://klarna-payments-na.playground.klarna.com/payments/v1/sessions/f9ac7fa6-52b9-13c9-8125-df870c1d8c2c/redirect",
|
55
|
+
"fraud_status" : "ACCEPTED",
|
56
|
+
"authorized_payment_method" : {
|
57
|
+
"type" : "invoice"
|
58
|
+
}
|
59
|
+
}
|
60
|
+
http_version:
|
61
|
+
recorded_at: Thu, 23 Jul 2020 23:52:38 GMT
|
62
|
+
recorded_with: VCR 2.9.3
|
@@ -0,0 +1,60 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api-na.playground.klarna.com//ordermanagement/v1/orders/1dab0505-d1d5-1041-ac57-5ffda5af139c/captures
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"captured_amount":500}'
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Workarea/3.5.16
|
12
|
+
Authorization:
|
13
|
+
- Basic Zm9vOmJhcg==
|
14
|
+
Content-Type:
|
15
|
+
- application/json
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
+
Accept:
|
19
|
+
- "*/*"
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 201
|
23
|
+
message: ''
|
24
|
+
headers:
|
25
|
+
Date:
|
26
|
+
- Thu, 23 Jul 2020 23:29:51 GMT
|
27
|
+
Content-Length:
|
28
|
+
- '0'
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Server:
|
32
|
+
- openresty
|
33
|
+
Location:
|
34
|
+
- https://api-na.playground.klarna.com/ordermanagement/v1/orders/1dab0505-d1d5-1041-ac57-5ffda5af139c/captures/eabd454d-c2cc-4139-8438-27635e93e666
|
35
|
+
Transaction-Id:
|
36
|
+
- 0a4de76d-a048-45d2-a2b3-3b4cd8704640
|
37
|
+
Capture-Id:
|
38
|
+
- eabd454d-c2cc-4139-8438-27635e93e666
|
39
|
+
X-Content-Type-Options:
|
40
|
+
- nosniff
|
41
|
+
X-Xss-Protection:
|
42
|
+
- 1; mode=block
|
43
|
+
Cache-Control:
|
44
|
+
- no-cache, no-store, max-age=0, must-revalidate
|
45
|
+
Pragma:
|
46
|
+
- no-cache
|
47
|
+
Expires:
|
48
|
+
- '0'
|
49
|
+
X-Frame-Options:
|
50
|
+
- DENY
|
51
|
+
Klarna-Correlation-Id:
|
52
|
+
- cf47e15c-4798-481d-b423-f052d409fddb
|
53
|
+
Strict-Transport-Security:
|
54
|
+
- max-age=31536000; includeSubDomains
|
55
|
+
body:
|
56
|
+
encoding: UTF-8
|
57
|
+
string: ''
|
58
|
+
http_version:
|
59
|
+
recorded_at: Thu, 23 Jul 2020 23:29:51 GMT
|
60
|
+
recorded_with: VCR 2.9.3
|
@@ -0,0 +1,61 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api-na.playground.klarna.com/payments/v1/sessions
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"purchase_country":"US","purchase_currency":"USD","locale":"en","order_amount":1000,"order_tax_amount":0,"order_lines":[{"name":"Test
|
9
|
+
Product","type":"physical","reference":"SKU","quantity":2,"unit_price":500,"total_amount":1000,"product_url":"http://www.example.com/products/test-product","product_identifiers":{}},{"name":"Tax","type":"sales_tax","quantity":1,"unit_price":0,"total_amount":0}],"merchant_urls":{"confirmation":"http://www.example.com/checkout/confirmation"},"merchant_reference1":"D461D6C714"}'
|
10
|
+
headers:
|
11
|
+
User-Agent:
|
12
|
+
- Workarea/3.5.16
|
13
|
+
Authorization:
|
14
|
+
- Basic Zm9vOmJhcg==
|
15
|
+
Content-Type:
|
16
|
+
- application/json
|
17
|
+
Accept-Encoding:
|
18
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
19
|
+
Accept:
|
20
|
+
- "*/*"
|
21
|
+
response:
|
22
|
+
status:
|
23
|
+
code: 200
|
24
|
+
message: OK
|
25
|
+
headers:
|
26
|
+
Date:
|
27
|
+
- Fri, 24 Jul 2020 00:09:26 GMT
|
28
|
+
Content-Type:
|
29
|
+
- application/json
|
30
|
+
Transfer-Encoding:
|
31
|
+
- chunked
|
32
|
+
Connection:
|
33
|
+
- keep-alive
|
34
|
+
Server:
|
35
|
+
- openresty
|
36
|
+
Vary:
|
37
|
+
- Accept-Encoding
|
38
|
+
Render-Time:
|
39
|
+
- '25'
|
40
|
+
Klarna-Correlation-Id:
|
41
|
+
- 6c7c56d4-2a0a-4e77-8e35-a48a47019b34
|
42
|
+
Strict-Transport-Security:
|
43
|
+
- max-age=31536000; includeSubDomains
|
44
|
+
body:
|
45
|
+
encoding: ASCII-8BIT
|
46
|
+
string: |-
|
47
|
+
{
|
48
|
+
"session_id" : "94a6dd80-d2a6-1f8b-943b-786cd953a908",
|
49
|
+
"client_token" : "notarealtoken",
|
50
|
+
"payment_method_categories" : [ {
|
51
|
+
"identifier" : "pay_later",
|
52
|
+
"name" : "Pay later in 30 days",
|
53
|
+
"asset_urls" : {
|
54
|
+
"descriptive" : "https://x.klarnacdn.net/payment-method/assets/badges/generic/klarna.svg",
|
55
|
+
"standard" : "https://x.klarnacdn.net/payment-method/assets/badges/generic/klarna.svg"
|
56
|
+
}
|
57
|
+
} ]
|
58
|
+
}
|
59
|
+
http_version:
|
60
|
+
recorded_at: Fri, 24 Jul 2020 00:09:26 GMT
|
61
|
+
recorded_with: VCR 2.9.3
|
@@ -0,0 +1,60 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api-na.playground.klarna.com//ordermanagement/v1/orders/1dab0505-d1d5-1041-ac57-5ffda5af139c/refunds
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"refunded_amount":500}'
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Workarea/3.5.16
|
12
|
+
Authorization:
|
13
|
+
- Basic Zm9vOmJhcg==
|
14
|
+
Content-Type:
|
15
|
+
- application/json
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
+
Accept:
|
19
|
+
- "*/*"
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 201
|
23
|
+
message: ''
|
24
|
+
headers:
|
25
|
+
Date:
|
26
|
+
- Thu, 23 Jul 2020 23:31:40 GMT
|
27
|
+
Content-Length:
|
28
|
+
- '0'
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Server:
|
32
|
+
- openresty
|
33
|
+
Location:
|
34
|
+
- https://api-na.playground.klarna.com/ordermanagement/v1/orders/1dab0505-d1d5-1041-ac57-5ffda5af139c/refunds/2aca2466-c064-4331-a8f1-ee793413dfbf
|
35
|
+
Refund-Id:
|
36
|
+
- 2aca2466-c064-4331-a8f1-ee793413dfbf
|
37
|
+
Transaction-Id:
|
38
|
+
- ee534ddc-49f9-41ab-ab9c-ab5d606ac047
|
39
|
+
X-Content-Type-Options:
|
40
|
+
- nosniff
|
41
|
+
X-Xss-Protection:
|
42
|
+
- 1; mode=block
|
43
|
+
Cache-Control:
|
44
|
+
- no-cache, no-store, max-age=0, must-revalidate
|
45
|
+
Pragma:
|
46
|
+
- no-cache
|
47
|
+
Expires:
|
48
|
+
- '0'
|
49
|
+
X-Frame-Options:
|
50
|
+
- DENY
|
51
|
+
Klarna-Correlation-Id:
|
52
|
+
- ddc4b073-0d39-4a4d-a073-9ec3f5fd3607
|
53
|
+
Strict-Transport-Security:
|
54
|
+
- max-age=31536000; includeSubDomains
|
55
|
+
body:
|
56
|
+
encoding: UTF-8
|
57
|
+
string: ''
|
58
|
+
http_version:
|
59
|
+
recorded_at: Thu, 23 Jul 2020 23:31:41 GMT
|
60
|
+
recorded_with: VCR 2.9.3
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Workarea
|
4
|
+
module Storefront
|
5
|
+
module Checkout
|
6
|
+
class KlarnaPaymentViewModelTest < TestCase
|
7
|
+
setup :configure_klarna_data
|
8
|
+
delegate :order, :payment, to: :checkout
|
9
|
+
|
10
|
+
def checkout
|
11
|
+
@checkout ||= Workarea::Checkout.new(create_order)
|
12
|
+
end
|
13
|
+
|
14
|
+
def step
|
15
|
+
Workarea::Checkout::Steps::Payment.new(checkout)
|
16
|
+
end
|
17
|
+
|
18
|
+
def view_model
|
19
|
+
PaymentViewModel.new(step)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_offer_klarna_payments?
|
23
|
+
refute(view_model.offer_klarna_payments?)
|
24
|
+
|
25
|
+
payment.build_address(supported_eur_address)
|
26
|
+
refute(view_model.offer_klarna_payments?)
|
27
|
+
|
28
|
+
create_klarna_session(id: order.id)
|
29
|
+
assert(view_model.offer_klarna_payments?)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_klarna_selected?
|
33
|
+
refute(view_model.klarna_selected?)
|
34
|
+
|
35
|
+
payment.set_klarna(authorization_token: '123')
|
36
|
+
assert(view_model.klarna_selected?)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_klarna_payment_category_selected?
|
40
|
+
refute(view_model.klarna_payment_category_selected?('pay_later'))
|
41
|
+
|
42
|
+
payment.set_klarna(authorization_token: '123')
|
43
|
+
refute(view_model.klarna_payment_category_selected?('pay_later'))
|
44
|
+
|
45
|
+
payment.klarna.payment_method_category = 'pay_later'
|
46
|
+
assert(view_model.klarna_payment_category_selected?('pay_later'))
|
47
|
+
refute(view_model.klarna_payment_category_selected?('pay_now'))
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_klarna_expired?
|
51
|
+
refute(view_model.klarna_expired?)
|
52
|
+
|
53
|
+
payment.set_klarna(authorization_token: '123')
|
54
|
+
refute(view_model.klarna_expired?)
|
55
|
+
|
56
|
+
payment.klarna.authorization_token_expires_at = 1.minutes.ago
|
57
|
+
assert(view_model.klarna_expired?)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|