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.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc.json +2 -1
  3. data/.gitignore +16 -11
  4. data/CHANGELOG.md +86 -2
  5. data/README.md +105 -6
  6. data/Rakefile +1 -2
  7. data/UPGRADE.md +46 -0
  8. data/app/assets/javascripts/workarea/storefront/paypal/config.js.erb +44 -0
  9. data/app/assets/javascripts/workarea/storefront/paypal/modules/paypal_buttons.js +71 -0
  10. data/app/assets/javascripts/workarea/storefront/paypal/modules/paypal_hosted_fields.js +96 -0
  11. data/app/assets/javascripts/workarea/storefront/paypal/modules/update_checkout_submit_text.js +11 -5
  12. data/app/assets/javascripts/workarea/storefront/paypal/templates/paypal_fields.jst.ejs +43 -0
  13. data/app/controllers/workarea/storefront/checkout/place_order_controller.decorator +6 -4
  14. data/app/controllers/workarea/storefront/paypal_controller.rb +32 -26
  15. data/app/helpers/workarea/storefront/paypal_helper.rb +38 -0
  16. data/app/models/workarea/payment.decorator +17 -3
  17. data/app/models/workarea/payment/authorize/paypal.rb +13 -13
  18. data/app/models/workarea/payment/capture/paypal.rb +10 -20
  19. data/app/models/workarea/payment/null_address.rb +37 -0
  20. data/app/models/workarea/payment/purchase/paypal.rb +1 -25
  21. data/app/models/workarea/payment/refund/paypal.rb +3 -6
  22. data/app/models/workarea/payment/tender/paypal.rb +14 -2
  23. data/app/services/workarea/paypal/approve_order.rb +104 -0
  24. data/app/services/workarea/paypal/create_order.rb +177 -0
  25. data/app/services/workarea/paypal/update_order.rb +44 -0
  26. data/app/views/workarea/admin/orders/tenders/_paypal.html.haml +5 -2
  27. data/app/views/workarea/api/orders/tenders/_paypal.json.jbuilder +7 -1
  28. data/app/views/workarea/storefront/carts/_paypal_checkout.html.haml +6 -1
  29. data/app/views/workarea/storefront/checkouts/_paypal_payment.html.haml +17 -6
  30. data/app/views/workarea/storefront/order_mailer/tenders/_paypal.html.haml +5 -3
  31. data/app/views/workarea/storefront/orders/tenders/_paypal.html.haml +9 -2
  32. data/app/views/workarea/storefront/paypal/_paypal_sdk.html.haml +1 -0
  33. data/app/workers/workarea/paypal/handle_webhook_event.rb +64 -0
  34. data/config/initializers/append_points.rb +17 -5
  35. data/config/initializers/fields.rb +27 -0
  36. data/config/initializers/workarea.rb +41 -5
  37. data/config/locales/en.yml +15 -5
  38. data/config/routes.rb +5 -2
  39. data/lib/tasks/workarea/create_webhooks.rake +29 -0
  40. data/lib/workarea/paypal.rb +22 -18
  41. data/lib/workarea/paypal/engine.rb +4 -0
  42. data/lib/workarea/paypal/gateway.rb +200 -0
  43. data/lib/workarea/paypal/requests/create_webhook.rb +21 -0
  44. data/lib/workarea/paypal/requests/delete_webhook.rb +17 -0
  45. data/lib/workarea/paypal/requests/generate_token.rb +21 -0
  46. data/lib/workarea/paypal/requests/list_webhooks.rb +17 -0
  47. data/lib/workarea/paypal/version.rb +1 -1
  48. data/package.json +9 -0
  49. data/test/dummy/config/initializers/workarea.rb +1 -1
  50. data/test/factories/workarea/capture_completed_webhook.json +70 -0
  51. data/test/factories/workarea/capture_denied_webhook.json +68 -0
  52. data/test/factories/workarea/paypal.rb +34 -0
  53. data/test/helpers/workarea/storefront/paypal_helper_test.rb +35 -0
  54. data/test/integration/workarea/storefront/paypal_integration_test.rb +104 -294
  55. data/test/integration/workarea/storefront/paypal_place_order_integration_test.rb +42 -0
  56. data/test/lib/workarea/paypal/gateway_test.rb +236 -0
  57. data/test/models/workarea/payment/authorize/paypal_test.rb +57 -46
  58. data/test/models/workarea/payment/capture/paypal_test.rb +9 -51
  59. data/test/models/workarea/payment/null_address_test.rb +53 -0
  60. data/test/models/workarea/payment/refund/paypal_test.rb +39 -38
  61. data/test/models/workarea/paypal_payment_test.rb +65 -0
  62. data/test/models/workarea/search/paypal_order_text_test.rb +14 -0
  63. data/test/services/workarea/paypal/approve_order_test.rb +35 -0
  64. data/test/services/workarea/paypal/create_order_test.rb +127 -0
  65. data/test/services/workarea/paypal/update_order_test.rb +73 -0
  66. data/test/support/workarea/paypal_setup.rb +49 -0
  67. data/test/system/workarea/storefront/cart_system_test.decorator +1 -1
  68. data/test/system/workarea/storefront/logged_in_checkout_system_test.decorator +1 -1
  69. data/test/vcr_cassettes/paypal_approve_order.yml +106 -0
  70. data/test/vcr_cassettes/paypal_create_order.yml +110 -0
  71. data/test/vcr_cassettes/paypal_gateway_create_order.yml +105 -0
  72. data/test/vcr_cassettes/paypal_gateway_generate_token.yml +103 -0
  73. data/test/vcr_cassettes/paypal_gateway_get_order.yml +103 -0
  74. data/test/vcr_cassettes/paypal_gateway_update_order.yml +199 -0
  75. data/test/vcr_cassettes/paypal_gateway_webhooks.yml +403 -0
  76. data/test/vcr_cassettes/paypal_update_order.yml +204 -0
  77. data/test/workers/workarea/paypal/handle_webhook_event_test.rb +60 -0
  78. data/workarea-paypal.gemspec +2 -1
  79. metadata +64 -13
  80. data/app/services/workarea/paypal/setup.rb +0 -114
  81. data/app/services/workarea/paypal/update.rb +0 -69
  82. data/app/views/workarea/storefront/checkouts/_paypal_error.html.haml +0 -6
  83. data/app/views/workarea/storefront/order_mailer/tenders/_paypal.text.haml +0 -2
  84. data/test/dummy/config/initializers/session_store.rb +0 -3
  85. data/test/integration/workarea/storefront/place_order_integration_test.decorator +0 -11
  86. data/test/models/workarea/payment/purchase/paypal_test.rb +0 -94
  87. data/test/models/workarea/payment_test.decorator +0 -34
  88. data/test/models/workarea/search/admin/order_test.decorator +0 -32
  89. data/test/services/workarea/paypal/setup_test.rb +0 -120
  90. data/test/services/workarea/paypal/update_test.rb +0 -221
@@ -1,69 +0,0 @@
1
- module Workarea
2
- module Paypal
3
- class Update
4
- attr_reader :order, :payment, :shipping, :token
5
-
6
- def initialize(order, payment, shipping, token)
7
- @order = order
8
- @payment = payment
9
- @shipping = shipping
10
- @token = token
11
- end
12
-
13
- def details
14
- @details ||= Workarea::Paypal.gateway.details_for(token)
15
- end
16
-
17
- def apply
18
- order.email ||= details.email
19
- set_shipping_address(details.params)
20
- set_shipping_service
21
- set_billing_address(details.params)
22
-
23
- payment.clear_credit_card
24
- payment.set_paypal(
25
- token: details.token,
26
- payer_id: details.payer_id,
27
- details: details.params
28
- )
29
-
30
- Pricing.perform(order, shipping)
31
- payment.adjust_tender_amounts(order.total_price)
32
- end
33
-
34
- private
35
-
36
- def set_shipping_address(params)
37
- shipping.set_address(
38
- first_name: params['first_name'],
39
- last_name: params['last_name'],
40
- street: params['PaymentDetails']['ShipToAddress']['Street1'],
41
- street_2: params['PaymentDetails']['ShipToAddress']['Street2'],
42
- city: params['PaymentDetails']['ShipToAddress']['CityName'],
43
- region: params['PaymentDetails']['ShipToAddress']['StateOrProvince'],
44
- postal_code: params['PaymentDetails']['ShipToAddress']['PostalCode'],
45
- country: params['PaymentDetails']['ShipToAddress']['Country'],
46
- phone_number: params['PaymentDetails']['ShipToAddress']['Phone']
47
- )
48
- end
49
-
50
- def set_billing_address(params)
51
- payment.set_address(
52
- first_name: params['PayerInfo']['PayerName']['FirstName'],
53
- last_name: params['PayerInfo']['PayerName']['LastName'],
54
- street: params['PayerInfo']['Address']['Street1'],
55
- street_2: params['PayerInfo']['Address']['Street2'],
56
- city: params['PayerInfo']['Address']['CityName'],
57
- region: params['PayerInfo']['Address']['StateOrProvince'],
58
- postal_code: params['PayerInfo']['Address']['PostalCode'],
59
- country: params['PayerInfo']['Address']['Country'],
60
- phone_number: params['PayerInfo']['Address']['Phone']
61
- )
62
- end
63
-
64
- def set_shipping_service
65
- Checkout::Steps::Shipping.new(self).update({})
66
- end
67
- end
68
- end
69
- end
@@ -1,6 +0,0 @@
1
- - if step.paypal? && step.payment.paypal.errors.any?
2
- - step.payment.paypal.errors.full_messages.each do |message|
3
- .message.message--error
4
- %p.message__type
5
- %span.message__icon= t('workarea.storefront.messages.error')
6
- %p.message__text= message
@@ -1,2 +0,0 @@
1
- = t('workarea.storefront.paypal.paid_with_paypal')
2
- = number_to_currency tender.amount
@@ -1,3 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- Rails.application.config.session_store :cookie_store, key: '_dummy_session', expire_after: 30.minutes
@@ -1,11 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Workarea
4
- decorate Storefront::PlaceOrderIntegrationTest, with: :paypal do
5
- def test_place_order_redirects_to_paypal
6
- patch storefront.checkout_place_order_path, params: { payment: 'paypal' }
7
-
8
- assert_redirected_to(storefront.start_paypal_path)
9
- end
10
- end
11
- end
@@ -1,94 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Workarea
4
- class Payment
5
- module Purchase
6
- class PaypalTest < Workarea::TestCase
7
- delegate :gateway, to: Workarea::Paypal
8
-
9
- def payment
10
- @payment ||= create_payment
11
- end
12
-
13
- def authorization
14
- @authorization ||= ActiveMerchant::Billing::BogusGateway::AUTHORIZATION
15
- end
16
-
17
- def tender
18
- @tender ||=
19
- begin
20
- payment.set_address(first_name: 'Ben', last_name: 'Crouse')
21
- payment.build_paypal(token: '1234', payer_id: 'pid')
22
- payment.paypal
23
- end
24
- end
25
-
26
- def transaction
27
- @transaction ||= tender.transactions.build(
28
- action: 'purchase',
29
- amount: 5.to_m
30
- )
31
- end
32
-
33
- def test_complete_purchases_on_the_gateway
34
- operation = Paypal.new(tender, transaction)
35
-
36
- gateway.expects(:purchase)
37
-
38
- operation.complete!
39
- end
40
-
41
- def test_complete_sets_the_response_on_the_transaction
42
- operation = Paypal.new(tender, transaction)
43
- operation.complete!
44
-
45
- assert_instance_of(
46
- ActiveMerchant::Billing::Response,
47
- transaction.response
48
- )
49
- end
50
-
51
- def test_cancel_does_nothing_if_the_transaction_was_a_failure
52
- transaction.success = false
53
- operation = Paypal.new(tender, transaction)
54
-
55
- operation.gateway.expects(:void).never
56
- operation.cancel!
57
- end
58
-
59
- def test_cancel_voids_with_the_authorization_from_the_transaction
60
- transaction.response = ActiveMerchant::Billing::Response.new(
61
- true,
62
- 'Message',
63
- 'transaction_id' => authorization
64
- )
65
-
66
- operation = Paypal.new(tender, transaction)
67
-
68
- operation
69
- .gateway
70
- .expects(:void)
71
- .with(authorization)
72
-
73
- operation.cancel!
74
- end
75
-
76
- def test_cancel_sets_cancellation_params_on_the_transaction
77
- transaction.response = ActiveMerchant::Billing::Response.new(
78
- true,
79
- 'Message',
80
- 'transaction_id' => authorization
81
- )
82
-
83
- operation = Paypal.new(tender, transaction)
84
- operation.cancel!
85
-
86
- assert_instance_of(
87
- ActiveMerchant::Billing::Response,
88
- transaction.cancellation
89
- )
90
- end
91
- end
92
- end
93
- end
94
- end
@@ -1,34 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Workarea
4
- decorate PaymentTest, with: :paypal do
5
- def test_set_paypal_creates_paypal_tender
6
- payment.set_paypal(
7
- token: 'token',
8
- payer_id: 'payer_id',
9
- details: { 'foo' => 'bar' }
10
- )
11
-
12
- assert_equal('token', payment.paypal.token)
13
- assert_equal('payer_id', payment.paypal.payer_id)
14
- assert_equal({ 'foo' => 'bar' }, payment.paypal.details)
15
- end
16
-
17
- def test_set_credit_card_removes_paypal_tender
18
- payment.set_paypal(
19
- token: 'token',
20
- payer_id: 'payer_id',
21
- details: { 'foo' => 'bar' }
22
- )
23
-
24
- payment.set_credit_card({})
25
- assert(payment.paypal.blank?)
26
- end
27
-
28
- private
29
-
30
- def payment
31
- @payment ||= Payment.create!
32
- end
33
- end
34
- end
@@ -1,32 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Workarea
4
- decorate Search::Admin::OrderTest, with: :paypal do
5
- def test_search_text_includes_paypal
6
- order = Workarea::Order.new(created_at: Time.now)
7
-
8
- Payment.create!(
9
- id: order.id,
10
- address: {
11
- first_name: 'Ben',
12
- last_name: 'Crouse',
13
- street: '22 S. 3rd St.',
14
- city: 'Philadelphia',
15
- region: 'PA',
16
- postal_code: '19106',
17
- country: 'US',
18
- phone_number: '2159251800'
19
- },
20
- paypal: {
21
- token: '1234',
22
- payer_id: '1234',
23
- details: {}
24
- }
25
- )
26
-
27
- result = Search::Admin::Order.new(order).search_text
28
-
29
- assert_includes(result, 'PayPal')
30
- end
31
- end
32
- end
@@ -1,120 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Workarea
4
- class Paypal::SetupTest < Workarea::TestCase
5
- delegate :gateway, to: Workarea::Paypal
6
-
7
- def context
8
- @context ||= stub_everything(request: stub_everything)
9
- end
10
-
11
- def user
12
- @user ||= User.new
13
- end
14
-
15
- def address
16
- @address ||= Address.new(
17
- first_name: 'Ben',
18
- last_name: 'Crouse',
19
- street: '22 S. 3rd St.',
20
- city: 'Philadelphia',
21
- region: 'PA',
22
- country: 'US',
23
- postal_code: '19106',
24
- phone_number: '2159251800'
25
- )
26
- end
27
-
28
- def shipping
29
- @shipping ||= Shipping.new(address: address)
30
- end
31
-
32
- def order
33
- @order ||= create_order.tap do |order|
34
- product = create_product(
35
- variants: [{ sku: 'SKU1', regular: 5.to_m }]
36
- )
37
-
38
- create_order_total_discount(
39
- name: 'Test Order Discount',
40
- amount_type: :flat,
41
- amount: 3
42
- )
43
- order.add_item(
44
- product_id: product.id,
45
- sku: product.skus.first,
46
- quantity: 2
47
- )
48
- Pricing.perform(order)
49
- order.save!
50
- end
51
- end
52
-
53
- def setup
54
- @setup ||= Paypal::Setup.new(order, user, shipping, context)
55
- end
56
-
57
- def test_paypal_response_asks_the_paypal_gateway_to_setup_the_auth
58
- response = mock
59
-
60
- gateway
61
- .expects(:setup_authorization)
62
- .returns(response)
63
-
64
- assert_equal(response, setup.paypal_response)
65
- end
66
-
67
- def test_items_includes_order_items_and_discounts
68
- assert_equal([
69
- { name: nil, quantity: 2, amount: 650 },
70
- { name: 'Test Order Discount', quantity: 1, amount: -300 },
71
- { name: 'Test Order Discount', quantity: 1, amount: -300 }
72
- ], setup.items)
73
-
74
- assert_equal(700, setup.subtotal)
75
- end
76
-
77
- def test_shpping_address_uses_order_shipping_address_when_order_has_shipping_address
78
- assert_equal(
79
- {
80
- name: 'Ben Crouse',
81
- address1: '22 S. 3rd St.',
82
- address2: nil,
83
- city: 'Philadelphia',
84
- state: 'PA',
85
- country: Country['US'],
86
- zip: '19106',
87
- phone: '2159251800'
88
- },
89
- setup.shipping_address
90
- )
91
- end
92
-
93
- def test_shipping_address_uses_the_users_default_shipping_address_when_no_shipping_address
94
- shipping.update_attributes!(address: nil)
95
- user.expects(:default_shipping_address).returns(address)
96
-
97
- assert_equal(
98
- {
99
- name: 'Ben Crouse',
100
- address1: '22 S. 3rd St.',
101
- address2: nil,
102
- city: 'Philadelphia',
103
- state: 'PA',
104
- country: Country['US'],
105
- zip: '19106',
106
- phone: '2159251800'
107
- },
108
- setup.shipping_address
109
- )
110
- end
111
-
112
- def test_redirect_url_asks_the_paypal_gateway_for_the_redirect_url
113
- url = 'http://paypal.com'
114
- setup.expects(:paypal_response).returns(mock(token: '1243'))
115
- gateway.expects(:redirect_url_for).with('1243').returns(url)
116
-
117
- assert_equal(url, setup.redirect_url)
118
- end
119
- end
120
- end
@@ -1,221 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Workarea
4
- class Paypal::UpdateTest < Workarea::TestCase
5
- def details
6
- @details ||= stub(
7
- email: 'bcrouse@workarea.com',
8
- token: 'EC-3LX76108SH791964A',
9
- payer_id: 'MDJZZYJ9SZJ52',
10
- params: {
11
- 'timestamp' => '2012-02-16T15:22:17Z',
12
- 'ack' => 'Success',
13
- 'correlation_id' => 'e5e29daee048a',
14
- 'version' => '62.0',
15
- 'build' => '2571254',
16
- 'token' => 'EC-3LX76108SH791964A',
17
- 'payer' => 'bcrouse@workarea.com',
18
- 'payer_id' => 'MDJZZYJ9SZJ52',
19
- 'payer_status' => 'verified',
20
- 'salutation' => nil,
21
- 'first_name' => 'Test',
22
- 'middle_name' => nil,
23
- 'last_name' => 'User',
24
- 'suffix' => nil,
25
- 'payer_country' => 'US',
26
- 'payer_business' => nil,
27
- 'name' => 'Test Product 866',
28
- 'street1' => '1 Main St',
29
- 'street2' => nil,
30
- 'city_name' => 'San Jose',
31
- 'state_or_province' => 'CA',
32
- 'country' => 'US',
33
- 'country_name' => 'United States',
34
- 'postal_code' => '95131',
35
- 'address_owner' => 'PayPal',
36
- 'address_status' => 'Confirmed',
37
- 'order_total' => '98.00',
38
- 'order_total_currency_id' => 'USD',
39
- 'item_total' => '98.00',
40
- 'item_total_currency_id' => 'USD',
41
- 'shipping_total' => '0.00',
42
- 'shipping_total_currency_id' => 'USD',
43
- 'handling_total' => '0.00',
44
- 'handling_total_currency_id' => 'USD',
45
- 'tax_total' => '0.00',
46
- 'tax_total_currency_id' => 'USD',
47
- 'phone' => nil,
48
- 'address_id' => nil,
49
- 'external_address_id' => nil,
50
- 'quantity' => '2',
51
- 'tax' => '0.00',
52
- 'tax_currency_id' => 'USD',
53
- 'amount' => '49.00',
54
- 'amount_currency_id' => 'USD',
55
- 'ebay_item_payment_details_item' => nil,
56
- 'insurance_total' => '0.00',
57
- 'insurance_total_currency_id' => 'USD',
58
- 'shipping_discount' => '0.00',
59
- 'shipping_discount_currency_id' => 'USD',
60
- 'insurance_option_offered' => 'false',
61
- 'seller_details' => nil,
62
- 'payment_request_id' => nil,
63
- 'order_url' => nil,
64
- 'soft_descriptor' => nil,
65
- 'checkout_status' => 'PaymentActionNotInitiated',
66
- 'Token' => 'EC-3LX76108SH791964A',
67
- 'PayerInfo' => {
68
- 'Payer' => 'bcrouse@workarea.com',
69
- 'PayerID' => 'MDJZZYJ9SZJ52',
70
- 'PayerStatus' => 'verified',
71
- 'PayerName' => {
72
- 'Salutation' => nil,
73
- 'FirstName' => 'Test',
74
- 'MiddleName' => nil,
75
- 'LastName' => 'User',
76
- 'Suffix' => nil
77
- },
78
- 'PayerCountry' => 'US',
79
- 'PayerBusiness' => nil,
80
- 'Address' => {
81
- 'Name' => 'Test User',
82
- 'Street1' => '1 Main St',
83
- 'Street2' => nil,
84
- 'CityName' => 'San Jose',
85
- 'StateOrProvince' => 'CA',
86
- 'Country' => 'US',
87
- 'CountryName' => 'United States',
88
- 'PostalCode' => '95131',
89
- 'AddressOwner' => 'PayPal',
90
- 'AddressStatus' => 'Confirmed'
91
- }
92
- },
93
- 'PaymentDetails' => {
94
- 'OrderTotal' => '98.00',
95
- 'ItemTotal' => '98.00',
96
- 'ShippingTotal' => '0.00',
97
- 'HandlingTotal' => '0.00',
98
- 'TaxTotal' => '0.00',
99
- 'ShipToAddress' => {
100
- 'Name' => 'Test User',
101
- 'Street1' => '1 Main St',
102
- 'Street2' => nil,
103
- 'CityName' => 'San Jose',
104
- 'StateOrProvince' => 'CA',
105
- 'Country' => 'US',
106
- 'CountryName' => 'United States',
107
- 'Phone' => '610-867-5309',
108
- 'PostalCode' => '95131',
109
- 'AddressID' => nil,
110
- 'AddressOwner' => 'PayPal',
111
- 'ExternalAddressID' => nil,
112
- 'AddressStatus' => 'Confirmed'
113
- },
114
- 'PaymentDetailsItem' => {
115
- 'Name' => 'Test Product 866',
116
- 'Quantity' => '2',
117
- 'Tax' => '0.00',
118
- 'Amount' => '49.00',
119
- 'EbayItemPaymentDetailsItem' => nil
120
- },
121
- 'InsuranceTotal' => '0.00',
122
- 'ShippingDiscount' => '0.00',
123
- 'InsuranceOptionOffered' => 'false',
124
- 'SellerDetails' => nil,
125
- 'PaymentRequestID' => nil,
126
- 'OrderURL' => nil,
127
- 'SoftDescriptor' => nil
128
- },
129
- 'CheckoutStatus' => 'PaymentActionNotInitiated'
130
- }
131
- )
132
- end
133
-
134
- def token
135
- '1234'
136
- end
137
-
138
- def order
139
- @order ||= create_order.tap do |order|
140
- product = create_product
141
- order.add_item(product_id: product.id, sku: product.skus.first)
142
- Pricing.perform(order)
143
- end
144
- end
145
-
146
- def shipping
147
- @shipping ||= Shipping.new
148
- end
149
-
150
- def payment
151
- @payment ||= Payment.new
152
- end
153
-
154
- def update
155
- @update ||= Paypal::Update.new(order, payment, shipping, token)
156
- end
157
-
158
- setup :create_shipping_service
159
- setup { Paypal.gateway.stubs(:details_for).returns(details) }
160
- setup { update.apply }
161
-
162
- def test_when_order_has_no_email_sets_order_email
163
- assert_equal('bcrouse@workarea.com', order.email)
164
- end
165
-
166
- def test_when_order_has_an_email_does_not_update_the_order_email
167
- order.email = 'orderemail@workarea.com'
168
- assert_equal('orderemail@workarea.com', order.email)
169
- end
170
-
171
- def test_sets_order_shipping_address
172
- assert_equal('Test', shipping.address.first_name)
173
- assert_equal('User', shipping.address.last_name)
174
- assert_equal('1 Main St', shipping.address.street)
175
- assert_equal('San Jose', shipping.address.city)
176
- assert_equal('CA', shipping.address.region)
177
- assert_equal(Country['US'], shipping.address.country)
178
- assert_equal('95131', shipping.address.postal_code)
179
- end
180
-
181
- def test_sets_order_shipping_method
182
- refute_nil(shipping.shipping_service)
183
- end
184
-
185
- def test_sets_payment_address
186
- assert_equal('Test', payment.address.first_name)
187
- assert_equal('User', payment.address.last_name)
188
- assert_equal('1 Main St', payment.address.street)
189
- assert_equal('San Jose', payment.address.city)
190
- assert_equal('CA', payment.address.region)
191
- assert_equal(Country['US'], payment.address.country)
192
- assert_equal('95131', payment.address.postal_code)
193
- end
194
-
195
- def test_sets_a_paypal_payment
196
- assert(payment.paypal?)
197
- assert_equal('EC-3LX76108SH791964A', payment.paypal.token)
198
- assert_equal('MDJZZYJ9SZJ52', payment.paypal.payer_id)
199
- end
200
-
201
- def test_clears_existing_credit_card_payment_methods
202
- payment.set_credit_card(
203
- number: '4111111111111111',
204
- month: 1,
205
- year: Time.now.year - 1,
206
- cvv: '123',
207
- amount: 1.to_m
208
- )
209
-
210
- update.apply
211
- assert(payment.paypal?)
212
- assert_nil(payment.credit_card)
213
- end
214
-
215
- def test_includes_shipping_when_pricing_order
216
- assert_equal(1.to_m, order.shipping_total, 'shipping')
217
- assert_equal(5.to_m, order.subtotal_price, 'subtotal')
218
- assert_equal(6.to_m, order.total_price, 'order total')
219
- end
220
- end
221
- end