workarea-paypal 2.0.10 → 3.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.eslintrc.json +2 -1
- data/.gitignore +16 -11
- data/CHANGELOG.md +86 -2
- data/README.md +105 -6
- data/Rakefile +1 -2
- data/UPGRADE.md +46 -0
- data/app/assets/javascripts/workarea/storefront/paypal/config.js.erb +44 -0
- data/app/assets/javascripts/workarea/storefront/paypal/modules/paypal_buttons.js +71 -0
- data/app/assets/javascripts/workarea/storefront/paypal/modules/paypal_hosted_fields.js +96 -0
- data/app/assets/javascripts/workarea/storefront/paypal/modules/update_checkout_submit_text.js +11 -5
- data/app/assets/javascripts/workarea/storefront/paypal/templates/paypal_fields.jst.ejs +43 -0
- data/app/controllers/workarea/storefront/checkout/place_order_controller.decorator +6 -4
- data/app/controllers/workarea/storefront/paypal_controller.rb +32 -26
- data/app/helpers/workarea/storefront/paypal_helper.rb +38 -0
- data/app/models/workarea/payment.decorator +17 -3
- data/app/models/workarea/payment/authorize/paypal.rb +13 -13
- data/app/models/workarea/payment/capture/paypal.rb +10 -20
- data/app/models/workarea/payment/null_address.rb +37 -0
- data/app/models/workarea/payment/purchase/paypal.rb +1 -25
- data/app/models/workarea/payment/refund/paypal.rb +3 -6
- data/app/models/workarea/payment/tender/paypal.rb +14 -2
- data/app/services/workarea/paypal/approve_order.rb +104 -0
- data/app/services/workarea/paypal/create_order.rb +177 -0
- data/app/services/workarea/paypal/update_order.rb +44 -0
- data/app/views/workarea/admin/orders/tenders/_paypal.html.haml +5 -2
- data/app/views/workarea/api/orders/tenders/_paypal.json.jbuilder +7 -1
- data/app/views/workarea/storefront/carts/_paypal_checkout.html.haml +6 -1
- data/app/views/workarea/storefront/checkouts/_paypal_payment.html.haml +17 -6
- data/app/views/workarea/storefront/order_mailer/tenders/_paypal.html.haml +5 -3
- data/app/views/workarea/storefront/orders/tenders/_paypal.html.haml +9 -2
- data/app/views/workarea/storefront/paypal/_paypal_sdk.html.haml +1 -0
- data/app/workers/workarea/paypal/handle_webhook_event.rb +64 -0
- data/config/initializers/append_points.rb +17 -5
- data/config/initializers/fields.rb +27 -0
- data/config/initializers/workarea.rb +41 -5
- data/config/locales/en.yml +15 -5
- data/config/routes.rb +5 -2
- data/lib/tasks/workarea/create_webhooks.rake +29 -0
- data/lib/workarea/paypal.rb +22 -18
- data/lib/workarea/paypal/engine.rb +4 -0
- data/lib/workarea/paypal/gateway.rb +200 -0
- data/lib/workarea/paypal/requests/create_webhook.rb +21 -0
- data/lib/workarea/paypal/requests/delete_webhook.rb +17 -0
- data/lib/workarea/paypal/requests/generate_token.rb +21 -0
- data/lib/workarea/paypal/requests/list_webhooks.rb +17 -0
- data/lib/workarea/paypal/version.rb +1 -1
- data/package.json +9 -0
- data/test/dummy/config/initializers/workarea.rb +1 -1
- data/test/factories/workarea/capture_completed_webhook.json +70 -0
- data/test/factories/workarea/capture_denied_webhook.json +68 -0
- data/test/factories/workarea/paypal.rb +34 -0
- data/test/helpers/workarea/storefront/paypal_helper_test.rb +35 -0
- data/test/integration/workarea/storefront/paypal_integration_test.rb +104 -294
- data/test/integration/workarea/storefront/paypal_place_order_integration_test.rb +42 -0
- data/test/lib/workarea/paypal/gateway_test.rb +236 -0
- data/test/models/workarea/payment/authorize/paypal_test.rb +57 -46
- data/test/models/workarea/payment/capture/paypal_test.rb +9 -51
- data/test/models/workarea/payment/null_address_test.rb +53 -0
- data/test/models/workarea/payment/refund/paypal_test.rb +39 -38
- data/test/models/workarea/paypal_payment_test.rb +65 -0
- data/test/models/workarea/search/paypal_order_text_test.rb +14 -0
- data/test/services/workarea/paypal/approve_order_test.rb +35 -0
- data/test/services/workarea/paypal/create_order_test.rb +127 -0
- data/test/services/workarea/paypal/update_order_test.rb +73 -0
- data/test/support/workarea/paypal_setup.rb +49 -0
- data/test/system/workarea/storefront/cart_system_test.decorator +1 -1
- data/test/system/workarea/storefront/logged_in_checkout_system_test.decorator +1 -1
- data/test/vcr_cassettes/paypal_approve_order.yml +106 -0
- data/test/vcr_cassettes/paypal_create_order.yml +110 -0
- data/test/vcr_cassettes/paypal_gateway_create_order.yml +105 -0
- data/test/vcr_cassettes/paypal_gateway_generate_token.yml +103 -0
- data/test/vcr_cassettes/paypal_gateway_get_order.yml +103 -0
- data/test/vcr_cassettes/paypal_gateway_update_order.yml +199 -0
- data/test/vcr_cassettes/paypal_gateway_webhooks.yml +403 -0
- data/test/vcr_cassettes/paypal_update_order.yml +204 -0
- data/test/workers/workarea/paypal/handle_webhook_event_test.rb +60 -0
- data/workarea-paypal.gemspec +2 -1
- metadata +64 -13
- data/app/services/workarea/paypal/setup.rb +0 -114
- data/app/services/workarea/paypal/update.rb +0 -69
- data/app/views/workarea/storefront/checkouts/_paypal_error.html.haml +0 -6
- data/app/views/workarea/storefront/order_mailer/tenders/_paypal.text.haml +0 -2
- data/test/dummy/config/initializers/session_store.rb +0 -3
- data/test/integration/workarea/storefront/place_order_integration_test.decorator +0 -11
- data/test/models/workarea/payment/purchase/paypal_test.rb +0 -94
- data/test/models/workarea/payment_test.decorator +0 -34
- data/test/models/workarea/search/admin/order_test.decorator +0 -32
- data/test/services/workarea/paypal/setup_test.rb +0 -120
- data/test/services/workarea/paypal/update_test.rb +0 -221
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Workarea
|
4
|
+
class Payment
|
5
|
+
class NullAddressTest < TestCase
|
6
|
+
def test_responding_as_address
|
7
|
+
address = NullAddress.new
|
8
|
+
|
9
|
+
assert(address.save)
|
10
|
+
|
11
|
+
address.street = '123 Street Rd.'
|
12
|
+
assert_nil(address.street)
|
13
|
+
assert(address.valid?)
|
14
|
+
assert_equal('123 Street Rd.', address.reference.street)
|
15
|
+
|
16
|
+
address.country = 'US'
|
17
|
+
assert_nil(address.country.alpha2)
|
18
|
+
assert_equal('US', address.reference.country.alpha2)
|
19
|
+
|
20
|
+
assert(address.save!)
|
21
|
+
|
22
|
+
assert(
|
23
|
+
address.update!(
|
24
|
+
first_name: 'Robert',
|
25
|
+
last_name: 'Clams',
|
26
|
+
street: '22 South 3rd St.',
|
27
|
+
city: 'Philadelphia',
|
28
|
+
region: 'PA',
|
29
|
+
postal_code: '19106'
|
30
|
+
)
|
31
|
+
)
|
32
|
+
|
33
|
+
refute(address.persisted?)
|
34
|
+
assert_nil(address.first_name)
|
35
|
+
assert_nil(address.last_name)
|
36
|
+
assert_nil(address.street)
|
37
|
+
assert_nil(address.city)
|
38
|
+
assert_nil(address.region)
|
39
|
+
assert_nil(address.postal_code)
|
40
|
+
assert(address.valid?)
|
41
|
+
|
42
|
+
refute(address.reference.persisted?)
|
43
|
+
assert_equal('Robert', address.reference.first_name)
|
44
|
+
assert_equal('Clams', address.reference.last_name)
|
45
|
+
assert_equal('22 South 3rd St.', address.reference.street)
|
46
|
+
assert_equal('Philadelphia', address.reference.city)
|
47
|
+
assert_equal('PA', address.reference.region)
|
48
|
+
assert_equal('19106', address.reference.postal_code)
|
49
|
+
assert(address.reference.valid?)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -4,64 +4,65 @@ module Workarea
|
|
4
4
|
class Payment
|
5
5
|
class Refund
|
6
6
|
class PaypalTest < Workarea::TestCase
|
7
|
-
|
8
|
-
|
9
|
-
def authorization
|
10
|
-
@authorization ||= ActiveMerchant::Billing::BogusGateway::AUTHORIZATION
|
7
|
+
def payment
|
8
|
+
@payment ||= create_payment
|
11
9
|
end
|
12
10
|
|
13
|
-
def
|
14
|
-
@
|
11
|
+
def tender
|
12
|
+
@tender ||=
|
15
13
|
begin
|
16
|
-
|
17
|
-
|
18
|
-
result
|
14
|
+
payment.build_paypal(paypal_id: '1234', payer_id: 'pid')
|
15
|
+
payment.paypal
|
19
16
|
end
|
20
17
|
end
|
21
18
|
|
22
|
-
def
|
23
|
-
@
|
19
|
+
def transaction
|
20
|
+
@transaction ||= tender.transactions.build(
|
21
|
+
action: 'authorize',
|
24
22
|
amount: 5.to_m,
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
reference: tender.build_transaction(
|
24
|
+
action: 'purchase',
|
25
|
+
amount: 5.to_m,
|
26
|
+
response: ActiveMerchant::Billing::Response.new(
|
27
|
+
true,
|
28
|
+
'PayPal capture succeeded',
|
29
|
+
id: 'CAPTURE_0001'
|
30
|
+
)
|
29
31
|
)
|
30
32
|
)
|
31
33
|
end
|
32
34
|
|
33
|
-
def
|
34
|
-
@
|
35
|
-
|
36
|
-
|
35
|
+
def stubbed_refund
|
36
|
+
@stubbed_refund ||= OpenStruct.new(
|
37
|
+
status_code: 201,
|
38
|
+
result: OpenStruct.new(
|
39
|
+
id: 'REFUND_0001',
|
40
|
+
status: 'COMPLETED',
|
41
|
+
)
|
37
42
|
)
|
38
43
|
end
|
39
44
|
|
40
|
-
def
|
41
|
-
|
42
|
-
operation = Paypal.new(payment.paypal, transaction)
|
43
|
-
|
44
|
-
assert_raises(Payment::MissingReference) { operation.complete! }
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_complete_refunds_on_the_credit_card_gateway
|
48
|
-
operation = Paypal.new(payment.paypal, transaction)
|
49
|
-
|
50
|
-
gateway
|
51
|
-
.expects(:refund)
|
52
|
-
.with(500, authorization, currency: 'USD')
|
45
|
+
def test_complete_success
|
46
|
+
PayPal::PayPalHttpClient.any_instance.expects(:execute).returns(stubbed_refund)
|
53
47
|
|
48
|
+
operation = Paypal.new(tender, transaction)
|
54
49
|
operation.complete!
|
50
|
+
|
51
|
+
assert(transaction.response.success?)
|
52
|
+
assert(transaction.response.message.present?)
|
53
|
+
assert_equal('CAPTURE_0001', transaction.response.params['capture_id'])
|
55
54
|
end
|
56
55
|
|
57
|
-
def
|
58
|
-
|
56
|
+
def test_complete_failure
|
57
|
+
stubbed_refund.status_code = 500
|
58
|
+
PayPal::PayPalHttpClient.any_instance.expects(:execute).returns(stubbed_refund)
|
59
|
+
|
60
|
+
operation = Paypal.new(tender, transaction)
|
59
61
|
operation.complete!
|
60
62
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
)
|
63
|
+
refute(transaction.response.success?)
|
64
|
+
assert(transaction.response.message.present?)
|
65
|
+
assert(transaction.response.params.present?)
|
65
66
|
end
|
66
67
|
end
|
67
68
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Workarea
|
4
|
+
class PaypalPaymentTest < TestCase
|
5
|
+
def payment
|
6
|
+
@payment ||= Payment.create!
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_paypal?
|
10
|
+
refute(payment.paypal?)
|
11
|
+
|
12
|
+
payment.build_paypal
|
13
|
+
refute(payment.paypal?)
|
14
|
+
|
15
|
+
payment.paypal.approved = true
|
16
|
+
assert(payment.paypal?)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_set_paypal_creates_paypal_tender
|
20
|
+
payment.set_paypal(
|
21
|
+
paypal_id: '12345',
|
22
|
+
payer_id: 'payer_id',
|
23
|
+
details: { 'foo' => 'bar' }
|
24
|
+
)
|
25
|
+
|
26
|
+
assert_equal('12345', payment.paypal.paypal_id)
|
27
|
+
assert_equal('payer_id', payment.paypal.payer_id)
|
28
|
+
assert_equal({ 'foo' => 'bar' }, payment.paypal.details)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_set_credit_card_removes_paypal_tender
|
32
|
+
payment.set_paypal(
|
33
|
+
paypal_id: '12345',
|
34
|
+
payer_id: 'payer_id',
|
35
|
+
details: { 'foo' => 'bar' }
|
36
|
+
)
|
37
|
+
|
38
|
+
payment.set_credit_card({})
|
39
|
+
assert(payment.paypal.blank?)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_address
|
43
|
+
refute(payment.address.present?)
|
44
|
+
|
45
|
+
payment.build_paypal(approved: true)
|
46
|
+
assert(payment.address.present?)
|
47
|
+
|
48
|
+
assert(payment.address.valid?)
|
49
|
+
assert(payment.address.street.blank?)
|
50
|
+
|
51
|
+
payment.set_address(factory_defaults(:billing_address))
|
52
|
+
assert(payment.address.valid?)
|
53
|
+
assert(payment.address.street.present?)
|
54
|
+
|
55
|
+
payment.paypal = nil
|
56
|
+
assert(payment.address.valid?)
|
57
|
+
|
58
|
+
payment.address = nil
|
59
|
+
refute(payment.address.present?)
|
60
|
+
|
61
|
+
payment.build_address
|
62
|
+
refute(payment.address.valid?)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Workarea
|
4
|
+
module Search
|
5
|
+
class PaypalOrderTextTest < TestCase
|
6
|
+
def test_payment_text
|
7
|
+
order = create_order
|
8
|
+
payment = Workarea::Payment.create!(id: order.id, paypal: { approved: true })
|
9
|
+
|
10
|
+
assert_equal('PayPal', Search::OrderText.new(order).payment_text)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Workarea
|
4
|
+
module Paypal
|
5
|
+
class ApproveOrderTest < TestCase
|
6
|
+
include PaypalSetup
|
7
|
+
|
8
|
+
setup :checkout
|
9
|
+
|
10
|
+
def test_perform
|
11
|
+
order_id = VCR.use_cassette('paypal_create_order') do
|
12
|
+
CreateOrder.new(checkout).perform.id
|
13
|
+
end
|
14
|
+
|
15
|
+
checkout.start_as(:guest)
|
16
|
+
|
17
|
+
VCR.use_cassette('paypal_approve_order') do
|
18
|
+
ApproveOrder.new(checkout, order_id).perform
|
19
|
+
end
|
20
|
+
|
21
|
+
assert(checkout.complete?)
|
22
|
+
assert(checkout.order.email.present?)
|
23
|
+
assert(checkout.shipping.shipping_service.valid?)
|
24
|
+
assert(checkout.shipping.address.valid?)
|
25
|
+
assert(checkout.payment.address.valid?)
|
26
|
+
assert(checkout.payment.paypal?)
|
27
|
+
assert(checkout.payment.paypal.paypal_id.present?)
|
28
|
+
assert(checkout.payment.paypal.payer_id.present?)
|
29
|
+
assert(checkout.payment.paypal.details.present?)
|
30
|
+
assert(checkout.payment.paypal.approved?)
|
31
|
+
assert_equal(checkout.order.total_price, checkout.payment.paypal.amount)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Workarea
|
4
|
+
module Paypal
|
5
|
+
class CreateOrderTest < TestCase
|
6
|
+
include PaypalSetup
|
7
|
+
|
8
|
+
setup :checkout
|
9
|
+
|
10
|
+
def test_perform
|
11
|
+
result = VCR.use_cassette('paypal_create_order') do
|
12
|
+
CreateOrder.new(checkout).perform
|
13
|
+
end
|
14
|
+
|
15
|
+
assert(result.id.present?)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_request_body
|
19
|
+
body = CreateOrder.new(checkout).request_body
|
20
|
+
|
21
|
+
context = body[:application_context]
|
22
|
+
assert_equal(Workarea.config.site_name, context[:brand_name])
|
23
|
+
assert_equal('SET_PROVIDED_ADDRESS', context[:shipping_preference])
|
24
|
+
|
25
|
+
payer = body[:payer]
|
26
|
+
assert(payer[:email_address].present?)
|
27
|
+
assert(payer[:name].present?)
|
28
|
+
assert(payer[:address].present?)
|
29
|
+
|
30
|
+
purchase_unit = body[:purchase_units].first
|
31
|
+
assert_equal(checkout.order.id, purchase_unit[:custom_id])
|
32
|
+
assert(purchase_unit[:amount].present?)
|
33
|
+
assert(purchase_unit[:items].present?)
|
34
|
+
assert(purchase_unit[:shipping].present?)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_payer
|
38
|
+
payer = CreateOrder.new(checkout).payer
|
39
|
+
|
40
|
+
assert_equal(checkout.order.email, payer[:email_address])
|
41
|
+
assert_equal(checkout.payment.address.first_name, payer[:name][:given_name])
|
42
|
+
assert_equal(checkout.payment.address.last_name, payer[:name][:surname])
|
43
|
+
assert_equal(checkout.payment.address.street, payer[:address][:address_line_1])
|
44
|
+
assert_equal(checkout.payment.address.street_2, payer[:address][:address_line_2])
|
45
|
+
assert_equal(checkout.payment.address.city, payer[:address][:admin_area_2])
|
46
|
+
assert_equal(checkout.payment.address.region, payer[:address][:admin_area_1])
|
47
|
+
assert_equal(checkout.payment.address.postal_code, payer[:address][:postal_code])
|
48
|
+
assert_equal(checkout.payment.address.country.alpha2, payer[:address][:country_code])
|
49
|
+
|
50
|
+
checkout.order.email = nil
|
51
|
+
payer = CreateOrder.new(checkout).payer
|
52
|
+
refute(payer.present?)
|
53
|
+
|
54
|
+
checkout.order.email = 'test@workarea.com'
|
55
|
+
checkout.payment.address = nil
|
56
|
+
payer = CreateOrder.new(checkout).payer
|
57
|
+
|
58
|
+
assert_equal(checkout.order.email, payer[:email_address])
|
59
|
+
assert_nil(payer[:name])
|
60
|
+
assert_nil(payer[:address])
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_amount
|
64
|
+
amount = CreateOrder.new(checkout).amount
|
65
|
+
|
66
|
+
assert_equal('11.60', amount[:value])
|
67
|
+
|
68
|
+
breakdown = amount[:breakdown]
|
69
|
+
assert_equal('10.00', breakdown[:item_total][:value])
|
70
|
+
assert_equal('1.00', breakdown[:shipping][:value])
|
71
|
+
assert_equal('0.60', breakdown[:tax_total][:value])
|
72
|
+
assert_equal('0.00', breakdown[:discount][:value])
|
73
|
+
|
74
|
+
checkout.payment.build_store_credit(amount: 5.to_m)
|
75
|
+
amount = CreateOrder.new(checkout).amount
|
76
|
+
|
77
|
+
assert_equal('6.60', amount[:value])
|
78
|
+
|
79
|
+
breakdown = amount[:breakdown]
|
80
|
+
assert_equal('10.00', breakdown[:item_total][:value])
|
81
|
+
assert_equal('1.00', breakdown[:shipping][:value])
|
82
|
+
assert_equal('0.60', breakdown[:tax_total][:value])
|
83
|
+
assert_equal('5.00', breakdown[:discount][:value])
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_items
|
87
|
+
item = CreateOrder.new(checkout).items.first
|
88
|
+
order_item = checkout.order.items.first
|
89
|
+
|
90
|
+
assert_equal(order_item.sku, item[:sku])
|
91
|
+
assert_equal('5.00', item[:unit_amount][:value])
|
92
|
+
assert_equal(2, item[:quantity])
|
93
|
+
assert_equal('PHYSICAL_GOODS', item[:category])
|
94
|
+
|
95
|
+
order_item.fulfillment = 'download'
|
96
|
+
|
97
|
+
item = CreateOrder.new(checkout).items.first
|
98
|
+
assert_equal('DIGITAL_GOODS', item[:category])
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_shipping_info
|
102
|
+
shipping = CreateOrder.new(checkout).shipping_info
|
103
|
+
|
104
|
+
assert_equal('Ground', shipping[:method])
|
105
|
+
assert_equal('Ben Crouse', shipping[:name][:full_name])
|
106
|
+
assert_equal(checkout.shipping.address.street, shipping[:address][:address_line_1])
|
107
|
+
assert_equal(checkout.shipping.address.street_2, shipping[:address][:address_line_2])
|
108
|
+
assert_equal(checkout.shipping.address.city, shipping[:address][:admin_area_2])
|
109
|
+
assert_equal(checkout.shipping.address.region, shipping[:address][:admin_area_1])
|
110
|
+
assert_equal(checkout.shipping.address.postal_code, shipping[:address][:postal_code])
|
111
|
+
assert_equal(checkout.shipping.address.country.alpha2, shipping[:address][:country_code])
|
112
|
+
|
113
|
+
checkout.order.items.first.fulfillment = 'download'
|
114
|
+
assert(CreateOrder.new(checkout).shipping_info.blank?)
|
115
|
+
|
116
|
+
checkout.order.items.first.fulfillment = 'shipping'
|
117
|
+
checkout.shipping.address = nil
|
118
|
+
assert(CreateOrder.new(checkout).shipping_info.blank?)
|
119
|
+
|
120
|
+
create_shipping(order_id: checkout.order.id)
|
121
|
+
new_checkout = Checkout.new(checkout.order)
|
122
|
+
assert_equal(2, new_checkout.shippings.size)
|
123
|
+
assert(CreateOrder.new(new_checkout).shipping_info.blank?)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Workarea
|
4
|
+
module Paypal
|
5
|
+
class UpdateOrderTest < TestCase
|
6
|
+
include PaypalSetup
|
7
|
+
|
8
|
+
def test_perform
|
9
|
+
order_id = VCR.use_cassette('paypal_create_order') do
|
10
|
+
CreateOrder.new(checkout).perform.id
|
11
|
+
end
|
12
|
+
|
13
|
+
checkout.payment.build_store_credit(amount: 5.to_m)
|
14
|
+
checkout.payment.build_paypal(
|
15
|
+
amount: 6.6.to_m,
|
16
|
+
paypal_id: order_id,
|
17
|
+
approved: true
|
18
|
+
)
|
19
|
+
|
20
|
+
response = VCR.use_cassette('paypal_update_order') do
|
21
|
+
UpdateOrder.new(checkout).perform
|
22
|
+
Workarea::Paypal.gateway.get_order(order_id)
|
23
|
+
end
|
24
|
+
|
25
|
+
assert_equal(200, response.status_code)
|
26
|
+
assert_equal("6.60", response.result.purchase_units.first.amount.value)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_request_body
|
30
|
+
body = UpdateOrder.new(checkout).request_body
|
31
|
+
|
32
|
+
assert_equal(3, body.length)
|
33
|
+
|
34
|
+
part = body.first
|
35
|
+
assert_equal('replace', part[:op])
|
36
|
+
assert_equal(
|
37
|
+
"/purchase_units/@reference_id=='default'/shipping/name",
|
38
|
+
part[:path]
|
39
|
+
)
|
40
|
+
assert_includes(part[:value][:full_name], checkout.shipping.address.first_name)
|
41
|
+
assert_includes(part[:value][:full_name], checkout.shipping.address.last_name)
|
42
|
+
|
43
|
+
part = body.second
|
44
|
+
assert_equal('replace', part[:op])
|
45
|
+
assert_equal(
|
46
|
+
"/purchase_units/@reference_id=='default'/shipping/address",
|
47
|
+
part[:path]
|
48
|
+
)
|
49
|
+
assert_equal(checkout.shipping.address.street, part[:value][:address_line_1])
|
50
|
+
assert_equal(checkout.shipping.address.street_2, part[:value][:address_line_2])
|
51
|
+
assert_equal(checkout.shipping.address.city, part[:value][:admin_area_2])
|
52
|
+
assert_equal(checkout.shipping.address.region, part[:value][:admin_area_1])
|
53
|
+
assert_equal(checkout.shipping.address.postal_code, part[:value][:postal_code])
|
54
|
+
assert_equal(checkout.shipping.address.country.alpha2, part[:value][:country_code])
|
55
|
+
|
56
|
+
part = body.third
|
57
|
+
assert_equal('replace', part[:op])
|
58
|
+
assert_equal(
|
59
|
+
"/purchase_units/@reference_id=='default'/amount",
|
60
|
+
part[:path]
|
61
|
+
)
|
62
|
+
|
63
|
+
assert_equal('11.60', part[:value][:value])
|
64
|
+
|
65
|
+
breakdown = part[:value][:breakdown]
|
66
|
+
assert_equal('10.00', breakdown[:item_total][:value])
|
67
|
+
assert_equal('1.00', breakdown[:shipping][:value])
|
68
|
+
assert_equal('0.60', breakdown[:tax_total][:value])
|
69
|
+
assert_equal('0.00', breakdown[:discount][:value])
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|