Skip to content

Commit

Permalink
Worldpay: Update where to pass shopperIPAddress
Browse files Browse the repository at this point in the history
For NetworkTokens shopperIPAddress should be passed after the
stored credentials fields. And for Fast Access transactions
shopperIPAddress should be passed within paymentDetails

Remote
117 tests, 498 assertions, 2 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
98.2906% passed

Unit
134 tests, 743 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
  • Loading branch information
Alma Malambo committed Dec 4, 2024
1 parent bd5245f commit 925404b
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 27 deletions.
1 change: 1 addition & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@
* Nuvei: Fix send savePM in false by default [javierpedrozaing] #5353
* Decidir and DecicirPlus: Add the wallet_id field [yunnydang] #5354
* Worldpay: Idempotency key fix [jherreraa] #5343
* Worldpay: Update where to pass shopperIPAddress [almalee24] #5348

== Version 1.137.0 (August 2, 2024)
* Unlock dependency on `rexml` to allow fixing a CVE (#5181).
Expand Down
10 changes: 8 additions & 2 deletions lib/active_merchant/billing/gateways/worldpay.rb
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,12 @@ def build_fast_fund_credit_request(money, payment_method, options)
add_amount(xml, money, options)
add_order_content(xml, options)
add_payment_details_for_ff_credit(xml, payment_method, options)
add_shopper_id(xml, options)

if options[:email]
xml.shopper do
xml.shopperEmailAddress options[:email]
end
end
end
end
end
Expand Down Expand Up @@ -477,6 +482,7 @@ def add_payment_details_for_ff_credit(xml, payment_method, options)
add_token_for_ff_credit(xml, payment_method, options)
end
end
add_shopper_id(xml, options)
end
end

Expand Down Expand Up @@ -670,8 +676,8 @@ def add_network_tokenization_card(xml, payment_method, options)
eci = eci_value(payment_method, options)
xml.eciIndicator eci if eci.present?
end
add_shopper_id(xml, options, false)
add_stored_credential_options(xml, options)
add_shopper_id(xml, options, false)
end
end

Expand Down
48 changes: 23 additions & 25 deletions test/remote/gateways/remote_worldpay_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ def setup

@options = {
order_id: generate_unique_id,
email: '[email protected]'
email: '[email protected]',
ip: '127.0.0.1'
}

@level_two_data = {
Expand Down Expand Up @@ -1037,35 +1038,32 @@ def test_failed_visa_account_funding_transfer_acquirer_error
assert_equal '20', credit.error_code
end

# These three fast_fund_credit tests are currently failing with the message: Disbursement transaction not supported
# It seems that the current sandbox setup does not support testing this.

# def test_successful_fast_fund_credit_on_cft_gateway
# options = @options.merge({ fast_fund_credit: true })
def test_successful_fast_fund_credit_on_cft_gateway
options = @options.merge({ fast_fund_credit: true })

# credit = @cftgateway.credit(@amount, @credit_card, options)
# assert_success credit
# assert_equal 'SUCCESS', credit.message
# end
credit = @cftgateway.credit(@amount, @credit_card, options)
assert_success credit
assert_equal 'SUCCESS', credit.message
end

# def test_successful_fast_fund_credit_with_token_on_cft_gateway
# assert store = @gateway.store(@credit_card, @store_options)
# assert_success store
def test_successful_fast_fund_credit_with_token_on_cft_gateway
assert store = @gateway.store(@credit_card, @store_options)
assert_success store

# options = @options.merge({ fast_fund_credit: true })
# assert credit = @cftgateway.credit(@amount, store.authorization, options)
# assert_success credit
# end
options = @options.merge({ fast_fund_credit: true })
assert credit = @cftgateway.credit(@amount, store.authorization, options)
assert_success credit
end

# def test_failed_fast_fund_credit_on_cft_gateway
# options = @options.merge({ fast_fund_credit: true })
# refused_card = credit_card('4444333322221111', name: 'REFUSED') # 'magic' value for testing failures, provided by Worldpay
def test_failed_fast_fund_credit_on_cft_gateway
options = @options.merge({ fast_fund_credit: true })
refused_card = credit_card('4444333322221111', name: 'REFUSED') # 'magic' value for testing failures, provided by Worldpay

# credit = @cftgateway.credit(@amount, refused_card, options)
# assert_failure credit
# assert_equal '01', credit.params['action_code']
# assert_equal "A transaction status of 'ok' or 'PUSH_APPROVED' is required.", credit.message
# end
credit = @cftgateway.credit(@amount, refused_card, options)
assert_failure credit
assert_equal '01', credit.params['action_code']
assert_equal "A transaction status of 'ok' or 'PUSH_APPROVED' is required.", credit.message
end

def test_transcript_scrubbing
transcript = capture_transcript(@gateway) do
Expand Down
11 changes: 11 additions & 0 deletions test/unit/gateways/worldpay_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -844,6 +844,17 @@ def test_capture_using_order_id_embedded_with_token
assert_success response
end

def test_successful_fast_fund_credit
options = @options.merge({ fast_fund_credit: true, email: '[email protected]' })

stub_comms do
@gateway.credit(@amount, @credit_card, options)
end.check_request do |_endpoint, data, _headers|
assert_match(/<FF_DISBURSE-SSL>/, data)
assert_match(/<shopperEmailAddress>/, data)
end.respond_with(successful_visa_credit_response)
end

def test_successful_visa_credit
response = stub_comms do
@gateway.credit(@amount, @credit_card, @options)
Expand Down

0 comments on commit 925404b

Please sign in to comment.