magento / magento2

Prior to making any Submission(s), you must sign an Adobe Contributor License Agreement, available here at: https://opensource.adobe.com/cla.html. All Submissions you make to Adobe Inc. and its affiliates, assigns and subsidiaries (collectively “Adobe”) are subject to the terms of the Adobe Contributor License Agreement.
http://www.magento.com
Open Software License 3.0
11.52k stars 9.31k forks source link

[Issue] Moving array access for CAPTCHA _.isEmpty check #31641

Closed m2-assistant[bot] closed 3 years ago

m2-assistant[bot] commented 3 years ago

This issue is automatically created based on existing pull request: magento/magento2#31636: Moving array access for CAPTCHA _.isEmpty check


When upgrading to 2.3.6 from 2.3.5-p2, a new CAPTCHA zone "payment_processing_request" is added.

If a customer has an existing session (from 2.3.5-p2 or prior), and tries to access checkout with their existing session data, checkout will fail to load because the check to see if captchaData[formId] exists is not a valid function call. _.isEmpty() only returns a boolean value, so it cannot be enumerated like an array. Array access syntax has been moved in to the check, rather than outside it.

Description (*)

This change allows a _.isEmpty() check in the defaultCaptcha.js file to complete successfully, resolving issues with the checkout failing to load or infinitely loading after upgrading.

Related Pull Requests

N/A

Fixed Issues (if relevant)

N/A - no reported issue for this yet?

Manual testing scenarios (*)

  1. Create an instance prior to 2.3.6 (eg: 2.3.5-p2)
  2. Load the /checkout route in a valid way (eg: add to basket, create an account, click "go to checkout")
  3. Observe the captcha key of the mage-cache-storage local storage key. There should not be an entry for payment_processing_request
  4. Upgrade to 2.3.6 or another version that does include the fix introduced via MC-36200
  5. Load the /checkout route with the same session as before
  6. Observe an infinite load on the checkout page and errors in the console along the lines of:
defaultCaptcha.js:60 Uncaught TypeError: Cannot read property 'timestamp' of undefined
    at UiClass.checkCustomerData (defaultCaptcha.js:60)
    at UiClass.<anonymous> (defaultCaptcha.js:43)
    at Function.each (jquery.js:382)
    at UiClass.initialize (defaultCaptcha.js:38)
    at UiClass.initialize (wrapper.js:109)
    at UiClass._super (wrapper.js:106)
    at UiClass.initialize (loginCaptcha.js:21)
    at UiClass.initialize (wrapper.js:109)
    at new UiClass (class.js:49)
    at Object.initComponent (layout.js:137)
  1. Apply patch
  2. Attempt to load /checkout again
  3. Observe checkout loads as expected

Questions or comments

I'm not sure if an issue is needed for this PR, but happy to make one if one is needed. This will also need to be backported to 2.3.6.

Contribution checklist (*)

m2-assistant[bot] commented 3 years ago

Hi @engcom-Delta. Thank you for working on this issue. In order to make sure that issue has enough information and ready for development, please read and check the following instruction: :point_down:

magento-engcom-team commented 3 years ago

:white_check_mark: Confirmed by @engcom-Delta Thank you for verifying the issue. Based on the provided information internal tickets MC-40622 were created

Issue Available: @engcom-Delta, You will be automatically unassigned. Contributors/Maintainers can claim this issue to continue. To reclaim and continue work, reassign the ticket to yourself.