VYPR
Critical severityNVD Advisory· Published Jun 26, 2020· Updated Aug 4, 2024

CVE-2020-9578

CVE-2020-9578

Description

Magento versions 2.3.4 and earlier, 2.2.11 and earlier (see note), 1.14.4.4 and earlier, and 1.9.4.4 and earlier have a command injection vulnerability. Successful exploitation could lead to arbitrary code execution.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
magento/community-editionPackagist
<= 2.2.11
magento/community-editionPackagist
>= 2.3.0, < 2.3.4-p22.3.4-p2
magento/corePackagist
< 1.9.4.51.9.4.5
magento/project-community-editionPackagist
<= 2.0.2

Affected products

1
  • Range: 2.3.4 and earlier, 2.2.11 and earlier (see note), 1.14.4.4 and earlier, and 1.9.4.4 and earlier versions

Patches

1
52d92dbd07f0

MC-33481: Magento 2.3.4-p2 Publication

https://github.com/magento/magento2mage2-teamApr 28, 2020via ghsa
300 files changed · +2377 1349
  • app/code/Magento/AdminAnalytics/composer.json+13 13 modified
    @@ -6,24 +6,24 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-config": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-release-notification": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-ui": "101.1.*",
    +        "magento/module-release-notification": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
         "autoload": {
    -          "files": [
    -              "registration.php"
    -          ],
    -          "psr-4": {
    -              "Magento\\AdminAnalytics\\": ""
    -          }
    -    }
    +        "files": [
    +            "registration.php"
    +        ],
    +        "psr-4": {
    +            "Magento\\AdminAnalytics\\": ""
    +        }
    +    },
    +    "version": "100.3.1-p2"
     }
    -
    
  • app/code/Magento/AdminNotification/composer.json+8 7 modified
    @@ -7,12 +7,12 @@
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
             "lib-libxml": "*",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-config": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-media-storage": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-ui": "101.1.*",
    +        "magento/module-config": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -26,5 +26,6 @@
             "psr-4": {
                 "Magento\\AdminNotification\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/AdvancedPricingImportExport/composer.json+10 9 modified
    @@ -6,14 +6,14 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-import-export": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-import-export": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-import-export": "101.0.*",
    +        "magento/module-catalog-inventory": "100.3.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-import-export": "100.3.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -27,5 +27,6 @@
             "psr-4": {
                 "Magento\\AdvancedPricingImportExport\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/AdvancedSearch/composer.json+10 9 modified
    @@ -5,14 +5,14 @@
             "sort-packages": true
         },
         "require": {
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-search": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-search": "*",
    -        "magento/module-store": "*",
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-search": "101.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-search": "101.0.*",
    +        "magento/module-store": "101.0.*",
             "php": "~7.1.3||~7.2.0||~7.3.0"
         },
         "type": "magento2-module",
    @@ -27,5 +27,6 @@
             "psr-4": {
                 "Magento\\AdvancedSearch\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/Amqp/composer.json+5 4 modified
    @@ -5,9 +5,9 @@
             "sort-packages": true
         },
         "require": {
    -        "magento/framework": "*",
    -        "magento/framework-amqp": "*",
    -        "magento/framework-message-queue": "*",
    +        "magento/framework": "102.0.*",
    +        "magento/framework-amqp": "100.3.*",
    +        "magento/framework-message-queue": "100.3.*",
             "php": "~7.1.3||~7.2.0||~7.3.0"
         },
         "type": "magento2-module",
    @@ -22,5 +22,6 @@
             "psr-4": {
                 "Magento\\Amqp\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/AmqpStore/composer.json+7 6 modified
    @@ -5,14 +5,14 @@
             "sort-packages": true
         },
         "require": {
    -        "magento/framework": "*",
    -        "magento/framework-amqp": "*",
    -        "magento/module-store": "*",
    +        "magento/framework": "102.0.*",
    +        "magento/framework-amqp": "100.3.*",
    +        "magento/module-store": "101.0.*",
             "php": "~7.1.3||~7.2.0||~7.3.0"
         },
         "suggest": {
    -        "magento/module-asynchronous-operations": "*",
    -        "magento/framework-message-queue": "*"
    +        "magento/module-asynchronous-operations": "100.3.*",
    +        "magento/framework-message-queue": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -26,5 +26,6 @@
             "psr-4": {
                 "Magento\\AmqpStore\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.1"
     }
    
  • app/code/Magento/Analytics/composer.json+7 6 modified
    @@ -3,11 +3,11 @@
         "description": "N/A",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/module-backend": "*",
    -        "magento/module-config": "*",
    -        "magento/module-integration": "*",
    -        "magento/module-store": "*",
    -        "magento/framework": "*"
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-integration": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/framework": "102.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -21,5 +21,6 @@
             "psr-4": {
                 "Magento\\Analytics\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/AsynchronousOperations/composer.json+9 8 modified
    @@ -5,16 +5,16 @@
             "sort-packages": true
         },
         "require": {
    -        "magento/framework": "*",
    -        "magento/framework-bulk": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-ui": "*",
    +        "magento/framework": "102.0.*",
    +        "magento/framework-bulk": "100.3.*",
    +        "magento/module-authorization": "100.3.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-ui": "101.1.*",
             "php": "~7.1.3||~7.2.0||~7.3.0"
         },
         "suggest": {
    -        "magento/module-admin-notification": "*",
    -        "magento/module-logging": "*"
    +        "magento/module-admin-notification": "100.3.*",
    +        "magento/module-logging": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -28,5 +28,6 @@
             "psr-4": {
                 "Magento\\AsynchronousOperations\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/Authorization/composer.json+4 3 modified
    @@ -6,8 +6,8 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -21,5 +21,6 @@
             "psr-4": {
                 "Magento\\Authorization\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/AuthorizenetAcceptjs/Block/Form.php+3 3 modified
    @@ -18,8 +18,8 @@
      * Block for representing the payment form
      *
      * @api
    - * @since 100.3.0
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @since 100.2.1
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class Form extends Cc
    @@ -57,7 +57,7 @@ public function __construct(
          * Check if cvv validation is available
          *
          * @return boolean
    -     * @since 100.3.0
    +     * @since 100.2.1
          */
         public function isCvvEnabled(): bool
         {
    
  • app/code/Magento/AuthorizenetAcceptjs/Block/Info.php+3 3 modified
    @@ -15,8 +15,8 @@
      * Translates the labels for the info block
      *
      * @api
    - * @since 100.3.0
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @since 100.2.1
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class Info extends ConfigurableInfo
    @@ -26,7 +26,7 @@ class Info extends ConfigurableInfo
          *
          * @param string $field
          * @return Phrase
    -     * @since 100.3.0
    +     * @since 100.2.1
          */
         protected function getLabel($field): Phrase
         {
    
  • app/code/Magento/AuthorizenetAcceptjs/Block/Payment.php+4 4 modified
    @@ -18,8 +18,8 @@
      * Represents the payment block for the admin checkout form
      *
      * @api
    - * @since 100.3.0
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @since 100.2.1
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class Payment extends Template
    @@ -55,7 +55,7 @@ public function __construct(
          * Retrieves the config that should be used by the block
          *
          * @return string
    -     * @since 100.3.0
    +     * @since 100.2.1
          */
         public function getPaymentConfig(): string
         {
    @@ -70,7 +70,7 @@ public function getPaymentConfig(): string
          * Returns the method code for this payment method
          *
          * @return string
    -     * @since 100.3.0
    +     * @since 100.2.1
          */
         public function getMethodCode(): string
         {
    
  • app/code/Magento/AuthorizenetAcceptjs/composer.json+10 9 modified
    @@ -6,14 +6,14 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-config": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-store": "*",
    -        "magento/module-quote": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-payment": "100.3.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-quote": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -27,5 +27,6 @@
             "psr-4": {
                 "Magento\\AuthorizenetAcceptjs\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.3"
     }
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Command/AcceptPaymentStrategyCommand.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Chooses the best method of accepting the payment based on the status of the transaction
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class AcceptPaymentStrategyCommand implements CommandInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Command/CaptureStrategyCommand.php+1 1 modified
    @@ -21,7 +21,7 @@
     /**
      * Chooses the best method of capture based on the context of the payment
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class CaptureStrategyCommand implements CommandInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Command/FetchTransactionInfoCommand.php+1 1 modified
    @@ -18,7 +18,7 @@
     /**
      * Syncs the transaction status with authorize.net
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class FetchTransactionInfoCommand implements CommandInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Command/GatewayQueryCommand.php+1 1 modified
    @@ -21,7 +21,7 @@
     /**
      * Makes a request to the gateway and returns results
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class GatewayQueryCommand implements CommandInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Command/RefundTransactionStrategyCommand.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Chooses the best method of returning the payment based on the status of the transaction
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class RefundTransactionStrategyCommand implements CommandInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Config.php+1 1 modified
    @@ -14,7 +14,7 @@
     /**
      * Houses configuration for this gateway
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class Config extends \Magento\Payment\Gateway\Config\Config
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Http/Client.php+1 1 modified
    @@ -22,7 +22,7 @@
     /**
      * A client that can communicate with the Authorize.net API
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class Client implements ClientInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Http/Payload/FilterInterface.php+1 1 modified
    @@ -11,7 +11,7 @@
     /**
      * Describes a filter for filtering content after all the builders have finished
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     interface FilterInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Http/Payload/Filter/RemoveFieldsFilter.php+1 1 modified
    @@ -13,7 +13,7 @@
     /**
      * Removes a set of fields from the payload
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class RemoveFieldsFilter implements FilterInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Http/TransferFactory.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Can create a transfer object
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class TransferFactory implements TransferFactoryInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/AcceptFdsDataBuilder.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Adds the meta transaction information to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class AcceptFdsDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/AddressDataBuilder.php+1 1 modified
    @@ -14,7 +14,7 @@
     /**
      * Adds the basic payment information to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class AddressDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/AmountDataBuilder.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Adds the amount of the transaction to the Request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class AmountDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/AuthenticationDataBuilder.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Adds the stored credentials to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class AuthenticationDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/AuthorizeDataBuilder.php+1 1 modified
    @@ -16,7 +16,7 @@
     /**
      * Adds the meta transaction information to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class AuthorizeDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/CaptureDataBuilder.php+1 1 modified
    @@ -16,7 +16,7 @@
     /**
      * Adds the meta transaction information to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class CaptureDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/CustomerDataBuilder.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Adds the basic payment information to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class CustomerDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/CustomSettingsBuilder.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Adds the custom settings to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class CustomSettingsBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/OrderDataBuilder.php+1 1 modified
    @@ -14,7 +14,7 @@
     /**
      * Adds the basic payment information to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class OrderDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/PassthroughDataBuilder.php+1 1 modified
    @@ -14,7 +14,7 @@
     /**
      * Adds data to the request that can be used in the response
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class PassthroughDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/PaymentDataBuilder.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Adds the basic payment information to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class PaymentDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/PoDataBuilder.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Adds the basic payment information to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class PoDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/RefundPaymentDataBuilder.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Adds the basic refund information to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class RefundPaymentDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/RefundReferenceTransactionDataBuilder.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Adds the reference transaction to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class RefundReferenceTransactionDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/RefundTransactionTypeDataBuilder.php+1 1 modified
    @@ -13,7 +13,7 @@
     /**
      * Adds the meta transaction information to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class RefundTransactionTypeDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/RequestTypeBuilder.php+1 1 modified
    @@ -13,7 +13,7 @@
     /**
      * Adds the type of the request to the build subject
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class RequestTypeBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/SaleDataBuilder.php+1 1 modified
    @@ -16,7 +16,7 @@
     /**
      * Adds the meta transaction information to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class SaleDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/ShippingDataBuilder.php+1 1 modified
    @@ -16,7 +16,7 @@
     /**
      * Adds the shipping information to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class ShippingDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/SolutionDataBuilder.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Adds the appropriate solution ID to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class SolutionDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/StoreConfigBuilder.php+1 1 modified
    @@ -13,7 +13,7 @@
     /**
      * This builder is used for correct store resolving and used only to retrieve correct store ID.
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class StoreConfigBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/StubDataBuilder.php+1 1 modified
    @@ -16,7 +16,7 @@
      * Since the order of params is matters for Authorize.net request,
      * this builder is used to reserve a place in builders sequence.
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class StubDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/TransactionDetailsDataBuilder.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Adds the reference transaction to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class TransactionDetailsDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Request/VoidDataBuilder.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Adds the meta transaction information to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class VoidDataBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Response/CloseParentTransactionHandler.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Processes payment information from a void transaction response
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class CloseParentTransactionHandler implements HandlerInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Response/ClosePartialTransactionHandler.php+1 1 modified
    @@ -12,7 +12,7 @@
     /**
      * Determines that parent transaction should be close for partial refund operation.
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class ClosePartialTransactionHandler extends CloseTransactionHandler
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Response/CloseTransactionHandler.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Processes payment information from a void transaction response
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class CloseTransactionHandler implements HandlerInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Response/PaymentResponseHandler.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Processes payment information from a response
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class PaymentResponseHandler implements HandlerInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Response/PaymentReviewStatusHandler.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Processes payment information from a void transaction response
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class PaymentReviewStatusHandler implements HandlerInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Response/TransactionDetailsResponseHandler.php+1 1 modified
    @@ -17,7 +17,7 @@
     /**
      * Adds the details to the transaction that should show when the transaction is viewed in the admin
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class TransactionDetailsResponseHandler implements HandlerInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Response/TransactionIdHandler.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Processes transaction id for the payment
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class TransactionIdHandler implements HandlerInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Response/VoidResponseHandler.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Processes payment information from a void transaction response
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class VoidResponseHandler implements HandlerInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/SubjectReader.php+1 1 modified
    @@ -14,7 +14,7 @@
     /**
      * Helper for extracting information from the payment data structure
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class SubjectReader
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Validator/GeneralResponseValidator.php+1 1 modified
    @@ -16,7 +16,7 @@
     /**
      * Validates that the request was successful
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class GeneralResponseValidator extends AbstractValidator
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Validator/TransactionHashValidator.php+1 1 modified
    @@ -18,7 +18,7 @@
     /**
      * Validates the transaction hash
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class TransactionHashValidator extends AbstractValidator
    
  • app/code/Magento/AuthorizenetAcceptjs/Gateway/Validator/TransactionResponseValidator.php+1 1 modified
    @@ -16,7 +16,7 @@
     /**
      * Validates the status of an attempted transaction
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class TransactionResponseValidator extends AbstractValidator
    
  • app/code/Magento/AuthorizenetAcceptjs/Model/Adminhtml/Source/Cctype.php+1 1 modified
    @@ -13,7 +13,7 @@
     /**
      * Authorize.net Payment CC Types Source Model
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class Cctype extends PaymentCctype
    
  • app/code/Magento/AuthorizenetAcceptjs/Model/Adminhtml/Source/Environment.php+1 1 modified
    @@ -11,7 +11,7 @@
     /**
      * Authorize.net Environment Dropdown source
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class Environment implements \Magento\Framework\Data\OptionSourceInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Model/Adminhtml/Source/PaymentAction.php+1 1 modified
    @@ -11,7 +11,7 @@
     /**
      * Authorize.net Payment Action Dropdown source
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class PaymentAction implements \Magento\Framework\Data\OptionSourceInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Model/PassthroughDataObject.php+1 1 modified
    @@ -13,7 +13,7 @@
     /**
      * Contains all the accumulated data from the request builders that should be passed through to the handlers
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class PassthroughDataObject extends DataObject
    
  • app/code/Magento/AuthorizenetAcceptjs/Model/Ui/ConfigProvider.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Retrieves config needed for checkout
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class ConfigProvider implements ConfigProviderInterface
    
  • app/code/Magento/AuthorizenetAcceptjs/Observer/DataAssignObserver.php+1 1 modified
    @@ -15,7 +15,7 @@
     /**
      * Adds the payment info to the payment object
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class DataAssignObserver extends AbstractDataAssignObserver
    
  • app/code/Magento/AuthorizenetAcceptjs/Setup/Patch/Data/CopyCurrentConfig.php+1 1 modified
    @@ -19,7 +19,7 @@
     /**
      * Copies the Authorize.net DirectPost configuration values to the new Accept.js module.
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.3 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class CopyCurrentConfig implements DataPatchInterface
    
  • app/code/Magento/AuthorizenetCardinal/composer.json+10 9 modified
    @@ -6,14 +6,14 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/module-authorizenet-acceptjs": "*",
    -        "magento/framework": "*",
    -        "magento/module-cardinal-commerce": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-store": "*"
    +        "magento/module-authorizenet-acceptjs": "100.3.*",
    +        "magento/framework": "102.0.*",
    +        "magento/module-cardinal-commerce": "100.3.*",
    +        "magento/module-payment": "100.3.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -27,5 +27,6 @@
             "psr-4": {
                 "Magento\\AuthorizenetCardinal\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.1"
     }
    
  • app/code/Magento/AuthorizenetCardinal/Gateway/Request/Authorize3DSecureBuilder.php+1 1 modified
    @@ -17,7 +17,7 @@
     /**
      * Adds the cardholder authentication information to the request
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.1 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class Authorize3DSecureBuilder implements BuilderInterface
    
  • app/code/Magento/AuthorizenetCardinal/Gateway/Validator/CavvResponseValidator.php+1 1 modified
    @@ -17,7 +17,7 @@
     /**
      * Validates cardholder authentication verification response code.
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.1 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class CavvResponseValidator extends AbstractValidator
    
  • app/code/Magento/AuthorizenetCardinal/Model/Checkout/ConfigProvider.php+1 1 modified
    @@ -13,7 +13,7 @@
     /**
      * Configuration provider.
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.1 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class ConfigProvider implements ConfigProviderInterface
    
  • app/code/Magento/AuthorizenetCardinal/Model/Config.php+1 1 modified
    @@ -15,7 +15,7 @@
      *
      * Class is a proxy service for retrieving configuration settings.
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.1 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class Config
    
  • app/code/Magento/AuthorizenetCardinal/Observer/DataAssignObserver.php+1 1 modified
    @@ -16,7 +16,7 @@
     /**
      * Adds the payment info to the payment object
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.1 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class DataAssignObserver extends AbstractDataAssignObserver
    
  • app/code/Magento/Authorizenet/composer.json+11 10 modified
    @@ -6,17 +6,17 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-payment": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-store": "101.0.*"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -30,5 +30,6 @@
             "psr-4": {
                 "Magento\\Authorizenet\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/AuthorizenetGraphQl/composer.json+5 4 modified
    @@ -4,11 +4,11 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-quote-graph-ql": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-quote-graph-ql": "100.3.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*"
    +        "magento/module-graph-ql": "100.3.*"
         },
         "license": [
             "OSL-3.0",
    @@ -21,5 +21,6 @@
             "psr-4": {
                 "Magento\\AuthorizenetGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.1"
     }
    
  • app/code/Magento/AuthorizenetGraphQl/Model/AuthorizenetDataProvider.php+1 1 modified
    @@ -14,7 +14,7 @@
     /**
      * SetPaymentMethod additional data provider model for Authorizenet payment method
      *
    - * @deprecated Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
    + * @deprecated 100.3.1 Starting from Magento 2.3.4 Authorize.net payment method core integration is deprecated in favor of
      * official payment integration available on the marketplace
      */
     class AuthorizenetDataProvider implements AdditionalDataProviderInterface
    
  • app/code/Magento/Backend/composer.json+21 20 modified
    @@ -5,27 +5,27 @@
             "sort-packages": true
         },
         "require": {
    -      "php": "~7.1.3||~7.2.0||~7.3.0",
    -      "magento/framework": "*",
    -      "magento/module-backup": "*",
    -      "magento/module-catalog": "*",
    -      "magento/module-config": "*",
    -      "magento/module-customer": "*",
    -      "magento/module-developer": "*",
    -      "magento/module-directory": "*",
    -      "magento/module-eav": "*",
    -      "magento/module-quote": "*",
    -      "magento/module-reports": "*",
    -      "magento/module-require-js": "*",
    -      "magento/module-sales": "*",
    -      "magento/module-security": "*",
    -      "magento/module-store": "*",
    -      "magento/module-translation": "*",
    -      "magento/module-ui": "*",
    -      "magento/module-user": "*"
    +        "php": "~7.1.3||~7.2.0||~7.3.0",
    +        "magento/framework": "102.0.*",
    +        "magento/module-backup": "100.3.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-developer": "100.3.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-reports": "100.3.*",
    +        "magento/module-require-js": "100.3.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-security": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-translation": "100.3.*",
    +        "magento/module-ui": "101.1.*",
    +        "magento/module-user": "101.1.*"
         },
         "suggest": {
    -        "magento/module-theme": "*"
    +        "magento/module-theme": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -39,5 +39,6 @@
             "psr-4": {
                 "Magento\\Backend\\": ""
             }
    -    }
    +    },
    +    "version": "101.0.4-p2"
     }
    
  • app/code/Magento/Backend/Test/Mftf/ActionGroup/AdminSetStoreInformationConfigurationActionGroup.xml+36 0 added
    @@ -0,0 +1,36 @@
    +<?xml version="1.0" encoding="UTF-8"?>
    +<!--
    + /**
    +  * Copyright © Magento, Inc. All rights reserved.
    +  * See COPYING.txt for license details.
    +  */
    +-->
    +
    +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +              xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
    +    <actionGroup name="AdminSetStoreInformationConfigurationActionGroup">
    +        <annotations>
    +            <description>Set Store Information configurations</description>
    +        </annotations>
    +        <arguments>
    +            <argument name="storeName" type="string" defaultValue="{{AdminGeneralSetStoreNameConfigData.value}}"/>
    +            <argument name="storeHoursOfOperation" type="string" defaultValue="{{AdminGeneralSetStoreHoursConfigData.value}}"/>
    +            <argument name="vatNumber" type="string" defaultValue="{{AdminGeneralSetVatNumberConfigData.value}}"/>
    +            <argument name="telephone" type="string" defaultValue="{{US_Address_TX.telephone}}"/>
    +            <argument name="country" type="string" defaultValue="{{US_Address_TX.country_id}}"/>
    +            <argument name="state" type="string" defaultValue="{{US_Address_TX.state}}"/>
    +            <argument name="city" type="string" defaultValue="{{US_Address_TX.city}}"/>
    +            <argument name="postcode" type="string" defaultValue="{{US_Address_TX.postcode}}"/>
    +            <argument name="street" type="string" defaultValue="{{US_Address_TX.street[0]}}"/>
    +        </arguments>
    +        <magentoCLI command="config:set {{AdminGeneralSetStoreNameConfigData.path}} '{{storeName}}'" stepKey="setStoreInformationName"/>
    +        <magentoCLI command="config:set {{AdminGeneralSetStorePhoneConfigData.path}} '{{telephone}}'" stepKey="setStoreInformationPhone"/>
    +        <magentoCLI command="config:set {{AdminGeneralSetStoreHoursConfigData.path}} '{{storeHoursOfOperation}}'" stepKey="setStoreHoursInformation"/>
    +        <magentoCLI command="config:set {{AdminGeneralSetCountryConfigData.path}} '{{country}}'" stepKey="setStoreInformationCountry"/>
    +        <magentoCLI command="config:set {{AdminGeneralSetStateConfigData.path}} '{{state}}'" stepKey="setStoreInformationState"/>
    +        <magentoCLI command="config:set {{AdminGeneralSetCityConfigData.path}} '{{city}}'" stepKey="setStoreInformationCity"/>
    +        <magentoCLI command="config:set {{AdminGeneralSetPostcodeConfigData.path}} '{{postcode}}'" stepKey="setStoreInformationPostcode"/>
    +        <magentoCLI command="config:set {{AdminGeneralSetStreetAddressConfigData.path}} '{{street}}'" stepKey="setStoreInformationStreetAddress"/>
    +        <magentoCLI command="config:set {{AdminGeneralSetVatNumberConfigData.path}} '{{vatNumber}}'" stepKey="setStoreInformationVatNumber"/>
    +    </actionGroup>
    +</actionGroups>
    
  • app/code/Magento/Backend/Test/Mftf/Data/AdminGeneralStoreInfomationConfigData.xml+7 0 modified
    @@ -30,4 +30,11 @@
         <entity name="AdminGeneralSetStreetAddress2ConfigData">
             <data key="path">general/store_information/street_line2</data>
         </entity>
    +    <entity name="AdminGeneralSetStateConfigData">
    +        <data key="path">general/store_information/region_id</data>
    +    </entity>
    +    <entity name="AdminGeneralSetStoreHoursConfigData">
    +        <data key="path">general/store_information/hours</data>
    +        <data key="value">8AM-8PM</data>
    +    </entity>
     </entities>
    
  • app/code/Magento/Backup/composer.json+6 5 modified
    @@ -6,10 +6,10 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-cron": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-cron": "100.3.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -23,5 +23,6 @@
             "psr-4": {
                 "Magento\\Backup\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Braintree/composer.json+19 18 modified
    @@ -7,26 +7,26 @@
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
             "braintree/braintree_php": "3.35.0",
    -        "magento/framework": "*",
    +        "magento/framework": "102.0.*",
             "magento/magento-composer-installer": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-instant-purchase": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-paypal": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-vault": "*",
    -        "magento/module-multishipping": "*",
    -        "magento/module-theme": "*"
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-instant-purchase": "100.3.*",
    +        "magento/module-payment": "100.3.*",
    +        "magento/module-paypal": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-ui": "101.1.*",
    +        "magento/module-vault": "101.1.*",
    +        "magento/module-multishipping": "100.3.*",
    +        "magento/module-theme": "101.0.*"
         },
         "suggest": {
    -        "magento/module-checkout-agreements": "*"
    +        "magento/module-checkout-agreements": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -40,5 +40,6 @@
             "psr-4": {
                 "Magento\\Braintree\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/BraintreeGraphQl/composer.json+8 7 modified
    @@ -4,14 +4,14 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-braintree": "*",
    -        "magento/module-store": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-quote-graph-ql": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-braintree": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-quote-graph-ql": "100.3.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*"
    +        "magento/module-graph-ql": "100.3.*"
         },
         "license": [
             "OSL-3.0",
    @@ -24,5 +24,6 @@
             "psr-4": {
                 "Magento\\BraintreeGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.1"
     }
    
  • app/code/Magento/Bundle/composer.json+21 20 modified
    @@ -6,27 +6,27 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-catalog-rule": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-gift-message": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-inventory": "100.3.*",
    +        "magento/module-catalog-rule": "101.1.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-gift-message": "100.3.*",
    +        "magento/module-media-storage": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-tax": "100.3.*",
    +        "magento/module-ui": "101.1.*"
         },
         "suggest": {
    -        "magento/module-webapi": "*",
    -        "magento/module-bundle-sample-data": "*",
    -        "magento/module-sales-rule": "*"
    +        "magento/module-webapi": "100.3.*",
    +        "magento/module-bundle-sample-data": "Sample Data version: 100.3.*",
    +        "magento/module-sales-rule": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -40,5 +40,6 @@
             "psr-4": {
                 "Magento\\Bundle\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/BundleGraphQl/composer.json+9 8 modified
    @@ -4,13 +4,13 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/module-catalog": "*",
    -        "magento/module-bundle": "*",
    -        "magento/module-catalog-graph-ql": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-quote-graph-ql": "*",
    -        "magento/module-store": "*",
    -        "magento/framework": "*"
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-bundle": "100.3.*",
    +        "magento/module-catalog-graph-ql": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-quote-graph-ql": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/framework": "102.0.*"
         },
         "license": [
             "OSL-3.0",
    @@ -23,5 +23,6 @@
             "psr-4": {
                 "Magento\\BundleGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/BundleImportExport/composer.json+9 8 modified
    @@ -6,13 +6,13 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-bundle": "*",
    -        "magento/module-store": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-import-export": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-import-export": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-bundle": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-import-export": "101.0.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-import-export": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -26,5 +26,6 @@
             "psr-4": {
                 "Magento\\BundleImportExport\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/CacheInvalidate/composer.json+4 3 modified
    @@ -6,8 +6,8 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-page-cache": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-page-cache": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -21,5 +21,6 @@
             "psr-4": {
                 "Magento\\CacheInvalidate\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Captcha/composer.json+7 6 modified
    @@ -6,11 +6,11 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-store": "*",
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-store": "101.0.*",
             "zendframework/zend-captcha": "^2.7.1",
             "zendframework/zend-db": "^2.8.2",
             "zendframework/zend-session": "^2.7.3"
    @@ -27,5 +27,6 @@
             "psr-4": {
                 "Magento\\Captcha\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/CardinalCommerce/composer.json+6 5 modified
    @@ -6,10 +6,10 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-payment": "100.3.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -23,5 +23,6 @@
             "psr-4": {
                 "Magento\\CardinalCommerce\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.1-p2"
     }
    
  • app/code/Magento/CardinalCommerce/Model/JwtManagement.php+3 1 modified
    @@ -8,6 +8,7 @@
     namespace Magento\CardinalCommerce\Model;
     
     use Magento\Framework\Serialize\Serializer\Json;
    +use Magento\Framework\Encryption\Helper\Security;
     
     /**
      * JSON Web Token management.
    @@ -62,7 +63,8 @@ public function decode(string $jwt, string $key): array
             $payload = $this->json->unserialize($payloadJson);
     
             $signature = $this->urlSafeB64Decode($signatureB64);
    -        if ($signature !== $this->sign($headB64 . '.' . $payloadB64, $key, $header['alg'])) {
    +
    +        if (!Security::compareStrings($signature, $this->sign($headB64 . '.' . $payloadB64, $key, $header['alg']))) {
                 throw new \InvalidArgumentException('JWT signature verification failed');
             }
     
    
  • app/code/Magento/CatalogAnalytics/composer.json+5 4 modified
    @@ -3,9 +3,9 @@
         "description": "N/A",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-analytics": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-analytics": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -19,5 +19,6 @@
             "psr-4": {
                 "Magento\\CatalogAnalytics\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Catalog/Api/SpecialPriceInterface.php+1 0 modified
    @@ -31,6 +31,7 @@ interface SpecialPriceInterface
          * ]
          * @since 101.1.0
          * @since 102.0.0
    +     * @since 102.0.0
          */
         public function get(array $skus);
     
    
  • app/code/Magento/CatalogCmsGraphQl/composer.json+8 7 modified
    @@ -4,14 +4,14 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-cms-graph-ql": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-cms-graph-ql": "100.3.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-catalog-graph-ql": "*"
    +        "magento/module-graph-ql": "100.3.*",
    +        "magento/module-cms": "103.0.*",
    +        "magento/module-catalog-graph-ql": "100.3.*"
         },
         "license": [
             "OSL-3.0",
    @@ -24,5 +24,6 @@
             "psr-4": {
                 "Magento\\CatalogCmsGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.0"
     }
    
  • app/code/Magento/Catalog/composer.json+31 30 modified
    @@ -6,37 +6,37 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-asynchronous-operations": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-catalog-rule": "*",
    -        "magento/module-catalog-url-rewrite": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-indexer": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-msrp": "*",
    -        "magento/module-page-cache": "*",
    -        "magento/module-product-alert": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-url-rewrite": "*",
    -        "magento/module-widget": "*",
    -        "magento/module-wishlist": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-authorization": "100.3.*",
    +        "magento/module-asynchronous-operations": "100.3.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog-inventory": "100.3.*",
    +        "magento/module-catalog-rule": "101.1.*",
    +        "magento/module-catalog-url-rewrite": "100.3.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-cms": "103.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-indexer": "100.3.*",
    +        "magento/module-media-storage": "100.3.*",
    +        "magento/module-msrp": "100.3.*",
    +        "magento/module-page-cache": "100.3.*",
    +        "magento/module-product-alert": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-tax": "100.3.*",
    +        "magento/module-theme": "101.0.*",
    +        "magento/module-ui": "101.1.*",
    +        "magento/module-url-rewrite": "101.1.*",
    +        "magento/module-widget": "101.1.*",
    +        "magento/module-wishlist": "101.1.*"
         },
         "suggest": {
    -        "magento/module-cookie": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-catalog-sample-data": "*"
    +        "magento/module-cookie": "100.3.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-catalog-sample-data": "Sample Data version: 100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -50,5 +50,6 @@
             "psr-4": {
                 "Magento\\Catalog\\": ""
             }
    -    }
    +    },
    +    "version": "103.0.4-p2"
     }
    
  • app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Save.php+37 5 modified
    @@ -7,14 +7,16 @@
     namespace Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute;
     
     use Magento\AsynchronousOperations\Api\Data\OperationInterface;
    +use Magento\Catalog\Model\ProductFactory;
     use Magento\Eav\Model\Config;
     use Magento\Framework\App\Action\HttpPostActionInterface;
     use Magento\Backend\App\Action;
     use Magento\Framework\App\ObjectManager;
    +use Magento\Framework\Exception\LocalizedException;
     use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
     
     /**
    - * Class Save
    + * Class responsible for saving product attributes.
      * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
      */
     class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute implements HttpPostActionInterface
    @@ -59,6 +61,11 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Action\Attribut
          */
         private $eavConfig;
     
    +    /**
    +     * @var ProductFactory
    +     */
    +    private $productFactory;
    +
         /**
          * @param Action\Context $context
          * @param \Magento\Catalog\Helper\Product\Edit\Action\Attribute $attributeHelper
    @@ -70,6 +77,7 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Action\Attribut
          * @param int $bulkSize
          * @param TimezoneInterface $timezone
          * @param Config $eavConfig
    +     * @param ProductFactory $productFactory
          * @SuppressWarnings(PHPMD.ExcessiveParameterList)
          */
         public function __construct(
    @@ -82,7 +90,8 @@ public function __construct(
             \Magento\Authorization\Model\UserContextInterface $userContext,
             int $bulkSize = 100,
             TimezoneInterface $timezone = null,
    -        Config $eavConfig = null
    +        Config $eavConfig = null,
    +        ProductFactory $productFactory = null
         ) {
             parent::__construct($context, $attributeHelper);
             $this->bulkManagement = $bulkManagement;
    @@ -95,6 +104,7 @@ public function __construct(
                 ->get(TimezoneInterface::class);
             $this->eavConfig = $eavConfig ?: ObjectManager::getInstance()
                 ->get(Config::class);
    +        $this->productFactory = $productFactory ?? ObjectManager::getInstance()->get(ProductFactory::class);
         }
     
         /**
    @@ -120,9 +130,10 @@ public function execute()
             $attributesData = $this->sanitizeProductAttributes($attributesData);
     
             try {
    +            $this->validateProductAttributes($attributesData);
                 $this->publish($attributesData, $websiteRemoveData, $websiteAddData, $storeId, $websiteId, $productIds);
                 $this->messageManager->addSuccessMessage(__('Message is added to queue'));
    -        } catch (\Magento\Framework\Exception\LocalizedException $e) {
    +        } catch (LocalizedException $e) {
                 $this->messageManager->addErrorMessage($e->getMessage());
             } catch (\Exception $e) {
                 $this->messageManager->addExceptionMessage(
    @@ -147,10 +158,12 @@ private function sanitizeProductAttributes($attributesData)
     
             foreach ($attributesData as $attributeCode => $value) {
                 $attribute = $this->eavConfig->getAttribute(\Magento\Catalog\Model\Product::ENTITY, $attributeCode);
    +
                 if (!$attribute->getAttributeId()) {
                     unset($attributesData[$attributeCode]);
                     continue;
                 }
    +
                 if ($attribute->getBackendType() === 'datetime') {
                     if (!empty($value)) {
                         $filterInput = new \Zend_Filter_LocalizedToNormalized(['date_format' => $dateFormat]);
    @@ -178,6 +191,25 @@ private function sanitizeProductAttributes($attributesData)
             return $attributesData;
         }
     
    +    /**
    +     * Validate product attributes data.
    +     *
    +     * @param array $attributesData
    +     *
    +     * @return void
    +     * @throws LocalizedException
    +     */
    +    private function validateProductAttributes(array $attributesData): void
    +    {
    +        $product = $this->productFactory->create();
    +        $product->setData($attributesData);
    +
    +        foreach (array_keys($attributesData) as $attributeCode) {
    +            $attribute = $this->eavConfig->getAttribute(\Magento\Catalog\Model\Product::ENTITY, $attributeCode);
    +            $attribute->getBackend()->validate($product);
    +        }
    +    }
    +
         /**
          * Schedule new bulk
          *
    @@ -187,7 +219,7 @@ private function sanitizeProductAttributes($attributesData)
          * @param int $storeId
          * @param int $websiteId
          * @param array $productIds
    -     * @throws \Magento\Framework\Exception\LocalizedException
    +     * @throws LocalizedException
          *
          * @return void
          */
    @@ -241,7 +273,7 @@ private function publish(
                     $this->userContext->getUserId()
                 );
                 if (!$result) {
    -                throw new \Magento\Framework\Exception\LocalizedException(
    +                throw new LocalizedException(
                         __('Something went wrong while processing the request.')
                     );
                 }
    
  • app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Save.php+7 3 modified
    @@ -143,8 +143,10 @@ public function execute()
                 $optionData = $this->formDataSerializer
                     ->unserialize($this->getRequest()->getParam('serialized_options', '[]'));
             } catch (\InvalidArgumentException $e) {
    -            $message = __("The attribute couldn't be saved due to an error. Verify your information and try again. "
    -                . "If the error persists, please try again later.");
    +            $message = __(
    +                "The attribute couldn't be saved due to an error. Verify your information and try again. "
    +                . "If the error persists, please try again later."
    +            );
                 $this->messageManager->addErrorMessage($message);
                 return $this->returnResult('catalog/*/edit', ['_current' => true], ['error' => true]);
             }
    @@ -221,7 +223,7 @@ public function execute()
                         return $this->returnResult('catalog/*/', [], ['error' => true]);
                     }
                     // entity type check
    -                if ($model->getEntityTypeId() != $this->_entityTypeId) {
    +                if ($model->getEntityTypeId() != $this->_entityTypeId || array_key_exists('backend_model', $data)) {
                         $this->messageManager->addErrorMessage(__('We can\'t update the attribute.'));
                         $this->_session->setAttributeData($data);
                         return $this->returnResult('catalog/*/', [], ['error' => true]);
    @@ -258,6 +260,8 @@ public function execute()
                     unset($data['apply_to']);
                 }
     
    +            unset($data['entity_type_id']);
    +
                 $model->addData($data);
     
                 if (!$attributeId) {
    
  • app/code/Magento/CatalogCustomerGraphQl/composer.json+7 6 modified
    @@ -4,11 +4,11 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-catalog-graph-ql": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-catalog-graph-ql": "100.3.*",
    +        "magento/module-store": "101.0.*"
         },
         "license": [
             "OSL-3.0",
    @@ -21,5 +21,6 @@
             "psr-4": {
                 "Magento\\CatalogCustomerGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.0"
     }
    
  • app/code/Magento/CatalogGraphQl/composer.json+13 12 modified
    @@ -4,19 +4,19 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/module-eav": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-search": "*",
    -        "magento/module-store": "*",
    -        "magento/module-eav-graph-ql": "*",
    -        "magento/module-catalog-search": "*",
    -        "magento/framework": "*"
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-inventory": "100.3.*",
    +        "magento/module-search": "101.0.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-eav-graph-ql": "100.3.*",
    +        "magento/module-catalog-search": "101.0.*",
    +        "magento/framework": "102.0.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*",
    -        "magento/module-graph-ql-cache": "*",
    -        "magento/module-store-graph-ql": "*"
    +        "magento/module-graph-ql": "100.3.*",
    +        "magento/module-graph-ql-cache": "100.3.*",
    +        "magento/module-store-graph-ql": "100.3.*"
         },
         "license": [
             "OSL-3.0",
    @@ -29,5 +29,6 @@
             "psr-4": {
                 "Magento\\CatalogGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/CatalogGraphQl/Model/Resolver/Category/Products.php+2 2 modified
    @@ -30,13 +30,13 @@ class Products implements ResolverInterface
     
         /**
          * @var Builder
    -     * @deprecated
    +     * @deprecated 100.3.4
          */
         private $searchCriteriaBuilder;
     
         /**
          * @var Filter
    -     * @deprecated
    +     * @deprecated 100.3.4
          */
         private $filterQuery;
     
    
  • app/code/Magento/CatalogGraphQl/Model/Resolver/Products.php+3 3 modified
    @@ -25,7 +25,7 @@ class Products implements ResolverInterface
     {
         /**
          * @var Builder
    -     * @deprecated
    +     * @deprecated 100.3.4
          */
         private $searchCriteriaBuilder;
     
    @@ -36,13 +36,13 @@ class Products implements ResolverInterface
     
         /**
          * @var Filter
    -     * @deprecated
    +     * @deprecated 100.3.4
          */
         private $filterQuery;
     
         /**
          * @var SearchFilter
    -     * @deprecated
    +     * @deprecated 100.3.4
          */
         private $searchFilter;
     
    
  • app/code/Magento/CatalogImportExport/composer.json+13 12 modified
    @@ -7,17 +7,17 @@
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
             "ext-ctype": "*",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-catalog-url-rewrite": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-import-export": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-authorization": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-inventory": "100.3.*",
    +        "magento/module-catalog-url-rewrite": "100.3.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-import-export": "100.3.*",
    +        "magento/module-media-storage": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-tax": "100.3.*",
    +        "magento/module-authorization": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -31,5 +31,6 @@
             "psr-4": {
                 "Magento\\CatalogImportExport\\": ""
             }
    -    }
    +    },
    +    "version": "101.0.4-p2"
     }
    
  • app/code/Magento/CatalogImportExport/Test/Mftf/Test/AdminExportBundleProductTest.xml+3 0 modified
    @@ -107,6 +107,9 @@
                 </actionGroup>
                 <!-- Log out -->
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Go to export page -->
    
  • app/code/Magento/CatalogImportExport/Test/Mftf/Test/AdminExportImportConfigurableProductWithImagesTest.xml+3 0 modified
    @@ -153,6 +153,9 @@
                 <actionGroup ref="resetProductGridToDefaultView" stepKey="resetProductGridColumnsInitial"/>
                 <!-- Admin logout-->
                 <actionGroup ref="logout" stepKey="adminLogout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Go to System > Export -->
    
  • app/code/Magento/CatalogImportExport/Test/Mftf/Test/AdminExportSimpleAndConfigurableProductsWithCustomOptionsTest.xml+3 0 modified
    @@ -95,6 +95,9 @@
                 </actionGroup>
                 <!-- Log out -->
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Go to export page -->
    
  • app/code/Magento/CatalogImportExport/Test/Mftf/Test/AdminExportSimpleProductAndConfigurableProductsWithAssignedImagesTest.xml+3 0 modified
    @@ -111,6 +111,9 @@
                 </actionGroup>
                 <!-- Log out -->
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Go to export page -->
    
  • app/code/Magento/CatalogImportExport/Test/Mftf/Test/AdminExportSimpleProductAssignedToMainWebsiteAndConfigurableProductAssignedToCustomWebsiteTest.xml+3 0 modified
    @@ -96,6 +96,9 @@
                 </actionGroup>
                 <!-- Log out -->
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Go to export page -->
    
  • app/code/Magento/CatalogInventory/composer.json+10 9 modified
    @@ -6,14 +6,14 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-ui": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -28,5 +28,6 @@
                 "Magento\\CatalogInventory\\": ""
             }
         },
    -    "abandoned": "magento/inventory-composer-metapackage"
    +    "abandoned": "magento/inventory-composer-metapackage",
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/CatalogInventoryGraphQl/composer.json+22 21 modified
    @@ -1,24 +1,25 @@
     {
    -  "name": "magento/module-catalog-inventory-graph-ql",
    -  "description": "N/A",
    -  "type": "magento2-module",
    -  "require": {
    -    "php": "~7.1.3||~7.2.0||~7.3.0",
    -    "magento/framework": "*",
    -    "magento/module-store": "*",
    -    "magento/module-catalog": "*",
    -    "magento/module-catalog-inventory": "*"
    -  },
    -  "license": [
    -    "OSL-3.0",
    -    "AFL-3.0"
    -  ],
    -  "autoload": {
    -    "files": [
    -      "registration.php"
    +    "name": "magento/module-catalog-inventory-graph-ql",
    +    "description": "N/A",
    +    "type": "magento2-module",
    +    "require": {
    +        "php": "~7.1.3||~7.2.0||~7.3.0",
    +        "magento/framework": "102.0.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-inventory": "100.3.*"
    +    },
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
         ],
    -    "psr-4": {
    -      "Magento\\CatalogInventoryGraphQl\\": ""
    -    }
    -  }
    +    "autoload": {
    +        "files": [
    +            "registration.php"
    +        ],
    +        "psr-4": {
    +            "Magento\\CatalogInventoryGraphQl\\": ""
    +        }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/CatalogInventory/Test/Mftf/Test/AssociatedProductToConfigurableOutOfStockTest.xml+10 7 modified
    @@ -80,13 +80,16 @@
             </before>
     
             <after>
    -              <deleteData createDataKey="createConfigProduct" stepKey="deleteConfigProduct"/>
    -              <deleteData createDataKey="simplecategory" stepKey="deleteSimpleCategory"/>
    -              <deleteData createDataKey="createSimpleUsCustomer" stepKey="deleteCustomer"/>
    -              <deleteData createDataKey="createConfigChildProduct1" stepKey="deleteConfigChildProduct1"/>
    -              <deleteData createDataKey="createConfigChildProduct2" stepKey="deleteConfigChildProduct2"/>
    -              <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    -          </after>
    +            <deleteData createDataKey="createConfigProduct" stepKey="deleteConfigProduct"/>
    +            <deleteData createDataKey="simplecategory" stepKey="deleteSimpleCategory"/>
    +            <deleteData createDataKey="createSimpleUsCustomer" stepKey="deleteCustomer"/>
    +            <deleteData createDataKey="createConfigChildProduct1" stepKey="deleteConfigChildProduct1"/>
    +            <deleteData createDataKey="createConfigChildProduct2" stepKey="deleteConfigChildProduct2"/>
    +            <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
    +        </after>
     
             <!-- Login as a customer -->
             <actionGroup ref="LoginToStorefrontActionGroup" stepKey="signUpNewUser">
    
  • app/code/Magento/Catalog/Model/Attribute/Backend/Customlayoutupdate.php+2 1 modified
    @@ -22,7 +22,7 @@ class Customlayoutupdate extends AbstractBackend
     {
         /**
          * @var ValidatorFactory
    -     * @deprecated Is not used anymore.
    +     * @deprecated 103.0.4 Is not used anymore.
          */
         protected $_layoutUpdateValidatorFactory;
     
    @@ -117,6 +117,7 @@ private function putValue(AbstractModel $object, ?string $value): void
          *
          * @param AbstractModel $object
          * @throws LocalizedException
    +     * @since 103.0.4
          */
         public function beforeSave($object)
         {
    
  • app/code/Magento/Catalog/Model/ProductLink/Repository.php+4 4 modified
    @@ -54,14 +54,14 @@ class Repository implements \Magento\Catalog\Api\ProductLinkRepositoryInterface
     
         /**
          * @var CollectionProvider
    -     * @deprecated Not used anymore.
    +     * @deprecated 103.0.4 Not used anymore.
          * @see query
          */
         protected $entityCollectionProvider;
     
         /**
          * @var LinksInitializer
    -     * @deprecated Not used.
    +     * @deprecated 103.0.4 Not used.
          */
         protected $linkInitializer;
     
    @@ -77,14 +77,14 @@ class Repository implements \Magento\Catalog\Api\ProductLinkRepositoryInterface
     
         /**
          * @var ProductLinkInterfaceFactory
    -     * @deprecated Not used anymore, search delegated.
    +     * @deprecated 103.0.4 Not used anymore, search delegated.
          * @see getList()
          */
         protected $productLinkFactory;
     
         /**
          * @var ProductLinkExtensionFactory
    -     * @deprecated Not used anymore, search delegated.
    +     * @deprecated 103.0.4 Not used anymore, search delegated.
          * @see getList()
          */
         protected $productLinkExtensionFactory;
    
  • app/code/Magento/CatalogRule/composer.json+12 11 modified
    @@ -6,18 +6,18 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-rule": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-rule": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-ui": "101.1.*"
         },
         "suggest": {
    -        "magento/module-import-export": "*",
    -        "magento/module-catalog-rule-sample-data": "*"
    +        "magento/module-import-export": "100.3.*",
    +        "magento/module-catalog-rule-sample-data": "Sample Data version: 100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -31,5 +31,6 @@
             "psr-4": {
                 "Magento\\CatalogRule\\": ""
             }
    -    }
    +    },
    +    "version": "101.1.4-p2"
     }
    
  • app/code/Magento/CatalogRuleConfigurable/composer.json+7 6 modified
    @@ -6,14 +6,14 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    +        "magento/framework": "102.0.*",
             "magento/magento-composer-installer": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-rule": "*",
    -        "magento/module-configurable-product": "*"
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-rule": "101.1.*",
    +        "magento/module-configurable-product": "100.3.*"
         },
         "suggest": {
    -        "magento/module-catalog-rule": "*"
    +        "magento/module-catalog-rule": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -27,5 +27,6 @@
             "psr-4": {
                 "Magento\\CatalogRuleConfigurable\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/CatalogRuleConfigurable/Test/Mftf/Test/AdminApplyCatalogRuleForConfigurableProductWithAssignedSimpleProductsTest.xml+3 0 modified
    @@ -176,6 +176,9 @@
     
                 <!-- Admin log out -->
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <!-- Create price rule -->
             <actionGroup ref="newCatalogPriceRuleByUI" stepKey="createPriceRule">
    
  • app/code/Magento/CatalogRuleConfigurable/Test/Mftf/Test/AdminApplyCatalogRuleForConfigurableProductWithOptionsTest.xml+3 0 modified
    @@ -123,6 +123,9 @@
     
                 <!-- Log out -->
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Create price rule for first configurable product option -->
    
  • app/code/Magento/CatalogRule/Test/Mftf/Test/AdminApplyCatalogRuleForConfigurableProductWithSpecialPricesTest.xml+3 0 modified
    @@ -92,6 +92,9 @@
                 <deleteData createDataKey="createSecondConfigChildProduct" stepKey="deleteConfigChildProduct2"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
                 <deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Add special prices for products -->
    
  • app/code/Magento/CatalogRule/Test/Mftf/Test/AdminDeleteCatalogPriceRuleEntityTest.xml+3 0 modified
    @@ -182,6 +182,9 @@
                 <deleteData createDataKey="createConfigChildProduct1" stepKey="deleteConfigChildProduct1"/>
                 <deleteData createDataKey="createConfigChildProduct2" stepKey="deleteConfigChildProduct2"/>
                 <deleteData createDataKey="createConfigProductAttribute1" stepKey="deleteConfigProductAttribute1"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Delete the simple product and catalog price rule -->
    
  • app/code/Magento/CatalogRule/Test/Mftf/Test/ApplyCatalogPriceRuleByProductAttributeTest.xml+3 0 modified
    @@ -105,6 +105,9 @@
                 <click stepKey="resetFilters" selector="{{AdminSecondaryGridSection.resetFilters}}"/>
     
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Add values to your attribute ( ex: red , green) -->
    
  • app/code/Magento/CatalogRule/Test/Mftf/Test/ApplyCatalogRuleForSimpleAndConfigurableProductTest.xml+3 0 modified
    @@ -99,6 +99,9 @@
                 <deleteData createDataKey="createConfigChildProduct2" stepKey="deleteConfigChildProduct2"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
                 <deleteData createDataKey="createCategory" stepKey="deleteApiCategory"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <!-- Begin creating a new catalog price rule -->
             <actionGroup ref="newCatalogPriceRuleByUIWithConditionIsCategory" stepKey="newCatalogPriceRuleByUIWithConditionIsCategory">
    
  • app/code/Magento/CatalogSearch/composer.json+15 14 modified
    @@ -6,21 +6,21 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-indexer": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-search": "*",
    -        "magento/module-store": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-indexer": "100.3.*",
    +        "magento/module-catalog-inventory": "100.3.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-search": "101.0.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-theme": "101.0.*",
    +        "magento/module-ui": "101.1.*"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -34,5 +34,6 @@
             "psr-4": {
                 "Magento\\CatalogSearch\\": ""
             }
    -    }
    +    },
    +    "version": "101.0.4-p2"
     }
    
  • app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced/Collection.php+3 0 modified
    @@ -355,6 +355,7 @@ protected function _renderFiltersBefore()
     
         /**
          * @inheritDoc
    +     * @since 101.0.4
          */
         public function clear()
         {
    @@ -364,6 +365,7 @@ public function clear()
     
         /**
          * @inheritDoc
    +     * @since 101.0.4
          */
         protected function _reset()
         {
    @@ -373,6 +375,7 @@ protected function _reset()
     
         /**
          * @inheritdoc
    +     * @since 101.0.4
          */
         public function _loadEntities($printQuery = false, $logQuery = false)
         {
    
  • app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext/Collection.php+3 0 modified
    @@ -381,6 +381,7 @@ public function addFieldToFilter($field, $condition = null)
     
         /**
          * @inheritDoc
    +     * @since 101.0.4
          */
         public function clear()
         {
    @@ -390,6 +391,7 @@ public function clear()
     
         /**
          * @inheritDoc
    +     * @since 101.0.4
          */
         protected function _reset()
         {
    @@ -399,6 +401,7 @@ protected function _reset()
     
         /**
          * @inheritdoc
    +     * @since 101.0.4
          */
         public function _loadEntities($printQuery = false, $logQuery = false)
         {
    
  • app/code/Magento/CatalogSearch/Test/Mftf/Test/SearchEntityResultsTest.xml+7 0 modified
    @@ -675,6 +675,13 @@
                 <magentoCLI command="indexer:reindex" stepKey="reindex"/>
                 <magentoCLI command="cache:flush" stepKey="flushCache"/>
             </before>
    +        <after>
    +            <deleteData createDataKey="attributeSet" stepKey="deleteAttributeSet"/>
    +            <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
    +        </after>
             <amOnPage url="{{StorefrontHomePage.url}}" stepKey="goToFrontPage"/>
             <actionGroup ref="StorefrontCheckQuickSearchStringActionGroup" stepKey="searchStorefront">
                 <argument name="phrase" value="$createConfigProduct.name$"/>
    
  • app/code/Magento/Catalog/Test/Mftf/Test/AdminAssignProductAttributeToAttributeSetTest.xml+3 0 modified
    @@ -33,6 +33,9 @@
             <after>
                 <deleteData createDataKey="attribute" stepKey="deleteAttribute"/>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Go to default attribute set edit page -->
    
  • app/code/Magento/Catalog/Test/Mftf/Test/AdminChangeProductAttributeSet.xml+3 0 modified
    @@ -47,6 +47,9 @@
                 <deleteData createDataKey="createProductAttribute" stepKey="deleteProductAttribute"/>
                 <deleteData createDataKey="createAttributeSet" stepKey="deleteAttributeSet"/>
                 <actionGroup ref="ClearProductsFilterActionGroup" stepKey="clearProductsFilter"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <actionGroup ref="SearchForProductOnBackendActionGroup" stepKey="searchForSimpleProduct">
    
  • app/code/Magento/Catalog/Test/Mftf/Test/AdminCheckConfigurableProductPriceWithDisabledChildProductTest.xml+3 0 modified
    @@ -118,6 +118,9 @@
                 <deleteData createDataKey="createConfigChildProduct3" stepKey="deleteConfigChildProduct3"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteAttribute"/>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Open Product in Store Front Page -->
    
  • app/code/Magento/Catalog/Test/Mftf/Test/AdminCreateAttributeSetEntityTest.xml+3 0 modified
    @@ -26,6 +26,9 @@
             <after>
                 <deleteData createDataKey="createProductAttribute" stepKey="deleteProductAttribute"/>
                 <deleteData createDataKey="createAttributeSet" stepKey="deleteAttributeSet"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <amOnPage url="{{AdminProductAttributeSetGridPage.url}}" stepKey="goToAttributeSets"/>
    
  • app/code/Magento/Catalog/Test/Mftf/Test/AdminCreateDropdownProductAttributeVisibleInStorefrontAdvancedSearchFormTest.xml+5 0 modified
    @@ -34,7 +34,12 @@
                 <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/>
             </before>
             <after>
    +            <deleteData createDataKey="attribute" stepKey="deleteProductAttribute"/>
    +            <deleteData createDataKey="createAttributeSet" stepKey="deleteAttributeSet"/>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Filter product attribute set by attribute set name -->
    
  • app/code/Magento/Catalog/Test/Mftf/Test/AdminCreateMultipleSelectProductAttributeVisibleInStorefrontAdvancedSearchFormTest.xml+3 0 modified
    @@ -41,6 +41,9 @@
                 <deleteData createDataKey="createAttributeSet" stepKey="deleteAttributeSet"/>
     
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Filter product attribute set by attribute set name -->
    
  • app/code/Magento/Catalog/Test/Mftf/Test/AdminCreateNewGroupForAttributeSetTest.xml+4 0 modified
    @@ -27,7 +27,11 @@
             </before>
             <after>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +            <deleteData createDataKey="createAttributeSet" stepKey="deleteAttributeSet"/>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             
             <!-- Navigate to Stores > Attributes > Attribute Set -->
    
  • app/code/Magento/Catalog/Test/Mftf/Test/AdminDeleteConfigurableChildProductsTest.xml+3 0 modified
    @@ -82,6 +82,9 @@
                 <deleteData createDataKey="createConfigProduct" stepKey="deleteConfigProduct"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteAttribute"/>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <!--Open Product in Store Front Page -->
             <amOnPage url="$$createConfigProduct.sku$$.html" stepKey="openProductInStoreFront"/>
    
  • app/code/Magento/Catalog/Test/Mftf/Test/AdminDeleteDropdownProductAttributeFromAttributeSetTest.xml+3 0 modified
    @@ -29,6 +29,9 @@
                 <!--Delete Created Data -->
                 <deleteData createDataKey="createAttributeSet" stepKey="deleteAttributeSet"/>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <!-- Open Product Attribute Set Page -->
             <amOnPage url="{{AdminProductAttributeSetGridPage.url}}" stepKey="goToAttributeSets"/>
    
  • app/code/Magento/Catalog/Test/Mftf/Test/AdminDeleteProductAttributeTest.xml+3 0 modified
    @@ -23,6 +23,9 @@
             </before>
             <after>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <actionGroup ref="deleteProductAttributeByAttributeCode" stepKey="deleteProductAttribute">
                 <argument name="ProductAttributeCode" value="$$createProductAttribute.attribute_code$$"/>
    
  • app/code/Magento/Catalog/Test/Mftf/Test/AdminDeleteTextFieldProductAttributeFromAttributeSetTest.xml+3 0 modified
    @@ -32,6 +32,9 @@
                 <!--Delete cteated Data -->
                 <deleteData createDataKey="createSimpleProduct" stepKey="deleteSimplaeProduct"/>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <!-- Open Product Attribute Set Page -->
             <amOnPage url="{{AdminProductAttributeSetGridPage.url}}" stepKey="goToAttributeSets"/>
    
  • app/code/Magento/Catalog/Test/Mftf/Test/AdminNavigateMultipleUpSellProductsTest.xml+3 0 modified
    @@ -90,6 +90,9 @@
                 <deleteData createDataKey="createConfigChildProduct2" stepKey="deletecreateConfigChildProduct2"/>
                 <deleteData createDataKey="createConfigChildProduct1" stepKey="deletecreateConfigChildProduct1"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!--Open Product Index Page-->
    
  • app/code/Magento/Catalog/Test/Mftf/Test/AdminProductGridFilteringByCustomAttributeTest.xml+3 0 modified
    @@ -90,6 +90,9 @@
                 <deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
                 <actionGroup ref="NavigateToAndResetProductGridToDefaultView" stepKey="NavigateToAndResetProductGridToDefaultViewAfterTest"/>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="navigateToProductIndex"/>
             <waitForPageLoad stepKey="waitForProductGridPageLoad"/>
    
  • app/code/Magento/Catalog/Test/Mftf/Test/AdminTierPriceNotAvailableForProductOptionsWithoutTierPriceTest.xml+3 0 modified
    @@ -83,6 +83,9 @@
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
     
                 <actionGroup ref="logout" stepKey="logoutOfAdmin"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!--Go to storefront product page an check price box css-->
    
  • app/code/Magento/Catalog/Test/Mftf/Test/AdminUnassignProductAttributeFromAttributeSetTest.xml+3 0 modified
    @@ -36,6 +36,9 @@
                 <deleteData createDataKey="attribute" stepKey="deleteAttribute"/>
                 <deleteData createDataKey="product" stepKey="deleteProduct"/>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <!-- Assert attribute presence in storefront product additional information -->
             <amOnPage url="/$$product.custom_attributes[url_key]$$.html" stepKey="onProductPage1"/>
    
  • app/code/Magento/Catalog/Test/Mftf/Test/DeleteUsedInConfigurableProductAttributeTest.xml+4 1 modified
    @@ -73,6 +73,9 @@
     
                 <!-- Logout -->
                 <actionGroup ref="logout" stepKey="logoutFromAdmin"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <!-- Go to Stores > Attributes > Products. Search and select the product attribute that was used to create the configurable product-->
             <actionGroup ref="OpenProductAttributeFromSearchResultInGridActionGroup" stepKey="openProductAttributeFromSearchResultInGrid">
    @@ -102,4 +105,4 @@
                 <argument name="productAttribute" value="$$productAttributeHandle$$"/>
             </actionGroup>
         </test>
    -</tests>
    \ No newline at end of file
    +</tests>
    
  • app/code/Magento/Catalog/Test/Mftf/Test/StorefrontEnsureThatAccordionAnchorIsVisibleOnViewportOnceClickedTest.xml+4 0 modified
    @@ -69,6 +69,10 @@
                 <deleteData createDataKey="createThirdAttribute" stepKey="deleteThirdAttribute"/>
                 <deleteData createDataKey="createFourthAttribute" stepKey="deleteFourthAttribute"/>
                 <deleteData createDataKey="createProduct" stepKey="deleteProduct"/>
    +
    +            <actionGroup ref="logout" stepKey="logoutFromAdmin"/>
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Edit the product and set those attributes values -->
    
  • app/code/Magento/Catalog/Test/Mftf/Test/StorefrontProductsCompareWithEmptyAttributeTest.xml+3 0 modified
    @@ -33,6 +33,9 @@
                 <deleteData createDataKey="createSimpleProduct1" stepKey="deleteSimpleProduct1"/>
                 <deleteData createDataKey="createSimpleProduct2" stepKey="deleteSimpleProduct2"/>
                 <actionGroup ref="logout" stepKey="logoutOfAdmin"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin1"/>
             <amOnPage url="{{AdminProductAttributeSetGridPage.url}}" stepKey="amOnAttributeSetPage"/>
    
  • app/code/Magento/Catalog/Test/Mftf/Test/StorefrontProductWithEmptyAttributeTest.xml+3 0 modified
    @@ -29,6 +29,9 @@
                 <deleteData createDataKey="createPreReqCategory" stepKey="deletePreReqCategory"/>
                 <deleteData createDataKey="createProductAttribute" stepKey="deleteProductAttribute"/>
                 <actionGroup ref="logout" stepKey="logoutOfAdmin"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin1"/>
             <amOnPage url="{{AdminProductAttributeSetGridPage.url}}" stepKey="amOnAttributeSetPage"/>
    
  • app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/LayoutUpdate.php+0 1 modified
    @@ -50,7 +50,6 @@ private function extractLayoutUpdate(ProductInterface $product)
     
         /**
          * @inheritdoc
    -     * @since 101.1.0
          */
         public function modifyData(array $data)
         {
    
  • app/code/Magento/CatalogUrlRewrite/composer.json+12 11 modified
    @@ -6,18 +6,18 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-import-export": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-import-export": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-url-rewrite": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-import-export": "101.0.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-import-export": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-ui": "101.1.*",
    +        "magento/module-url-rewrite": "101.1.*"
         },
         "suggest": {
    -        "magento/module-webapi": "*"
    +        "magento/module-webapi": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -31,5 +31,6 @@
             "psr-4": {
                 "Magento\\CatalogUrlRewrite\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/CatalogUrlRewriteGraphQl/composer.json+8 7 modified
    @@ -4,14 +4,14 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/module-store": "*",
    -        "magento/module-catalog": "*",
    -        "magento/framework": "*"
    +        "magento/module-store": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/framework": "102.0.*"
         },
         "suggest": {
    -        "magento/module-catalog-url-rewrite": "*",
    -        "magento/module-catalog-graph-ql": "*",
    -        "magento/module-url-rewrite-graph-ql": "*"
    +        "magento/module-catalog-url-rewrite": "100.3.*",
    +        "magento/module-catalog-graph-ql": "100.3.*",
    +        "magento/module-url-rewrite-graph-ql": "100.3.*"
         },
         "license": [
             "OSL-3.0",
    @@ -24,5 +24,6 @@
             "psr-4": {
                 "Magento\\CatalogUrlRewriteGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Catalog/ViewModel/Product/Breadcrumbs.php+1 1 modified
    @@ -117,7 +117,7 @@ public function getJsonConfigurationHtmlEscaped() : string
          * Returns breadcrumb json.
          *
          * @return string
    -     * @deprecated 103.0.0 in favor of new method with name {suffix}Html{postfix}()
    +     * @deprecated 102.0.11 in favor of new method with name {suffix}Html{postfix}()
          */
         public function getJsonConfiguration()
         {
    
  • app/code/Magento/CatalogWidget/composer.json+12 11 modified
    @@ -6,16 +6,16 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-rule": "*",
    -        "magento/module-store": "*",
    -        "magento/module-widget": "*",
    -        "magento/module-wishlist": "*",
    -        "magento/module-theme": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-rule": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-widget": "101.1.*",
    +        "magento/module-wishlist": "101.1.*",
    +        "magento/module-theme": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -29,5 +29,6 @@
             "psr-4": {
                 "Magento\\CatalogWidget\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/CheckoutAgreements/composer.json+7 6 modified
    @@ -6,11 +6,11 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -24,5 +24,6 @@
             "psr-4": {
                 "Magento\\CheckoutAgreements\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/CheckoutAgreementsGraphQl/composer.json+6 5 modified
    @@ -4,12 +4,12 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-store": "*",
    -        "magento/module-checkout-agreements": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-checkout-agreements": "100.3.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*"
    +        "magento/module-graph-ql": "100.3.*"
         },
         "license": [
             "OSL-3.0",
    @@ -22,5 +22,6 @@
             "psr-4": {
                 "Magento\\CheckoutAgreementsGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.1"
     }
    
  • app/code/Magento/Checkout/composer.json+22 21 modified
    @@ -6,28 +6,28 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-msrp": "*",
    -        "magento/module-page-cache": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-sales-rule": "*",
    -        "magento/module-shipping": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-captcha": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-inventory": "100.3.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-msrp": "100.3.*",
    +        "magento/module-page-cache": "100.3.*",
    +        "magento/module-payment": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-sales-rule": "101.1.*",
    +        "magento/module-shipping": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-tax": "100.3.*",
    +        "magento/module-theme": "101.0.*",
    +        "magento/module-ui": "101.1.*",
    +        "magento/module-captcha": "100.3.*"
         },
         "suggest": {
    -        "magento/module-cookie": "*"
    +        "magento/module-cookie": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -41,5 +41,6 @@
             "psr-4": {
                 "Magento\\Checkout\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/Checkout/Controller/Sidebar/RemoveItem.php+12 1 modified
    @@ -7,6 +7,9 @@
     
     use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface;
     
    +/**
    + * Controller for removing quote item from shopping cart.
    + */
     class RemoveItem extends \Magento\Framework\App\Action\Action implements HttpPostActionInterface
     {
         /**
    @@ -56,7 +59,7 @@ public function __construct(
         }
     
         /**
    -     * @return $this
    +     * @inheritdoc
          */
         public function execute()
         {
    @@ -67,11 +70,17 @@ public function execute()
             try {
                 $this->sidebar->checkQuoteItem($itemId);
                 $this->sidebar->removeQuoteItem($itemId);
    +
                 return $this->jsonResponse();
             } catch (\Magento\Framework\Exception\LocalizedException $e) {
                 return $this->jsonResponse($e->getMessage());
    +        } catch (\Zend_Db_Exception $e) {
    +            $this->logger->critical($e);
    +
    +            return $this->jsonResponse(__('An unspecified error occurred. Please contact us for assistance.'));
             } catch (\Exception $e) {
                 $this->logger->critical($e);
    +
                 return $this->jsonResponse($e->getMessage());
             }
         }
    @@ -92,6 +101,8 @@ protected function jsonResponse($error = '')
         }
     
         /**
    +     * Return formKey Validator object instance.
    +     *
          * @return \Magento\Framework\Data\Form\FormKey\Validator
          * @deprecated 100.0.9
          */
    
  • app/code/Magento/Checkout/Test/Mftf/ActionGroup/AssertStorefrontOrderIsNotPlacedActionGroup.xml+17 0 added
    @@ -0,0 +1,17 @@
    +<?xml version="1.0" encoding="UTF-8"?>
    +<!--
    + /**
    +  * Copyright © Magento, Inc. All rights reserved.
    +  * See COPYING.txt for license details.
    +  */
    +-->
    +
    +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
    +    <actionGroup name="AssertStorefrontOrderIsNotPlacedActionGroup" extends="AssertStorefrontOrderCannotBePlacedActionGroup">
    +        <annotations>
    +            <description>Validates order cannot be placed and checks error message.</description>
    +        </annotations>
    +        <remove keyForRemoval="assertErrorMessage"/>
    +        <seeElementInDOM selector="{{CheckoutHeaderSection.errorMessageContainsText(error)}}" stepKey="assertErrorMessageInDOM"/>
    +    </actionGroup>
    +</actionGroups>
    
  • app/code/Magento/Checkout/Test/Mftf/ActionGroup/StorefrontCheckoutClickNextOnShippingStepActionGroup.xml+17 0 added
    @@ -0,0 +1,17 @@
    +<?xml version="1.0" encoding="UTF-8"?>
    +<!--
    + /**
    +  * Copyright © Magento, Inc. All rights reserved.
    +  * See COPYING.txt for license details.
    +  */
    +-->
    +
    +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +              xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
    +    <actionGroup name="StorefrontCheckoutClickNextOnShippingStepActionGroup" extends="StorefrontCheckoutForwardFromShippingStep">
    +        <annotations>
    +            <description>Scrolls and clicks next on Checkout Shipping step</description>
    +        </annotations>
    +        <scrollTo selector="{{CheckoutShippingSection.next}}" before="clickNext" stepKey="scrollToNextButton"/>
    +    </actionGroup>
    +</actionGroups>
    
  • app/code/Magento/Checkout/Test/Mftf/Section/CheckoutHeaderSection.xml+1 0 modified
    @@ -9,5 +9,6 @@
         <section name="CheckoutHeaderSection">
             <element name="shippingMethodStep" type="text" selector=".opc-progress-bar-item:nth-of-type(1)"/>
             <element name="reviewAndPaymentsStep" type="text" selector=".opc-progress-bar-item:nth-of-type(2)"/>
    +        <element name="errorMessageContainsText" type="text" selector="//div[contains(@class, 'message message-error error')]//div[contains(text(), '{{text}}')]" parameterized="true"/>
         </section>
     </sections>
    
  • app/code/Magento/Checkout/Test/Mftf/Test/DeleteConfigurableProductFromShoppingCartTest.xml+3 0 modified
    @@ -60,6 +60,9 @@
     
                 <!-- Delete category -->
                 <deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Add configurable product to the cart  -->
    
  • app/code/Magento/Checkout/Test/Mftf/Test/OnePageCheckoutWithAllProductTypesTest.xml+3 0 modified
    @@ -111,6 +111,9 @@
     
                 <!-- Logout customer -->
                 <actionGroup ref="StorefrontCustomerLogoutActionGroup" stepKey="customerLogoutStorefront"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Add Simple Product to cart -->
    
  • app/code/Magento/Checkout/Test/Mftf/Test/StorefrontAddConfigurableProductToShoppingCartTest.xml+3 0 modified
    @@ -120,6 +120,9 @@
                 <deleteData createDataKey="createConfigProduct" stepKey="deleteProduct"/>
                 <deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Add Configurable Product to the cart -->
    
  • app/code/Magento/Checkout/Test/Mftf/Test/StorefrontCheckoutWithSpecialPriceProductsTest.xml+4 1 modified
    @@ -102,6 +102,9 @@
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteProductAttribute"/>
                 <deleteData createDataKey="createCustomer" stepKey="deleteCustomer"/>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!--Open Product page in StoreFront and assert product and price range -->
    @@ -168,4 +171,4 @@
             <!-- Assert order buttons -->
             <actionGroup ref="AdminAssertOrderAvailableButtonsActionGroup" stepKey="assertOrderButtons"/>
         </test>
    -</tests>
    \ No newline at end of file
    +</tests>
    
  • app/code/Magento/Checkout/Test/Mftf/Test/StorefrontDeleteConfigurableProductFromMiniShoppingCartTest.xml+4 1 modified
    @@ -72,6 +72,9 @@
                 <deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteProductAttribute"/>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Add Configurable Product to the cart -->
    @@ -97,4 +100,4 @@
             <actionGroup ref="assertMiniCartEmpty" stepKey="miniCartEnpty"/>
             <dontSee selector="{{StorefrontMinicartSection.productLinkByName($$createConfigProduct.name$$)}}" stepKey="verifyAssertProductAbsentInMiniShoppingCart"/>
         </test>
    -</tests>
    \ No newline at end of file
    +</tests>
    
  • app/code/Magento/Checkout/Test/Mftf/Test/StorefrontGuestCheckoutUsingFreeShippingAndTaxesTest.xml+4 1 modified
    @@ -109,6 +109,9 @@
                 <createData entity="DefaultShippingMethodsConfig" stepKey="defaultShippingMethodsConfig"/>
                 <createData entity="DefaultMinimumOrderAmount" stepKey="defaultMinimumOrderAmount"/>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Create a Tax Rule -->
    @@ -220,4 +223,4 @@
                 <argument name="customerGroup" value=""/>
             </actionGroup>
         </test>
    -</tests>
    \ No newline at end of file
    +</tests>
    
  • app/code/Magento/Checkout/Test/Mftf/Test/StorefrontNotApplicableShippingMethodInReviewAndPaymentStepTest.xml+2 2 modified
    @@ -9,7 +9,7 @@
            xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
         <test name="StorefrontNotApplicableShippingMethodInReviewAndPaymentStepTest">
             <annotations>
    -            <title value="Not applicable Shipping Method In Review and Payment Step"/>
    +            <title value="DEPRECATED. Not applicable Shipping Method In Review and Payment Step"/>
                 <stories value="Checkout Shipping Method Recalculation after Coupon Code Added"/>
                 <description value="User should not be able to place order when free shipping declined after applying coupon code"/>
                 <features value="Checkout"/>
    @@ -18,7 +18,7 @@
                 <useCaseId value="MC-21926"/>
                 <group value="Checkout"/>
                 <skip>
    -                <issueId value="MC-29764"/>
    +                <issueId value="DEPRECATED">Use StorefrontShippingMethodIsNotApplicableInReviewAndPaymentStepTest instead</issueId>
                 </skip>
             </annotations>
     
    
  • app/code/Magento/Checkout/Test/Mftf/Test/StorefrontShippingMethodIsNotApplicableInReviewAndPaymentStepTest.xml+201 0 added
    @@ -0,0 +1,201 @@
    +<?xml version="1.0" encoding="UTF-8"?>
    +<!--
    + /**
    +  * Copyright © Magento, Inc. All rights reserved.
    +  * See COPYING.txt for license details.
    +  */
    +-->
    +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +       xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
    +    <test name="StorefrontShippingMethodIsNotApplicableInReviewAndPaymentStepTest">
    +        <annotations>
    +            <title value="Not applicable Shipping Method In Review and Payment Step"/>
    +            <stories value="Checkout Shipping Method Recalculation after Coupon Code Added"/>
    +            <description value="User should not be able to place order when free shipping declined after applying coupon code"/>
    +            <features value="Checkout"/>
    +            <severity value="MAJOR"/>
    +            <testCaseId value="MC-22625"/>
    +            <useCaseId value="MC-21926"/>
    +            <group value="checkout"/>
    +        </annotations>
    +
    +        <before>
    +            <!-- Enable Free Shipping Method and set Minimum Order Amount to 100-->
    +            <magentoCLI command="config:set {{AdminFreeshippingActiveConfigData.path}} {{AdminFreeshippingActiveConfigData.enabled}}" stepKey="enableFreeShippingMethod" />
    +            <magentoCLI command="config:set {{AdminFreeshippingMinimumOrderAmountConfigData.path}} {{AdminFreeshippingMinimumOrderAmountConfigData.hundred}}" stepKey="setFreeShippingMethodMinimumOrderAmountToBe100" />
    +
    +            <!--Set Fedex configs data-->
    +            <magentoCLI command="config:set {{AdminFedexEnableForCheckoutConfigData.path}} {{AdminFedexEnableForCheckoutConfigData.value}}" stepKey="enableCheckout"/>
    +            <magentoCLI command="config:set {{AdminFedexEnableSandboxModeConfigData.path}} {{AdminFedexEnableSandboxModeConfigData.value}}" stepKey="enableSandbox"/>
    +            <magentoCLI command="config:set {{AdminFedexEnableDebugConfigData.path}} {{AdminFedexEnableDebugConfigData.value}}" stepKey="enableDebug"/>
    +            <magentoCLI command="config:set {{AdminFedexEnableShowMethodConfigData.path}} {{AdminFedexEnableShowMethodConfigData.value}}" stepKey="enableShowMethod"/>
    +
    +            <!--Set StoreInformation configs data-->
    +            <actionGroup ref="AdminSetStoreInformationConfigurationActionGroup" stepKey="setStoreInformationConfigData">
    +                <argument name="telephone" value="{{DE_Address_Berlin_Not_Default_Address.telephone}}"/>
    +                <argument name="country" value="{{DE_Address_Berlin_Not_Default_Address.country_id}}"/>
    +                <argument name="state" value="{{DE_Address_Berlin_Not_Default_Address.state}}"/>
    +                <argument name="city" value="{{DE_Address_Berlin_Not_Default_Address.city}}"/>
    +                <argument name="postcode" value="{{DE_Address_Berlin_Not_Default_Address.postcode}}"/>
    +                <argument name="street" value="{{DE_Address_Berlin_Not_Default_Address.street[0]}}"/>
    +            </actionGroup>
    +
    +            <!--Set Shipping settings origin data-->
    +            <actionGroup ref="AdminSetShippingOriginConfigurationActionGroup" stepKey="setShippingOriginConfigurationData">
    +                <argument name="address" value="DE_Address_Berlin_Not_Default_Address"/>
    +            </actionGroup>
    +
    +            <!-- Create Simple Product -->
    +            <createData entity="defaultSimpleProduct" stepKey="createSimpleProduct">
    +                <field key="price">100</field>
    +            </createData>
    +            <!-- Create Cart Price Rule with 10% discount -->
    +            <createData entity="ApiSalesRule" stepKey="createCartPriceRule"/>
    +            <!-- Create Coupon code for the Cart Price Rule -->
    +            <createData entity="ApiSalesRuleCoupon" stepKey="createCartPriceRuleCoupon">
    +                <requiredEntity createDataKey="createCartPriceRule"/>
    +            </createData>
    +            <!-- Create Customer with filled Shipping & Billing Address -->
    +            <createData entity="CustomerEntityOne" stepKey="createCustomer"/>
    +        </before>
    +
    +        <after>
    +            <actionGroup ref="StorefrontCustomerLogoutActionGroup" stepKey="logoutFromStorefront"/>
    +            <deleteData createDataKey="createCustomer" stepKey="deleteCustomer"/>
    +            <deleteData createDataKey="createCartPriceRule" stepKey="deleteCartPriceRule"/>
    +            <deleteData createDataKey="createSimpleProduct" stepKey="deleteSimpleProduct"/>
    +            <magentoCLI command="config:set {{AdminFreeshippingMinimumOrderAmountConfigData.path}} {{AdminFreeshippingMinimumOrderAmountConfigData.default}}" stepKey="setFreeShippingMethodMinimumOrderAmountAsDefault" />
    +            <magentoCLI command="config:set {{AdminFreeshippingActiveConfigData.path}} {{AdminFreeshippingActiveConfigData.disabled}}" stepKey="disableFreeShippingMethod" />
    +            <!--Reset configs-->
    +            <magentoCLI command="config:set {{AdminFedexDisableForCheckoutConfigData.path}} {{AdminFedexDisableForCheckoutConfigData.value}}" stepKey="disableCheckout"/>
    +            <magentoCLI command="config:set {{AdminFedexDisableSandboxModeConfigData.path}} {{AdminFedexDisableSandboxModeConfigData.value}}" stepKey="disableSandbox"/>
    +            <magentoCLI command="config:set {{AdminFedexDisableDebugConfigData.path}} {{AdminFedexDisableDebugConfigData.value}}" stepKey="disableDebug"/>
    +            <magentoCLI command="config:set {{AdminFedexDisableShowMethodConfigData.path}} {{AdminFedexDisableShowMethodConfigData.value}}" stepKey="disableShowMethod"/>
    +            <actionGroup ref="AdminResetShippingOriginConfigurationActionGroup" stepKey="resetShippingOriginConfig"/>
    +            <actionGroup ref="AdminSetStoreInformationConfigurationActionGroup" stepKey="resetStoreInformationConfig">
    +                <argument name="storeName" value=""/>
    +                <argument name="storeHoursOfOperation" value=""/>
    +                <argument name="vatNumber" value=""/>
    +                <argument name="telephone" value=""/>
    +                <argument name="country" value=""/>
    +                <argument name="state" value=""/>
    +                <argument name="city" value=""/>
    +                <argument name="postcode" value=""/>
    +                <argument name="street" value=""/>
    +            </actionGroup>
    +            <actionGroup ref="logout" stepKey="logoutFromAdmin"/>
    +        </after>
    +
    +        <!-- Guest Customer Test Scenario -->
    +        <!-- Add Simple Product to Cart -->
    +        <actionGroup ref="StorefrontAddSimpleProductToShoppingCartActionGroup" stepKey="addProductToCart">
    +            <argument name="product" value="$createSimpleProduct$"/>
    +        </actionGroup>
    +
    +        <!-- Go to Checkout -->
    +        <actionGroup ref="GoToCheckoutFromMinicartActionGroup" stepKey="goToCheckout"/>
    +
    +        <!-- Fill all required fields -->
    +        <actionGroup ref="GuestCheckoutFillNewShippingAddressActionGroup" stepKey="fillNewShippingAddress">
    +            <argument name="customer" value="Simple_Customer_Without_Address" />
    +            <argument name="address" value="US_Address_TX"/>
    +        </actionGroup>
    +        <waitForLoadingMaskToDisappear stepKey="waitForFreeShippingMethodAppears"/>
    +        <!-- Select Free Shipping -->
    +        <actionGroup ref="StorefrontSetShippingMethodActionGroup" stepKey="setShippingMethodFreeShipping">
    +            <argument name="shippingMethodName" value="Free Shipping"/>
    +        </actionGroup>
    +
    +        <!-- Go to Order review -->
    +        <actionGroup ref="StorefrontCheckoutClickNextOnShippingStepActionGroup" stepKey="goToCheckoutReview"/>
    +
    +        <!-- Checkout select Check/Money Order payment -->
    +        <actionGroup ref="CheckoutSelectCheckMoneyOrderPaymentActionGroup" stepKey="selectCheckMoneyPayment"/>
    +        <!-- Select payment solution -->
    +        <checkOption selector="{{CheckoutPaymentSection.billingAddressNotSameCheckbox}}" stepKey="selectPaymentSolution" />
    +        <waitForElement selector="{{CheckoutPaymentSection.placeOrder}}" time="30" stepKey="waitForPlaceOrderButton"/>
    +
    +        <!-- Apply Discount Coupon to the Order -->
    +        <actionGroup ref="StorefrontApplyDiscountCodeActionGroup" stepKey="applyDiscountCoupon">
    +            <argument name="discountCode" value="$createCartPriceRuleCoupon.code$"/>
    +        </actionGroup>
    +
    +        <!-- Assert Shipping total is not yet calculated -->
    +        <actionGroup ref="AssertStorefrontNotCalculatedValueInShippingTotalInOrderSummaryActionGroup" stepKey="assertNotYetCalculated"/>
    +
    +        <!--  Assert order cannot be placed and error message will shown. -->
    +        <actionGroup ref="AssertStorefrontOrderIsNotPlacedActionGroup" stepKey="assertOrderCannotBePlaced">
    +            <argument name="error" value="The shipping method is missing. Select the shipping method and try again."/>
    +        </actionGroup>
    +
    +        <!-- Go to checkout page -->
    +        <actionGroup ref="OpenStoreFrontCheckoutShippingPageActionGroup" stepKey="openCheckoutShippingPage"/>
    +
    +        <!-- Chose flat rate -->
    +        <actionGroup ref="StorefrontSetShippingMethodActionGroup" stepKey="setShippingMethodFlatRate">
    +            <argument name="shippingMethodName" value="Flat Rate"/>
    +        </actionGroup>
    +
    +        <!-- Go to Order review -->
    +        <actionGroup ref="StorefrontCheckoutClickNextOnShippingStepActionGroup" stepKey="goToCheckoutOrderReview"/>
    +
    +        <!-- Place order assert succeed -->
    +        <actionGroup ref="ClickPlaceOrderActionGroup" stepKey="checkoutPlaceOrder"/>
    +
    +        <!-- Loged in Customer Test Scenario -->
    +        <!-- Login with created Customer -->
    +        <actionGroup ref="LoginToStorefrontActionGroup" stepKey="loginAsCustomer">
    +            <argument name="Customer" value="$createCustomer$"/>
    +        </actionGroup>
    +
    +        <!-- Add Simple Product to Cart -->
    +        <actionGroup ref="StorefrontAddSimpleProductToShoppingCartActionGroup" stepKey="addSimpleProductToCart">
    +            <argument name="product" value="$createSimpleProduct$"/>
    +        </actionGroup>
    +
    +        <!-- Go to Checkout -->
    +        <actionGroup ref="GoToCheckoutFromMinicartActionGroup" stepKey="proceedToCheckout"/>
    +        <waitForLoadingMaskToDisappear stepKey="waitForShippingMethodAppears"/>
    +        <!-- Select Free Shipping -->
    +        <actionGroup ref="StorefrontSetShippingMethodActionGroup" stepKey="selectFreeShippingMethod">
    +            <argument name="shippingMethodName" value="Free Shipping"/>
    +        </actionGroup>
    +
    +        <!-- Go to Order review -->
    +        <actionGroup ref="StorefrontCheckoutClickNextOnShippingStepActionGroup" stepKey="goToCheckoutPaymentPage"/>
    +
    +        <!-- Checkout select Check/Money Order payment -->
    +        <actionGroup ref="CheckoutSelectCheckMoneyOrderPaymentActionGroup" stepKey="selectCheckMoneyPaymentMethod"/>
    +
    +        <!-- Select payment solution -->
    +        <checkOption selector="{{CheckoutPaymentSection.billingAddressNotSameCheckbox}}" stepKey="checkBillingAddressNotSameCheckbox"/>
    +        <waitForElementVisible selector="{{CheckoutPaymentSection.placeOrder}}" time="30" stepKey="waitForPlaceOrderButtonVisible"/>
    +
    +        <!-- Apply Discount Coupon to the Order -->
    +        <actionGroup ref="StorefrontApplyDiscountCodeActionGroup" stepKey="applyDiscountCouponCode">
    +            <argument name="discountCode" value="$createCartPriceRuleCoupon.code$"/>
    +        </actionGroup>
    +
    +        <!-- Assert Shipping total is not yet calculated -->
    +        <actionGroup ref="AssertStorefrontNotCalculatedValueInShippingTotalInOrderSummaryActionGroup" stepKey="assertShippingTotalNotYetCalculated"/>
    +
    +        <!--  Assert order cannot be placed and error message will shown. -->
    +        <actionGroup ref="AssertStorefrontOrderIsNotPlacedActionGroup" stepKey="assertOrderIsNotPlaced">
    +            <argument name="error" value="The shipping method is missing. Select the shipping method and try again."/>
    +        </actionGroup>
    +
    +        <!-- Go to checkout page -->
    +        <actionGroup ref="OpenStoreFrontCheckoutShippingPageActionGroup" stepKey="goToCheckoutShippingPage"/>
    +
    +        <!-- Chose flat rate -->
    +        <actionGroup ref="StorefrontSetShippingMethodActionGroup" stepKey="selectFlatRateShippingMethod">
    +            <argument name="shippingMethodName" value="Flat Rate"/>
    +        </actionGroup>
    +
    +        <!-- Go to Order review -->
    +        <actionGroup ref="StorefrontCheckoutClickNextOnShippingStepActionGroup" stepKey="goToCheckoutPaymentStep"/>
    +
    +        <!-- Place order assert succeed -->
    +        <actionGroup ref="ClickPlaceOrderActionGroup" stepKey="placeOrder"/>
    +    </test>
    +</tests>
    
  • app/code/Magento/Checkout/Test/Unit/Controller/Sidebar/RemoveItemTest.php+46 0 modified
    @@ -234,6 +234,52 @@ public function testExecuteWithException()
             $this->assertEquals('json represented', $this->removeItem->execute());
         }
     
    +    /**
    +     * Test controller when DB exception is thrown.
    +     *
    +     * @return void
    +     */
    +    public function testExecuteWithDbException(): void
    +    {
    +        $itemId = 1;
    +        $dbError = 'Error';
    +        $message = __('An unspecified error occurred. Please contact us for assistance.');
    +        $response = [
    +            'success' => false,
    +            'error_message' => $message,
    +        ];
    +
    +        $this->getPropertyValue($this->removeItem, 'formKeyValidator')
    +            ->expects($this->once())
    +            ->method('validate')
    +            ->with($this->requestMock)
    +            ->willReturn(true);
    +        $this->requestMock->expects($this->once())->method('getParam')->with('item_id')->willReturn($itemId);
    +
    +        $exception = new \Zend_Db_Exception($dbError);
    +
    +        $this->sidebarMock->expects($this->once())
    +            ->method('checkQuoteItem')
    +            ->with($itemId)
    +            ->willThrowException($exception);
    +
    +        $this->loggerMock->expects($this->once())->method('critical')->with($exception);
    +
    +        $this->sidebarMock->expects($this->once())->method('getResponseData')->with($message)->willReturn($response);
    +        $encodedResponse = json_encode($response);
    +        $this->jsonHelperMock->expects($this->once())
    +            ->method('jsonEncode')
    +            ->with($response)
    +            ->willReturn($encodedResponse);
    +
    +        $this->responseMock->expects($this->once())
    +            ->method('representJson')
    +            ->with($encodedResponse)
    +            ->willReturn($this->responseMock);
    +
    +        $this->removeItem->execute();
    +    }
    +
         public function testExecuteWhenFormKeyValidationFailed()
         {
             $resultRedirect = $this->createMock(\Magento\Framework\Controller\Result\Redirect::class);
    
  • app/code/Magento/Cms/Api/Data/PageInterface.php+4 4 modified
    @@ -125,7 +125,7 @@ public function getSortOrder();
          * Get layout update xml
          *
          * @return string|null
    -     * @deprecated Existing updates are applied, new are not accepted.
    +     * @deprecated 103.0.4 Existing updates are applied, new are not accepted.
          */
         public function getLayoutUpdateXml();
     
    @@ -146,7 +146,7 @@ public function getCustomRootTemplate();
         /**
          * Get custom layout update xml
          *
    -     * @deprecated Existing updates are applied, new are not accepted.
    +     * @deprecated 103.0.4 Existing updates are applied, new are not accepted.
          * @see \Magento\Cms\Model\Page\CustomLayout\Data\CustomLayoutSelectedInterface
          * @return string|null
          */
    @@ -275,7 +275,7 @@ public function setSortOrder($sortOrder);
          *
          * @param string $layoutUpdateXml
          * @return \Magento\Cms\Api\Data\PageInterface
    -     * @deprecated Existing updates are applied, new are not accepted.
    +     * @deprecated 103.0.4 Existing updates are applied, new are not accepted.
          */
         public function setLayoutUpdateXml($layoutUpdateXml);
     
    @@ -300,7 +300,7 @@ public function setCustomRootTemplate($customRootTemplate);
          *
          * @param string $customLayoutUpdateXml
          * @return \Magento\Cms\Api\Data\PageInterface
    -     * @deprecated Existing updates are applied, new are not accepted.
    +     * @deprecated 103.0.4 Existing updates are applied, new are not accepted.
          * @see \Magento\Cms\Model\Page\CustomLayout\Data\CustomLayoutSelectedInterface
          */
         public function setCustomLayoutUpdateXml($customLayoutUpdateXml);
    
  • app/code/Magento/Cms/composer.json+13 12 modified
    @@ -6,19 +6,19 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-email": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-store": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-variable": "*",
    -        "magento/module-widget": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-email": "101.0.*",
    +        "magento/module-media-storage": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-theme": "101.0.*",
    +        "magento/module-ui": "101.1.*",
    +        "magento/module-variable": "100.3.*",
    +        "magento/module-widget": "101.1.*"
         },
         "suggest": {
    -        "magento/module-cms-sample-data": "*"
    +        "magento/module-cms-sample-data": "Sample Data version: 100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -32,5 +32,6 @@
             "psr-4": {
                 "Magento\\Cms\\": ""
             }
    -    }
    +    },
    +    "version": "103.0.4-p2"
     }
    
  • app/code/Magento/Cms/Controller/Adminhtml/Page/PostDataProcessor.php+1 1 modified
    @@ -79,7 +79,7 @@ public function filter($data)
          *
          * @param array $data
          * @return bool     Return FALSE if some item is invalid
    -     * @deprecated 103.0.3
    +     * @deprecated 103.0.2
          */
         public function validate($data)
         {
    
  • app/code/Magento/CmsGraphQl/composer.json+8 7 modified
    @@ -4,14 +4,14 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-widget": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-cms": "103.0.*",
    +        "magento/module-widget": "101.1.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*",
    -        "magento/module-graph-ql-cache": "*",
    -        "magento/module-store-graph-ql": "*"
    +        "magento/module-graph-ql": "100.3.*",
    +        "magento/module-graph-ql-cache": "100.3.*",
    +        "magento/module-store-graph-ql": "100.3.*"
         },
         "license": [
             "OSL-3.0",
    @@ -24,5 +24,6 @@
             "psr-4": {
                 "Magento\\CmsGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Cms/Model/Template/Filter.php+2 4 modified
    @@ -5,8 +5,6 @@
      */
     namespace Magento\Cms\Model\Template;
     
    -use Magento\Framework\Exception\LocalizedException;
    -
     /**
      * Cms Template Filter Model
      */
    @@ -41,8 +39,8 @@ public function mediaDirective($construction)
         {
             // phpcs:ignore Magento2.Functions.DiscouragedFunction
             $params = $this->getParameters(html_entity_decode($construction[2], ENT_QUOTES));
    -        if (preg_match('/\.\.(\\\|\/)/', $params['url'])) {
    -            throw new \InvalidArgumentException('Image path must be absolute');
    +        if (preg_match('/(^.*:\/\/.*|\.\.\/.*)/', $params['url'])) {
    +            throw new \InvalidArgumentException('Image path must be absolute and not include URLs');
             }
     
             return $this->_storeManager->getStore()->getBaseMediaDir() . '/' . $params['url'];
    
  • app/code/Magento/Cms/Test/Unit/Model/Template/FilterTest.php+20 0 modified
    @@ -105,4 +105,24 @@ public function testMediaDirectiveRelativePath()
                 ->willReturn($baseMediaDir);
             $this->filter->mediaDirective($construction);
         }
    +
    +    /**
    +     * Test using media directive with a URL path including schema.
    +     *
    +     * @covers \Magento\Cms\Model\Template\Filter::mediaDirective
    +     * @expectedException \InvalidArgumentException
    +     */
    +    public function testMediaDirectiveURL()
    +    {
    +        $baseMediaDir = 'pub/media';
    +        $construction = [
    +            '{{media url="http://wysiwyg/images/image.jpg"}}',
    +            'media',
    +            ' url="http://wysiwyg/images/../image.jpg"'
    +        ];
    +        $this->storeMock->expects($this->any())
    +            ->method('getBaseMediaDir')
    +            ->willReturn($baseMediaDir);
    +        $this->filter->mediaDirective($construction);
    +    }
     }
    
  • app/code/Magento/CmsUrlRewrite/composer.json+6 5 modified
    @@ -6,10 +6,10 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-store": "*",
    -        "magento/module-url-rewrite": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-cms": "103.0.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-url-rewrite": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -23,5 +23,6 @@
             "psr-4": {
                 "Magento\\CmsUrlRewrite\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/CmsUrlRewriteGraphQl/composer.json+8 7 modified
    @@ -4,14 +4,14 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-store": "*",
    -        "magento/module-url-rewrite-graph-ql": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-cms": "103.0.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-url-rewrite-graph-ql": "100.3.*"
         },
         "suggest": {
    -        "magento/module-cms-url-rewrite": "*",
    -        "magento/module-catalog-graph-ql": "*"
    +        "magento/module-cms-url-rewrite": "100.3.*",
    +        "magento/module-catalog-graph-ql": "100.3.*"
         },
         "license": [
             "OSL-3.0",
    @@ -24,5 +24,6 @@
             "psr-4": {
                 "Magento\\CmsUrlRewriteGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Config/composer.json+10 9 modified
    @@ -6,14 +6,14 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-cron": "*",
    -        "magento/module-deploy": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-email": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-cron": "100.3.*",
    +        "magento/module-deploy": "100.3.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-email": "101.0.*",
    +        "magento/module-media-storage": "100.3.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -27,5 +27,6 @@
             "psr-4": {
                 "Magento\\Config\\": ""
             }
    -    }
    +    },
    +    "version": "101.1.4-p2"
     }
    
  • app/code/Magento/ConfigurableImportExport/composer.json+9 8 modified
    @@ -6,13 +6,13 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-import-export": "*",
    -        "magento/module-configurable-product": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-import-export": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-import-export": "101.0.*",
    +        "magento/module-configurable-product": "100.3.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-import-export": "100.3.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -26,5 +26,6 @@
             "psr-4": {
                 "Magento\\ConfigurableImportExport\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/ConfigurableProduct/composer.json+21 20 modified
    @@ -6,27 +6,27 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-inventory": "100.3.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-media-storage": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-ui": "101.1.*"
         },
         "suggest": {
    -        "magento/module-msrp": "*",
    -        "magento/module-webapi": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-sales-rule": "*",
    -        "magento/module-product-video": "*",
    -        "magento/module-configurable-sample-data": "*",
    -        "magento/module-product-links-sample-data": "*",
    -        "magento/module-tax": "*"
    +        "magento/module-msrp": "100.3.*",
    +        "magento/module-webapi": "100.3.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-sales-rule": "101.1.*",
    +        "magento/module-product-video": "100.3.*",
    +        "magento/module-configurable-sample-data": "Sample Data version: 100.3.*",
    +        "magento/module-product-links-sample-data": "Sample Data version: 100.3.*",
    +        "magento/module-tax": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -40,5 +40,6 @@
             "psr-4": {
                 "Magento\\ConfigurableProduct\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/ConfigurableProductGraphQl/composer.json+8 7 modified
    @@ -4,12 +4,12 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/module-catalog": "*",
    -        "magento/module-configurable-product": "*",
    -        "magento/module-catalog-graph-ql": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-quote-graph-ql": "*",
    -        "magento/framework": "*"
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-configurable-product": "100.3.*",
    +        "magento/module-catalog-graph-ql": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-quote-graph-ql": "100.3.*",
    +        "magento/framework": "102.0.*"
         },
         "license": [
             "OSL-3.0",
    @@ -22,5 +22,6 @@
             "psr-4": {
                 "Magento\\ConfigurableProductGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/ConfigurableProductSales/composer.json+7 6 modified
    @@ -6,13 +6,13 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-store": "101.0.*"
         },
         "suggest": {
    -        "magento/module-configurable-product": "*"
    +        "magento/module-configurable-product": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -26,5 +26,6 @@
             "psr-4": {
                 "Magento\\ConfigurableProductSales\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminAddDefaultImageConfigurableTest.xml+3 0 modified
    @@ -89,6 +89,9 @@
                 <deleteData createDataKey="baseConfigProductHandle" stepKey="deleteConfig"/>
                 <deleteData createDataKey="categoryHandle" stepKey="deleteCategory"/>
                 <deleteData createDataKey="productAttributeHandle" stepKey="deleteProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="productIndexPage"/>
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckConfigurableProductAttributeValueUniquenessTest.xml+3 0 modified
    @@ -34,6 +34,9 @@
                 <deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
                 <deleteData createDataKey="createProductAttribute" stepKey="deleteAttribute"/>
                 <actionGroup ref="logout" stepKey="logOut"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <!--Create configurable product-->
             <comment userInput="Create configurable product" stepKey="createConfProd"/>
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckResultsOfColorAndOtherFiltersTest.xml+3 0 modified
    @@ -109,6 +109,9 @@
                 <actionGroup ref="AdminClearFiltersActionGroup" stepKey="clearProductsGridFilter"/>
                 <!-- Log out -->
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <!-- Create three configurable products with options -->
             <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="amOnProductGridPage"/>
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCheckValidatorConfigurableProductTest.xml+3 0 modified
    @@ -44,6 +44,9 @@
                     <argument name="ProductAttribute" value="productDropDownAttribute"/>
                 </actionGroup>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Find the product that we just created using the product grid -->
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminConfigurableProductDeleteTest.xml+6 0 modified
    @@ -70,6 +70,9 @@
                 <deleteData createDataKey="createConfigChildProduct1" stepKey="deleteConfigChildProduct1"/>
                 <deleteData createDataKey="createConfigChildProduct2" stepKey="deleteConfigChildProduct2"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- assert product visible in storefront -->
    @@ -225,6 +228,9 @@
                 <deleteData createDataKey="createConfigChildProduct6" stepKey="deleteConfigChildProduct6"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
                 <deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Search for prefix of the 3 products we created via api -->
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminConfigurableProductLongSkuTest.xml+3 0 modified
    @@ -53,6 +53,9 @@
                 <!--Clean up category-->
                 <deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
                 <actionGroup ref="logout" stepKey="adminLogout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
              <!--Create a configurable product with long name and sku-->
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminConfigurableProductOutOfStockTest.xml+9 0 modified
    @@ -83,6 +83,9 @@
                 <deleteData createDataKey="createConfigChildProduct1" stepKey="deleteConfigChildProduct1"/>
                 <deleteData createDataKey="createConfigChildProduct2" stepKey="deleteConfigChildProduct2"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Check to make sure that the configurable product shows up as in stock -->
    @@ -204,6 +207,9 @@
                 <deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
                 <deleteData createDataKey="createConfigProduct" stepKey="deleteConfigProduct"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Check to make sure that the configurable product shows up as in stock -->
    @@ -306,6 +312,9 @@
                 <deleteData createDataKey="createConfigProduct" stepKey="deleteConfigProduct"/>
                 <deleteData createDataKey="createConfigChildProduct2" stepKey="deleteConfigChildProduct2"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Check to make sure that the configurable product shows up as in stock -->
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminConfigurableProductSearchTest.xml+6 0 modified
    @@ -73,6 +73,9 @@
                 <deleteData createDataKey="createConfigChildProduct1" stepKey="deleteConfigChildProduct1"/>
                 <deleteData createDataKey="createConfigChildProduct2" stepKey="deleteConfigChildProduct2"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="goToProductList"/>
    @@ -152,6 +155,9 @@
                 <deleteData createDataKey="createConfigChildProduct1" stepKey="deleteConfigChildProduct1"/>
                 <deleteData createDataKey="createConfigChildProduct2" stepKey="deleteConfigChildProduct2"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="goToProductList"/>
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminConfigurableProductUpdateAttributeTest.xml+6 0 modified
    @@ -105,6 +105,9 @@
                 <deleteData createDataKey="createConfigChildProduct2" stepKey="deleteConfigChildProduct2"/>
                 <deleteData createDataKey="createModifiableProductAttribute" stepKey="deleteModifiableProductAttribute"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Get the current option of the attribute before it was changed -->
    @@ -221,6 +224,9 @@
                 <deleteData createDataKey="createConfigChildProduct1" stepKey="deleteConfigChildProduct1"/>
                 <deleteData createDataKey="createConfigChildProduct2" stepKey="deleteConfigChildProduct2"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Find the product that we just created using the product grid -->
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminConfigurableProductUpdateTest.xml+6 0 modified
    @@ -145,6 +145,9 @@
                 <deleteData createDataKey="createConfigChildProduct2" stepKey="deleteConfigChildProduct2"/>
                 <deleteData createDataKey="createConfigProduct" stepKey="deleteConfigProduct"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +            <actionGroup ref="logout" stepKey="logout"/>
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!--check storefront for both options-->
    @@ -238,6 +241,9 @@
                 <deleteData createDataKey="createConfigChildProduct2" stepKey="deleteConfigChildProduct2"/>
                 <deleteData createDataKey="createConfigProduct" stepKey="deleteConfigProduct"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!--check storefront for both options-->
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCreateConfigurableProductWithDisabledChildrenProductsTest.xml+3 0 modified
    @@ -54,6 +54,9 @@
     
                 <!-- Log out -->
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Create configurable product -->
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCreateConfigurableProductWithImagesTest.xml+3 0 modified
    @@ -57,6 +57,9 @@
     
                 <!-- Log out -->
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!--Create configurable product -->
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCreateConfigurableProductWithThreeProductDisplayOutOfStockProductsTest.xml+4 1 modified
    @@ -77,6 +77,9 @@
     
                 <!-- Log out -->
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!--Create configurable product -->
    @@ -137,4 +140,4 @@
             <waitForPageLoad stepKey="waitForProductPageLoad"/>
             <see userInput="$$createConfigProductAttributeOptionThree.option[store_labels][1][label]$$" selector="{{StorefrontProductInfoMainSection.optionByAttributeId($$createConfigProductAttribute.attribute_id$$)}}" stepKey="assertOptionNotAvailable" />
         </test>
    -</tests>
    \ No newline at end of file
    +</tests>
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCreateConfigurableProductWithThreeProductDontDisplayOutOfStockProductsTest.xml+4 1 modified
    @@ -74,6 +74,9 @@
     
                 <!-- Log out -->
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!--Create configurable product -->
    @@ -131,4 +134,4 @@
             <waitForPageLoad stepKey="waitForPageLoad"/>
             <dontSee userInput="$$createConfigProductAttributeOptionThree.option[store_labels][1][label]$$" selector="{{StorefrontProductInfoMainSection.optionByAttributeId($$createConfigProductAttribute.attribute_id$$)}}" stepKey="assertOptionNotAvailable"/>
         </test>
    -</tests>
    \ No newline at end of file
    +</tests>
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminCreateConfigurableProductWithTierPriceForOneItemTest.xml+3 0 modified
    @@ -65,6 +65,9 @@
     
                 <!-- Log out -->
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!--Create configurable product -->
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminProductTypeSwitchingOnEditingTest.xml+6 0 modified
    @@ -44,6 +44,9 @@
                 </actionGroup>
                 <actionGroup ref="AdminClearFiltersActionGroup" stepKey="clearProductFilters"/>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <!--Add configurations to product-->
             <comment userInput="Add configurations to product" stepKey="commentAddConfigs"/>
    @@ -148,6 +151,9 @@
                 </actionGroup>
                 <actionGroup ref="AdminClearFiltersActionGroup" stepKey="clearProductFilters"/>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <!--Add configurations to product-->
             <comment userInput="Add configurations to product" stepKey="commentAddConfigurations"/>
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminRelatedProductsTest.xml+3 0 modified
    @@ -89,6 +89,9 @@
                 <deleteData createDataKey="baseConfigProductHandle" stepKey="deleteConfig"/>
                 <deleteData createDataKey="categoryHandle" stepKey="deleteCategory"/>
                 <deleteData createDataKey="productAttributeHandle" stepKey="deleteProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <comment userInput="Filter and edit simple product 1" stepKey="filterAndEditComment1"/>
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdminRemoveDefaultImageConfigurableTest.xml+2 0 modified
    @@ -89,6 +89,8 @@
                 <deleteData createDataKey="baseConfigProductHandle" stepKey="deleteConfig"/>
                 <deleteData createDataKey="categoryHandle" stepKey="deleteCategory"/>
                 <deleteData createDataKey="productAttributeHandle" stepKey="deleteProductAttribute"/>
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="productIndexPage"/>
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/AdvanceCatalogSearchConfigurableTest.xml+16 0 modified
    @@ -82,6 +82,10 @@
                 <deleteData createDataKey="simple2Handle" stepKey="deleteSimple2" before="delete"/>
                 <deleteData createDataKey="childProductHandle1" stepKey="deleteChildProduct1" before="delete"/>
                 <deleteData createDataKey="childProductHandle2" stepKey="deleteChildProduct2" before="delete"/>
    +            <deleteData createDataKey="productAttributeHandle" stepKey="deleteProductDropDownAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
         </test>
         <test name="AdvanceCatalogSearchConfigurableBySkuTest" extends="AdvanceCatalogSearchSimpleProductBySkuTest">
    @@ -158,6 +162,10 @@
                 <deleteData createDataKey="simple2Handle" stepKey="deleteSimple2" before="delete"/>
                 <deleteData createDataKey="childProductHandle1" stepKey="deleteChildProduct1" before="delete"/>
                 <deleteData createDataKey="childProductHandle2" stepKey="deleteChildProduct2" before="delete"/>
    +            <deleteData createDataKey="productAttributeHandle" stepKey="deleteProductDropDownAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
         </test>
         <test name="AdvanceCatalogSearchConfigurableByDescriptionTest" extends="AdvanceCatalogSearchSimpleProductByDescriptionTest">
    @@ -234,6 +242,10 @@
                 <deleteData createDataKey="simple2Handle" stepKey="deleteSimple2" before="delete"/>
                 <deleteData createDataKey="childProductHandle1" stepKey="deleteChildProduct1" before="delete"/>
                 <deleteData createDataKey="childProductHandle2" stepKey="deleteChildProduct2" before="delete"/>
    +            <deleteData createDataKey="productAttributeHandle" stepKey="deleteProductDropDownAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
         </test>
         <test name="AdvanceCatalogSearchConfigurableByShortDescriptionTest" extends="AdvanceCatalogSearchSimpleProductByShortDescriptionTest">
    @@ -310,6 +322,10 @@
                 <deleteData createDataKey="simple2Handle" stepKey="deleteSimple2" before="delete"/>
                 <deleteData createDataKey="childProductHandle1" stepKey="deleteChildProduct1" before="delete"/>
                 <deleteData createDataKey="childProductHandle2" stepKey="deleteChildProduct2" before="delete"/>
    +            <deleteData createDataKey="productAttributeHandle" stepKey="deleteProductDropDownAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
         </test>
     </tests>
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/ConfigurableProductPriceAdditionalStoreViewTest.xml+2 0 modified
    @@ -78,6 +78,8 @@
                     <argument name="websiteName" value="Second Website"/>
                 </actionGroup>
                 <actionGroup ref="logout" stepKey="adminLogout"/>
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <actionGroup ref="EnableWebUrlOptions" stepKey="addStoreCodeToUrls"/>
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/EndToEndB2CGuestUserTest.xml+6 0 modified
    @@ -73,6 +73,9 @@
                 <!--<deleteData createDataKey="createConfigProductImage" stepKey="deleteConfigProductImage"/>-->
                 <deleteData createDataKey="createConfigProduct" stepKey="deleteConfigProduct"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Verify Configurable Product in checkout cart items -->
    @@ -282,6 +285,9 @@
                 <!--<deleteData createDataKey="createConfigProductImage" stepKey="deleteConfigProductImage"/>-->
                 <deleteData createDataKey="createConfigProduct" stepKey="deleteConfigProduct"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Verify Configurable Product in checkout cart items -->
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/EndToEndB2CLoggedInUserTest.xml+3 0 modified
    @@ -73,6 +73,9 @@
                 <!--<deleteData createDataKey="createConfigProductImage" stepKey="deleteConfigProductImage"/>-->
                 <deleteData createDataKey="createConfigProduct" stepKey="deleteConfigProduct"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Verify Configurable Product in checkout cart items -->
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/NewProductsListWidgetConfigurableProductTest.xml+4 1 modified
    @@ -70,6 +70,9 @@
                 <deleteData createDataKey="createConfigChildProduct2" stepKey="deleteConfigChildProduct2"/>
                 <deleteData createDataKey="createConfigProduct" stepKey="deleteConfigProduct"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- A Cms page containing the New Products Widget gets created here via extends -->
    @@ -88,4 +91,4 @@
             <waitForPageLoad stepKey="waitForCmsPage"/>
             <see selector="{{StorefrontCategoryMainSection.ProductItemInfo}}" userInput="$$createConfigProduct.name$$" stepKey="seeProductName"/>
         </test>
    -</tests>
    \ No newline at end of file
    +</tests>
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/NoOptionAvailableToConfigureDisabledProductTest.xml+3 0 modified
    @@ -103,6 +103,9 @@
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
                 <deleteData createDataKey="createCustomer" stepKey="deleteCreatedCustomer"/>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <!-- Disable child product -->
             <comment userInput="Disable child product" stepKey="disableChildProduct"/>
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontAdvanceCatalogSearchConfigurableBySkuWithHyphenTest.xml+4 0 modified
    @@ -83,6 +83,10 @@
                 <deleteData createDataKey="simple2Handle" stepKey="deleteSimple2" before="delete"/>
                 <deleteData createDataKey="childProductHandle1" stepKey="deleteChildProduct1" before="delete"/>
                 <deleteData createDataKey="childProductHandle2" stepKey="deleteChildProduct2" before="delete"/>
    +            <deleteData createDataKey="productAttributeHandle" stepKey="deleteProductDropDownAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
         </test>
     </tests>
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontConfigurableProductCategoryViewChildOnlyTest.xml+3 0 modified
    @@ -95,6 +95,9 @@
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
                 <deleteData createDataKey="createCategory" stepKey="deleteApiCategory"/>
                 <deleteData createDataKey="secondCategory" stepKey="deleteSecondCategory"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <actionGroup ref="LoginAsAdmin" stepKey="login"/>
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontConfigurableProductChildSearchTest.xml+4 1 modified
    @@ -140,6 +140,9 @@
                 <deleteData createDataKey="createConfigProductAttributeMultiSelect" stepKey="deleteConfigProductAttributeMultiSelect"/>
                 <deleteData createDataKey="createConfigProductAttributeSelect" stepKey="deleteConfigProductAttributeSelect"/>
                 <deleteData createDataKey="createCategory" stepKey="deleteApiCategory"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Quick search the storefront for the first attribute option -->
    @@ -156,4 +159,4 @@
             <submitForm selector="#search_mini_form" parameterArray="['q' => $$createConfigChildProduct1.custom_attributes[short_description]$$]" stepKey="searchStorefront3" />
             <seeElement stepKey="seeProduct3" selector="{{StorefrontCategoryProductSection.ProductTitleByName('$$createConfigProduct.name$$')}}"/>
         </test>
    -</tests>
    \ No newline at end of file
    +</tests>
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontConfigurableProductDetailsTest.xml+3 0 modified
    @@ -36,6 +36,9 @@
                 </actionGroup>
                 <actionGroup ref="clearFiltersAdminDataGrid" stepKey="clearProductsGridFilters"/>
                 <actionGroup ref="logout" stepKey="adminLogout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Verify configurable product details in storefront product view -->
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontSortingByPriceForConfigurableWithCatalogRuleAppliedTest.xml+3 0 modified
    @@ -117,6 +117,9 @@
                     <argument name="option" value="No"/>
                 </actionGroup>
                 <actionGroup ref="logout" stepKey="logoutFromAdmin"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!--Open category with products and Sort by price desc-->
    
  • app/code/Magento/ConfigurableProduct/Test/Mftf/Test/StorefrontVerifyConfigurableProductLayeredNavigationTest.xml+3 0 modified
    @@ -117,6 +117,9 @@
                 <deleteData createDataKey="createConfigChildProduct3" stepKey="deleteConfigChildProduct3"/>
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteAttribute"/>
                 <actionGroup ref="logout" stepKey="logout"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Open Product Index Page and Filter First Child product -->
    
  • app/code/Magento/Contact/composer.json+7 6 modified
    @@ -6,11 +6,11 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-cms": "103.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -24,5 +24,6 @@
             "psr-4": {
                 "Magento\\Contact\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Cookie/composer.json+5 4 modified
    @@ -6,11 +6,11 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-store": "101.0.*"
         },
         "suggest": {
    -        "magento/module-backend": "*"
    +        "magento/module-backend": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -24,5 +24,6 @@
             "psr-4": {
                 "Magento\\Cookie\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Cron/composer.json+5 4 modified
    @@ -6,11 +6,11 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-store": "101.0.*"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -24,5 +24,6 @@
             "psr-4": {
                 "Magento\\Cron\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/CurrencySymbol/composer.json+8 7 modified
    @@ -6,12 +6,12 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-config": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-page-cache": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-page-cache": "100.3.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -25,5 +25,6 @@
             "psr-4": {
                 "Magento\\CurrencySymbol\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/CustomerAnalytics/composer.json+5 4 modified
    @@ -3,9 +3,9 @@
         "description": "N/A",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-analytics": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-analytics": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -19,5 +19,6 @@
             "psr-4": {
                 "Magento\\CustomerAnalytics\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Customer/Api/SessionCleanerInterface.php+22 0 added
    @@ -0,0 +1,22 @@
    +<?php
    +/**
    + * Copyright © Magento, Inc. All rights reserved.
    + * See COPYING.txt for license details.
    + */
    +declare(strict_types=1);
    +
    +namespace Magento\Customer\Api;
    +
    +/**
    + * Interface for cleaning customer session data.
    + */
    +interface SessionCleanerInterface
    +{
    +    /**
    +     * Destroy all active customer sessions related to given customer id, including current session.
    +     *
    +     * @param int $customerId
    +     * @return void
    +     */
    +    public function clearFor(int $customerId): void;
    +}
    
  • app/code/Magento/Customer/composer.json+24 23 modified
    @@ -6,30 +6,30 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-config": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-integration": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-newsletter": "*",
    -        "magento/module-page-cache": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-review": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-wishlist": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-authorization": "100.3.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-integration": "100.3.*",
    +        "magento/module-media-storage": "100.3.*",
    +        "magento/module-newsletter": "100.3.*",
    +        "magento/module-page-cache": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-review": "100.3.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-tax": "100.3.*",
    +        "magento/module-theme": "101.0.*",
    +        "magento/module-ui": "101.1.*",
    +        "magento/module-wishlist": "101.1.*"
         },
         "suggest": {
    -        "magento/module-cookie": "*",
    -        "magento/module-customer-sample-data": "*"
    +        "magento/module-cookie": "100.3.*",
    +        "magento/module-customer-sample-data": "Sample Data version: 100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -43,5 +43,6 @@
             "psr-4": {
                 "Magento\\Customer\\": ""
             }
    -    }
    +    },
    +    "version": "102.0.4-p2"
     }
    
  • app/code/Magento/Customer/Controller/Account/CreatePost.php+1 1 modified
    @@ -440,7 +440,7 @@ protected function checkPasswordConfirmation($password, $confirmation)
         /**
          * Retrieve success message
          *
    -     * @deprecated
    +     * @deprecated 102.0.4
          * @see getMessageManagerSuccessMessage()
          * @return string
          */
    
  • app/code/Magento/Customer/CustomerData/SectionPool.php+1 0 modified
    @@ -66,6 +66,7 @@ public function getSectionsData(array $sectionNames = null, $forceNewTimestamp =
          * Return array of section names.
          *
          * @return array
    +     * @since 102.0.4
          */
         public function getSectionNames()
         {
    
  • app/code/Magento/CustomerDownloadableGraphQl/composer.json+6 5 modified
    @@ -4,12 +4,12 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/module-downloadable-graph-ql": "*",
    -        "magento/module-graph-ql": "*",
    -        "magento/framework": "*"
    +        "magento/module-downloadable-graph-ql": "100.3.*",
    +        "magento/module-graph-ql": "100.3.*",
    +        "magento/framework": "102.0.*"
         },
         "suggest": {
    -        "magento/module-catalog-graph-ql": "*"
    +        "magento/module-catalog-graph-ql": "100.3.*"
         },
         "license": [
             "OSL-3.0",
    @@ -22,5 +22,6 @@
             "psr-4": {
                 "Magento\\CustomerDownloadableGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.0"
     }
    
  • app/code/Magento/Customer/etc/di.xml+1 0 modified
    @@ -61,6 +61,7 @@
                     type="Magento\Customer\Block\Account\SortLink"/>
         <preference for="Magento\Customer\Model\Group\RetrieverInterface"
                     type="Magento\Customer\Model\Group\Retriever"/>
    +    <preference for="Magento\Customer\Api\SessionCleanerInterface" type="Magento\Customer\Model\Session\SessionCleaner"/>
         <type name="Magento\Customer\Model\Session">
             <arguments>
                 <argument name="configShare" xsi:type="object">Magento\Customer\Model\Config\Share\Proxy</argument>
    
  • app/code/Magento/Customer/etc/webapi.xml+1 0 modified
    @@ -141,6 +141,7 @@
             </resources>
             <data>
                 <parameter name="customer.id" force="true">%customer_id%</parameter>
    +            <parameter name="customer.group_id" force="true">null</parameter>
             </data>
         </route>
         <route url="/V1/customers/me" method="GET" soapOperation="getSelf">
    
  • app/code/Magento/CustomerGraphQl/composer.json+26 26 modified
    @@ -1,29 +1,29 @@
     {
    -  "name": "magento/module-customer-graph-ql",
    -  "description": "N/A",
    -  "type": "magento2-module",
    -  "require": {
    -    "php": "~7.1.3||~7.2.0||~7.3.0",
    -    "magento/module-customer": "*",
    -    "magento/module-authorization": "*",
    -    "magento/module-customer": "*",
    -    "magento/module-eav": "*",
    -    "magento/module-graph-ql": "*",
    -    "magento/module-newsletter": "*",
    -    "magento/module-integration": "*",
    -    "magento/module-store": "*",
    -    "magento/framework": "*"
    -  },
    -  "license": [
    -    "OSL-3.0",
    -    "AFL-3.0"
    -  ],
    -  "autoload": {
    -    "files": [
    -      "registration.php"
    +    "name": "magento/module-customer-graph-ql",
    +    "description": "N/A",
    +    "type": "magento2-module",
    +    "require": {
    +        "php": "~7.1.3||~7.2.0||~7.3.0",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-authorization": "100.3.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-graph-ql": "100.3.*",
    +        "magento/module-newsletter": "100.3.*",
    +        "magento/module-integration": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/framework": "102.0.*"
    +    },
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
         ],
    -    "psr-4": {
    -      "Magento\\CustomerGraphQl\\": ""
    -    }
    -  }
    +    "autoload": {
    +        "files": [
    +            "registration.php"
    +        ],
    +        "psr-4": {
    +            "Magento\\CustomerGraphQl\\": ""
    +        }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/CustomerImportExport/composer.json+9 8 modified
    @@ -6,13 +6,13 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-import-export": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-import-export": "100.3.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -26,5 +26,6 @@
             "psr-4": {
                 "Magento\\CustomerImportExport\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/CustomerImportExport/Model/Import/Address.php+4 4 modified
    @@ -165,7 +165,7 @@ class Address extends AbstractCustomer
          * Array of region parameters
          *
          * @var array
    -     * @deprecated field not in use
    +     * @deprecated 100.3.4 field not in use
          */
         protected $_regionParameters;
     
    @@ -195,19 +195,19 @@ class Address extends AbstractCustomer
     
         /**
          * @var \Magento\Eav\Model\Config
    -     * @deprecated field not-in use
    +     * @deprecated 100.3.4 field not-in use
          */
         protected $_eavConfig;
     
         /**
          * @var \Magento\Customer\Model\AddressFactory
    -     * @deprecated not utilized anymore
    +     * @deprecated 100.3.4 not utilized anymore
          */
         protected $_addressFactory;
     
         /**
          * @var \Magento\Framework\Stdlib\DateTime
    -     * @deprecated the property isn't used
    +     * @deprecated 100.3.4 the property isn't used
          */
         protected $dateTime;
     
    
  • app/code/Magento/Customer/Model/AccountManagement.php+48 76 modified
    @@ -13,6 +13,7 @@
     use Magento\Customer\Api\Data\AddressInterface;
     use Magento\Customer\Api\Data\CustomerInterface;
     use Magento\Customer\Api\Data\ValidationResultsInterfaceFactory;
    +use Magento\Customer\Api\SessionCleanerInterface;
     use Magento\Customer\Helper\View as CustomerViewHelper;
     use Magento\Customer\Model\Config\Share as ConfigShare;
     use Magento\Customer\Model\Customer as CustomerModel;
    @@ -68,92 +69,104 @@ class AccountManagement implements AccountManagementInterface
         /**
          * Configuration paths for create account email template
          *
    -     * @deprecated
    +     * @deprecated get rid of Helpers in Password Security Management.
    +     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_REGISTER_EMAIL_TEMPLATE
          */
         const XML_PATH_REGISTER_EMAIL_TEMPLATE = 'customer/create_account/email_template';
     
         /**
          * Configuration paths for register no password email template
          *
    -     * @deprecated
    +     * @deprecated get rid of Helpers in Password Security Management.
    +     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_REGISTER_NO_PASSWORD_EMAIL_TEMPLATE
          */
         const XML_PATH_REGISTER_NO_PASSWORD_EMAIL_TEMPLATE = 'customer/create_account/email_no_password_template';
     
         /**
          * Configuration paths for remind email identity
          *
    -     * @deprecated
    +     * @deprecated get rid of Helpers in Password Security Management.
    +     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_REGISTER_EMAIL_IDENTITY
          */
         const XML_PATH_REGISTER_EMAIL_IDENTITY = 'customer/create_account/email_identity';
     
         /**
          * Configuration paths for remind email template
          *
    -     * @deprecated
    +     * @deprecated get rid of Helpers in Password Security Management.
    +     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_REMIND_EMAIL_TEMPLATE
          */
         const XML_PATH_REMIND_EMAIL_TEMPLATE = 'customer/password/remind_email_template';
     
         /**
          * Configuration paths for forgot email email template
          *
    -     * @deprecated
    +     * @deprecated get rid of Helpers in Password Security Management.
    +     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_FORGOT_EMAIL_TEMPLATE
          */
         const XML_PATH_FORGOT_EMAIL_TEMPLATE = 'customer/password/forgot_email_template';
     
         /**
          * Configuration paths for forgot email identity
          *
    -     * @deprecated
    +     * @deprecated get rid of Helpers in Password Security Management.
    +     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_FORGOT_EMAIL_IDENTITY
          */
         const XML_PATH_FORGOT_EMAIL_IDENTITY = 'customer/password/forgot_email_identity';
     
         /**
          * Configuration paths for account confirmation required
          *
    -     * @deprecated
    +     * @deprecated get rid of Helpers in Password Security Management.
          * @see AccountConfirmation::XML_PATH_IS_CONFIRM
          */
         const XML_PATH_IS_CONFIRM = 'customer/create_account/confirm';
     
         /**
          * Configuration paths for account confirmation email template
          *
    -     * @deprecated
    +     * @deprecated get rid of Helpers in Password Security Management.
    +     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_CONFIRM_EMAIL_TEMPLATE
          */
         const XML_PATH_CONFIRM_EMAIL_TEMPLATE = 'customer/create_account/email_confirmation_template';
     
         /**
          * Configuration paths for confirmation confirmed email template
          *
    -     * @deprecated
    +     * @deprecated get rid of Helpers in Password Security Management.
    +     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_CONFIRMED_EMAIL_TEMPLATE
          */
         const XML_PATH_CONFIRMED_EMAIL_TEMPLATE = 'customer/create_account/email_confirmed_template';
     
         /**
          * Constants for the type of new account email to be sent
          *
    -     * @deprecated
    +     * @deprecated get rid of Helpers in Password Security Management.
    +     * @see \Magento\Customer\Model\EmailNotificationInterface::NEW_ACCOUNT_EMAIL_REGISTERED
          */
         const NEW_ACCOUNT_EMAIL_REGISTERED = 'registered';
     
         /**
          * Welcome email, when password setting is required
          *
    -     * @deprecated
    +     * @deprecated get rid of Helpers in Password Security Management.
    +     * @see \Magento\Customer\Model\EmailNotificationInterface::NEW_ACCOUNT_EMAIL_REGISTERED_NO_PASSWORD
          */
         const NEW_ACCOUNT_EMAIL_REGISTERED_NO_PASSWORD = 'registered_no_password';
     
         /**
          * Welcome email, when confirmation is enabled
          *
    -     * @deprecated
    +     * @deprecated get rid of Helpers in Password Security Management.
    +     * @see \Magento\Customer\Model\EmailNotificationInterface::NEW_ACCOUNT_EMAIL_CONFIRMATION
          */
         const NEW_ACCOUNT_EMAIL_CONFIRMATION = 'confirmation';
     
         /**
          * Confirmation email, when account is confirmed
          *
    -     * @deprecated
    +     * @deprecated get rid of Helpers in Password Security Management.
    +     * @see \Magento\Customer\Model\EmailNotificationInterface::NEW_ACCOUNT_EMAIL_CONFIRMED
          */
         const NEW_ACCOUNT_EMAIL_CONFIRMED = 'confirmed';
     
    @@ -179,14 +192,16 @@ class AccountManagement implements AccountManagementInterface
         /**
          * Configuration path to customer reset password email template
          *
    -     * @deprecated
    +     * @deprecated get rid of Helpers in Password Security Management.
    +     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_RESET_PASSWORD_TEMPLATE
          */
         const XML_PATH_RESET_PASSWORD_TEMPLATE = 'customer/password/reset_password_template';
     
         /**
          * Minimum password length
          *
    -     * @deprecated
    +     * @deprecated get rid of Helpers in Password Security Management.
    +     * @see \Magento\Customer\Model\AccountManagement::XML_PATH_MINIMUM_PASSWORD_LENGTH
          */
         const MIN_PASSWORD_LENGTH = 6;
     
    @@ -270,21 +285,6 @@ class AccountManagement implements AccountManagementInterface
          */
         private $transportBuilder;
     
    -    /**
    -     * @var SessionManagerInterface
    -     */
    -    private $sessionManager;
    -
    -    /**
    -     * @var SaveHandlerInterface
    -     */
    -    private $saveHandler;
    -
    -    /**
    -     * @var CollectionFactory
    -     */
    -    private $visitorCollectionFactory;
    -
         /**
          * @var DataObjectProcessor
          */
    @@ -370,6 +370,11 @@ class AccountManagement implements AccountManagementInterface
          */
         private $getByToken;
     
    +    /**
    +     * @var SessionCleanerInterface
    +     */
    +    private $sessionCleaner;
    +
         /**
          * @param CustomerFactory $customerFactory
          * @param ManagerInterface $eventManager
    @@ -404,10 +409,12 @@ class AccountManagement implements AccountManagementInterface
          * @param AddressRegistry|null $addressRegistry
          * @param GetCustomerByToken|null $getByToken
          * @param AllowedCountries|null $allowedCountriesReader
    +     * @param SessionCleanerInterface|null $sessionCleaner
          * @SuppressWarnings(PHPMD.CyclomaticComplexity)
          * @SuppressWarnings(PHPMD.ExcessiveParameterList)
          * @SuppressWarnings(PHPMD.NPathComplexity)
          * @SuppressWarnings(PHPMD.LongVariable)
    +     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
          */
         public function __construct(
             CustomerFactory $customerFactory,
    @@ -442,7 +449,8 @@ public function __construct(
             SearchCriteriaBuilder $searchCriteriaBuilder = null,
             AddressRegistry $addressRegistry = null,
             GetCustomerByToken $getByToken = null,
    -        AllowedCountries $allowedCountriesReader = null
    +        AllowedCountries $allowedCountriesReader = null,
    +        SessionCleanerInterface $sessionCleaner = null
         ) {
             $this->customerFactory = $customerFactory;
             $this->eventManager = $eventManager;
    @@ -473,12 +481,6 @@ public function __construct(
             $this->dateTimeFactory = $dateTimeFactory ?: $objectManager->get(DateTimeFactory::class);
             $this->accountConfirmation = $accountConfirmation ?: $objectManager
                 ->get(AccountConfirmation::class);
    -        $this->sessionManager = $sessionManager
    -            ?: $objectManager->get(SessionManagerInterface::class);
    -        $this->saveHandler = $saveHandler
    -            ?: $objectManager->get(SaveHandlerInterface::class);
    -        $this->visitorCollectionFactory = $visitorCollectionFactory
    -            ?: $objectManager->get(CollectionFactory::class);
             $this->searchCriteriaBuilder = $searchCriteriaBuilder
                 ?: $objectManager->get(SearchCriteriaBuilder::class);
             $this->addressRegistry = $addressRegistry
    @@ -487,6 +489,7 @@ public function __construct(
                 ?: $objectManager->get(GetCustomerByToken::class);
             $this->allowedCountriesReader = $allowedCountriesReader
                 ?: $objectManager->get(AllowedCountries::class);
    +        $this->sessionCleaner = $sessionCleaner ?? $objectManager->get(SessionCleanerInterface::class);
         }
     
         /**
    @@ -525,7 +528,11 @@ public function resendConfirmation($email, $websiteId = null, $redirectUrl = '')
             } catch (MailException $e) {
                 // If we are not able to send a new account email, this should be ignored
                 $this->logger->critical($e);
    +
    +            return false;
             }
    +
    +        return true;
         }
     
         /**
    @@ -673,7 +680,8 @@ private function handleUnknownTemplate($template)
         {
             throw new InputException(
                 __(
    -                'Invalid value of "%value" provided for the %fieldName field. Possible values: %template1 or %template2.',
    +                'Invalid value of "%value" provided for the %fieldName field. '
    +                    . 'Possible values: %template1 or %template2.',
                     [
                         'value' => $template,
                         'fieldName' => 'template',
    @@ -712,13 +720,7 @@ public function resetPassword($email, $resetToken, $newPassword)
             $customerSecure->setRpToken(null);
             $customerSecure->setRpTokenCreatedAt(null);
             $customerSecure->setPasswordHash($this->createPasswordHash($newPassword));
    -        $this->destroyCustomerSessions($customer->getId());
    -        if ($this->sessionManager->isSessionExists()) {
    -            //delete old session and move data to the new session
    -            //use this instead of $this->sessionManager->regenerateId because last one doesn't delete old session
    -            // phpcs:ignore Magento2.Functions.DiscouragedFunction
    -            session_regenerate_id(true);
    -        }
    +        $this->sessionCleaner->clearFor((int)$customer->getId());
             $this->customerRepository->save($customer);
     
             return true;
    @@ -1047,7 +1049,7 @@ private function changePasswordForCustomer($customer, $currentPassword, $newPass
             $customerSecure->setRpTokenCreatedAt(null);
             $this->checkPasswordStrength($newPassword);
             $customerSecure->setPasswordHash($this->createPasswordHash($newPassword));
    -        $this->destroyCustomerSessions($customer->getId());
    +        $this->sessionCleaner->clearFor((int)$customer->getId());
             $this->disableAddressValidation($customer);
             $this->customerRepository->save($customer);
     
    @@ -1600,36 +1602,6 @@ private function getEmailNotification()
             }
         }
     
    -    /**
    -     * Destroy all active customer sessions by customer id (current session will not be destroyed).
    -     *
    -     * Customer sessions which should be deleted are collecting from the "customer_visitor" table considering
    -     * configured session lifetime.
    -     *
    -     * @param string|int $customerId
    -     * @return void
    -     */
    -    private function destroyCustomerSessions($customerId)
    -    {
    -        $sessionLifetime = $this->scopeConfig->getValue(
    -            \Magento\Framework\Session\Config::XML_PATH_COOKIE_LIFETIME,
    -            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
    -        );
    -        $dateTime = $this->dateTimeFactory->create();
    -        $activeSessionsTime = $dateTime->setTimestamp($dateTime->getTimestamp() - $sessionLifetime)
    -            ->format(DateTime::DATETIME_PHP_FORMAT);
    -        /** @var \Magento\Customer\Model\ResourceModel\Visitor\Collection $visitorCollection */
    -        $visitorCollection = $this->visitorCollectionFactory->create();
    -        $visitorCollection->addFieldToFilter('customer_id', $customerId);
    -        $visitorCollection->addFieldToFilter('last_visit_at', ['from' => $activeSessionsTime]);
    -        $visitorCollection->addFieldToFilter('session_id', ['neq' => $this->sessionManager->getSessionId()]);
    -        /** @var \Magento\Customer\Model\Visitor $visitor */
    -        foreach ($visitorCollection->getItems() as $visitor) {
    -            $sessionId = $visitor->getSessionId();
    -            $this->saveHandler->destroy($sessionId);
    -        }
    -    }
    -
         /**
          * Set ignore_validation_flag for reset password flow to skip unnecessary address and customer validation
          *
    
  • app/code/Magento/Customer/Model/Session/SessionCleaner.php+100 0 added
    @@ -0,0 +1,100 @@
    +<?php
    +/**
    + * Copyright © Magento, Inc. All rights reserved.
    + * See COPYING.txt for license details.
    + */
    +declare(strict_types=1);
    +
    +namespace Magento\Customer\Model\Session;
    +
    +use Magento\Customer\Api\SessionCleanerInterface;
    +use Magento\Customer\Model\ResourceModel\Visitor\CollectionFactory as VisitorCollectionFactory;
    +use Magento\Framework\App\Config\ScopeConfigInterface;
    +use Magento\Framework\Intl\DateTimeFactory;
    +use Magento\Framework\Session\Config;
    +use Magento\Framework\Session\SaveHandlerInterface;
    +use Magento\Framework\Session\SessionManagerInterface;
    +use Magento\Framework\Stdlib\DateTime;
    +use Magento\Store\Model\ScopeInterface;
    +
    +/**
    + * Deletes all session data which relates to customer, including current session data.
    + *
    + * @SuppressWarnings(PHPMD.CookieAndSessionMisuse)
    + */
    +class SessionCleaner implements SessionCleanerInterface
    +{
    +    /**
    +     * @var ScopeConfigInterface
    +     */
    +    private $scopeConfig;
    +
    +    /**
    +     * @var DateTimeFactory
    +     */
    +    private $dateTimeFactory;
    +
    +    /**
    +     * @var VisitorCollectionFactory
    +     */
    +    private $visitorCollectionFactory;
    +
    +    /**
    +     * @var SessionManagerInterface
    +     */
    +    private $sessionManager;
    +
    +    /**
    +     * @var SaveHandlerInterface
    +     */
    +    private $saveHandler;
    +
    +    /**
    +     * @inheritdoc
    +     */
    +    public function __construct(
    +        ScopeConfigInterface $scopeConfig,
    +        DateTimeFactory $dateTimeFactory,
    +        VisitorCollectionFactory $visitorCollectionFactory,
    +        SessionManagerInterface $sessionManager,
    +        SaveHandlerInterface $saveHandler
    +    ) {
    +        $this->scopeConfig = $scopeConfig;
    +        $this->dateTimeFactory = $dateTimeFactory;
    +        $this->visitorCollectionFactory = $visitorCollectionFactory;
    +        $this->sessionManager = $sessionManager;
    +        $this->saveHandler = $saveHandler;
    +    }
    +
    +    /**
    +     * @inheritdoc
    +     */
    +    public function clearFor(int $customerId): void
    +    {
    +        if ($this->sessionManager->isSessionExists()) {
    +            //delete old session and move data to the new session
    +            //use this instead of $this->sessionManager->regenerateId because last one doesn't delete old session
    +            // phpcs:ignore Magento2.Functions.DiscouragedFunction
    +            session_regenerate_id(true);
    +        }
    +
    +        $sessionLifetime = $this->scopeConfig->getValue(
    +            Config::XML_PATH_COOKIE_LIFETIME,
    +            ScopeInterface::SCOPE_STORE
    +        );
    +        $dateTime = $this->dateTimeFactory->create();
    +        $activeSessionsTime = $dateTime->setTimestamp($dateTime->getTimestamp() - $sessionLifetime)
    +            ->format(DateTime::DATETIME_PHP_FORMAT);
    +        /** @var \Magento\Customer\Model\ResourceModel\Visitor\Collection $visitorCollection */
    +        $visitorCollection = $this->visitorCollectionFactory->create();
    +        $visitorCollection->addFieldToFilter('customer_id', $customerId);
    +        $visitorCollection->addFieldToFilter('last_visit_at', ['from' => $activeSessionsTime]);
    +        /** @var \Magento\Customer\Model\Visitor $visitor */
    +        foreach ($visitorCollection->getItems() as $visitor) {
    +            $sessionId = $visitor->getSessionId();
    +            $this->sessionManager->start();
    +            $this->saveHandler->destroy($sessionId);
    +            $this->sessionManager->writeClose();
    +        }
    +    }
    +}
    
  • app/code/Magento/Customer/Model/Visitor.php+21 3 modified
    @@ -10,9 +10,8 @@
     use Magento\Framework\App\RequestSafetyInterface;
     
     /**
    - * Class Visitor
    + * Class Visitor responsible for initializing visitor's.
      *
    - * @package Magento\Customer\Model
      * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
      * @SuppressWarnings(PHPMD.CookieAndSessionMisuse)
      */
    @@ -194,7 +193,9 @@ public function initByRequest($observer)
         public function saveByRequest($observer)
         {
             // prevent saving Visitor for safe methods, e.g. GET request
    -        if ($this->skipRequestLogging || $this->requestSafety->isSafeMethod() || $this->isModuleIgnored($observer)) {
    +        if (($this->skipRequestLogging || $this->requestSafety->isSafeMethod() || $this->isModuleIgnored($observer))
    +            && !$this->sessionIdHasChanged()
    +        ) {
                 return $this;
             }
     
    @@ -208,6 +209,23 @@ public function saveByRequest($observer)
             return $this;
         }
     
    +    /**
    +     * Check if visitor session id was changed.
    +     *
    +     * @return bool
    +     */
    +    private function sessionIdHasChanged(): bool
    +    {
    +        $visitorData = $this->session->getVisitorData();
    +        $hasChanged = false;
    +
    +        if (isset($visitorData['session_id'])) {
    +            $hasChanged = $this->session->getSessionId() !== $visitorData['session_id'];
    +        }
    +
    +        return $hasChanged;
    +    }
    +
         /**
          * Returns true if the module is required
          *
    
  • app/code/Magento/Customer/Test/Mftf/Data/AddressData.xml+1 0 modified
    @@ -327,6 +327,7 @@
             <data key="postcode">10789</data>
             <data key="telephone">333-33-333-33</data>
             <data key="country">Germany</data>
    +        <data key="state">Berlin</data>
         </entity>
         <entity name="US_Address_California">
             <data key="firstname">John</data>
    
  • app/code/Magento/Customer/Test/Mftf/Test/StorefrontClearAllCompareProductsTest.xml+4 0 modified
    @@ -124,6 +124,10 @@
                 <deleteData createDataKey="createBundleProduct1" stepKey="deleteBundleProduct1"/>
                 <deleteData createDataKey="createGroupedProduct1" stepKey="deleteGroupedProduct1"/>
                 <deleteData createDataKey="createDownloadableProduct1" stepKey="deleteDownloadableProduct1"/>
    +            <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <actionGroup ref="LoginToStorefrontActionGroup" stepKey="loginAsCustomer1">
    
  • app/code/Magento/Customer/Test/Mftf/Test/StorefrontUpdateCustomerPasswordTest.xml+14 1 modified
    @@ -78,4 +78,17 @@
             <remove keyForRemoval="loginWithNewPassword"/>
             <remove keyForRemoval="seeMyEmail"/>
         </test>
    -</tests>
    \ No newline at end of file
    +    <test name="StorefrontUpdateCustomerPasswordRedirectOnLoginPage" extends="StorefrontUpdateCustomerPasswordValidCurrentPasswordTest">
    +        <annotations>
    +            <title value="Update Customer Password on Storefront Redirect on Login Page"/>
    +            <description value="Update Customer Password on Storefront Redirect on Login Page"/>
    +            <testCaseId value="MC-22957"/>
    +            <useCaseId value="MC-29461"/>
    +        </annotations>
    +        <remove keyForRemoval="logout"/>
    +        <remove keyForRemoval="loginWithNewPassword"/>
    +        <remove keyForRemoval="seeMyEmail"/>
    +
    +        <seeInCurrentUrl url="{{StorefrontCustomerSignInPage.url}}" stepKey="assertStorefrontCustomerLoginPage"/>
    +    </test>
    +</tests>
    
  • app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php+11 43 modified
    @@ -7,6 +7,7 @@
     namespace Magento\Customer\Test\Unit\Model;
     
     use Magento\Customer\Api\Data\CustomerInterface;
    +use Magento\Customer\Api\SessionCleanerInterface;
     use Magento\Customer\Model\AccountConfirmation;
     use Magento\Customer\Model\AccountManagement;
     use Magento\Customer\Model\AuthenticationInterface;
    @@ -161,6 +162,11 @@ class AccountManagementTest extends \PHPUnit\Framework\TestCase
          */
         private $allowedCountriesReader;
     
    +    /**
    +     * @var SessionCleanerInterface|\PHPUnit_Framework_MockObject_MockObject
    +     */
    +    private $sessionCleanerMock;
    +
         /**
          * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
          */
    @@ -1463,6 +1469,7 @@ private function reInitModel()
                 ->setMethods(['create'])
                 ->getMock();
             $dateTimeFactory->expects($this->any())->method('create')->willReturn($dateTimeMock);
    +        $this->sessionCleanerMock = $this->createMock(SessionCleanerInterface::class);
     
             $this->objectManagerHelper = new ObjectManagerHelper($this);
             $this->accountManagement = $this->objectManagerHelper->getObject(
    @@ -1483,6 +1490,7 @@ private function reInitModel()
                     'storeManager' => $this->storeManager,
                     'addressRegistry' => $this->addressRegistryMock,
                     'transportBuilder' => $this->transportBuilder,
    +                'sessionCleaner' => $this->sessionCleanerMock,
                 ]
             );
             $this->objectManagerHelper->setBackwardCompatibleProperty(
    @@ -1561,33 +1569,13 @@ public function testChangePassword()
                 ->with($newPassword)
                 ->willReturn(7);
     
    +        $this->sessionCleanerMock->expects($this->once())->method('clearFor')->with($customerId)->willReturnSelf();
    +
             $this->customerRepository
                 ->expects($this->once())
                 ->method('save')
                 ->with($customer);
     
    -        $this->sessionManager->expects($this->atLeastOnce())->method('getSessionId');
    -
    -        $visitor = $this->getMockBuilder(\Magento\Customer\Model\Visitor::class)
    -            ->disableOriginalConstructor()
    -            ->setMethods(['getSessionId'])
    -            ->getMock();
    -        $visitor->expects($this->atLeastOnce())->method('getSessionId')
    -            ->willReturnOnConsecutiveCalls('session_id_1', 'session_id_2');
    -        $visitorCollection = $this->getMockBuilder(
    -            \Magento\Customer\Model\ResourceModel\Visitor\CollectionFactory::class
    -        )
    -            ->disableOriginalConstructor()->setMethods(['addFieldToFilter', 'getItems'])->getMock();
    -        $visitorCollection->expects($this->atLeastOnce())->method('addFieldToFilter')->willReturnSelf();
    -        $visitorCollection->expects($this->atLeastOnce())->method('getItems')->willReturn([$visitor, $visitor]);
    -        $this->visitorCollectionFactory->expects($this->atLeastOnce())->method('create')
    -            ->willReturn($visitorCollection);
    -        $this->saveHandler->expects($this->atLeastOnce())->method('destroy')
    -            ->withConsecutive(
    -                ['session_id_1'],
    -                ['session_id_2']
    -            );
    -
             $this->assertTrue($this->accountManagement->changePassword($email, $currentPassword, $newPassword));
         }
     
    @@ -1641,28 +1629,8 @@ function ($string) {
             $this->customerSecure->expects($this->once())->method('setRpToken')->with(null);
             $this->customerSecure->expects($this->once())->method('setRpTokenCreatedAt')->with(null);
             $this->customerSecure->expects($this->any())->method('setPasswordHash')->willReturn(null);
    +        $this->sessionCleanerMock->expects($this->once())->method('clearFor')->with($customerId)->willReturnSelf();
     
    -        $this->sessionManager->method('isSessionExists')->willReturn(false);
    -        $this->sessionManager->expects($this->atLeastOnce())->method('getSessionId');
    -        $visitor = $this->getMockBuilder(\Magento\Customer\Model\Visitor::class)
    -            ->disableOriginalConstructor()
    -            ->setMethods(['getSessionId'])
    -            ->getMock();
    -        $visitor->expects($this->atLeastOnce())->method('getSessionId')
    -            ->willReturnOnConsecutiveCalls('session_id_1', 'session_id_2');
    -        $visitorCollection = $this->getMockBuilder(
    -            \Magento\Customer\Model\ResourceModel\Visitor\CollectionFactory::class
    -        )
    -            ->disableOriginalConstructor()->setMethods(['addFieldToFilter', 'getItems'])->getMock();
    -        $visitorCollection->expects($this->atLeastOnce())->method('addFieldToFilter')->willReturnSelf();
    -        $visitorCollection->expects($this->atLeastOnce())->method('getItems')->willReturn([$visitor, $visitor]);
    -        $this->visitorCollectionFactory->expects($this->atLeastOnce())->method('create')
    -            ->willReturn($visitorCollection);
    -        $this->saveHandler->expects($this->atLeastOnce())->method('destroy')
    -            ->withConsecutive(
    -                ['session_id_1'],
    -                ['session_id_2']
    -            );
             $this->assertTrue($this->accountManagement->resetPassword($customerEmail, $resetToken, $newPassword));
         }
     
    
  • app/code/Magento/Deploy/composer.json+7 6 modified
    @@ -6,11 +6,11 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-config": "*",
    -        "magento/module-require-js": "*",
    -        "magento/module-store": "*",
    -        "magento/module-user": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-require-js": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-user": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -25,5 +25,6 @@
             "psr-4": {
                 "Magento\\Deploy\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Developer/composer.json+5 4 modified
    @@ -6,9 +6,9 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-config": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -22,5 +22,6 @@
             "psr-4": {
                 "Magento\\Developer\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Dhl/composer.json+13 12 modified
    @@ -7,19 +7,19 @@
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
             "lib-libxml": "*",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-config": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-shipping": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-inventory": "100.3.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-shipping": "100.3.*",
    +        "magento/module-store": "101.0.*"
         },
         "suggest": {
    -        "magento/module-checkout": "*"
    +        "magento/module-checkout": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -33,5 +33,6 @@
             "psr-4": {
                 "Magento\\Dhl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Directory/Block/Data.php+1 1 modified
    @@ -142,7 +142,7 @@ public function getCountryHtmlSelect($defValue = null, $name = 'country_id', $id
             )->setId(
                 $id
             )->setTitle(
    -            $this->escapeHtml(__($title))
    +            $this->escapeHtmlAttr(__($title))
             )->setValue(
                 $defValue
             )->setOptions(
    
  • app/code/Magento/Directory/composer.json+6 5 modified
    @@ -7,10 +7,10 @@
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
             "lib-libxml": "*",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-config": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -24,5 +24,6 @@
             "psr-4": {
                 "Magento\\Directory\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/DirectoryGraphQl/composer.json+22 21 modified
    @@ -1,24 +1,25 @@
     {
    -  "name": "magento/module-directory-graph-ql",
    -  "description": "N/A",
    -  "type": "magento2-module",
    -  "require": {
    -    "php": "~7.1.3||~7.2.0||~7.3.0",
    -    "magento/module-directory": "*",
    -    "magento/module-store": "*",
    -    "magento/module-graph-ql": "*",
    -    "magento/framework": "*"
    -  },
    -  "license": [
    -    "OSL-3.0",
    -    "AFL-3.0"
    -  ],
    -  "autoload": {
    -    "files": [
    -      "registration.php"
    +    "name": "magento/module-directory-graph-ql",
    +    "description": "N/A",
    +    "type": "magento2-module",
    +    "require": {
    +        "php": "~7.1.3||~7.2.0||~7.3.0",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-graph-ql": "100.3.*",
    +        "magento/framework": "102.0.*"
    +    },
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
         ],
    -    "psr-4": {
    -      "Magento\\DirectoryGraphQl\\": ""
    -    }
    -  }
    +    "autoload": {
    +        "files": [
    +            "registration.php"
    +        ],
    +        "psr-4": {
    +            "Magento\\DirectoryGraphQl\\": ""
    +        }
    +    },
    +    "version": "100.3.3"
     }
    
  • app/code/Magento/Directory/Test/Unit/Block/DataTest.php+10 2 modified
    @@ -65,7 +65,11 @@ class DataTest extends \PHPUnit\Framework\TestCase
         protected function setUp()
         {
             $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
    -        $this->escaper= $objectManagerHelper->getObject(Escaper::class);
    +        $this->escaper = $this->getMockBuilder(Escaper::class)
    +            ->disableOriginalConstructor()
    +            ->setMethods(['escapeHtmlAttr'])
    +            ->getMock();
    +
             $this->prepareContext();
     
             $this->helperDataMock = $this->getMockBuilder(\Magento\Directory\Helper\Data::class)
    @@ -304,7 +308,7 @@ protected function mockElementHtmlSelect($defaultCountry, $options, $resultHtml)
                         'setValue',
                         'setOptions',
                         'setExtraParams',
    -                    'getHtml',
    +                    'getHtml'
                     ]
                 )
                 ->getMock();
    @@ -336,6 +340,10 @@ protected function mockElementHtmlSelect($defaultCountry, $options, $resultHtml)
             $elementHtmlSelect->expects($this->once())
                 ->method('getHtml')
                 ->willReturn($resultHtml);
    +        $this->escaper->expects($this->once())
    +            ->method('escapeHtmlAttr')
    +            ->with(__($title))
    +            ->willReturn(__($title));
     
             return $elementHtmlSelect;
         }
    
  • app/code/Magento/Downloadable/composer.json+20 19 modified
    @@ -6,26 +6,26 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-gift-message": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-inventory": "100.3.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-gift-message": "100.3.*",
    +        "magento/module-media-storage": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-tax": "100.3.*",
    +        "magento/module-theme": "101.0.*",
    +        "magento/module-ui": "101.1.*"
         },
         "suggest": {
    -        "magento/module-downloadable-sample-data": "*"
    +        "magento/module-downloadable-sample-data": "Sample Data version: 100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -39,5 +39,6 @@
             "psr-4": {
                 "Magento\\Downloadable\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/DownloadableGraphQl/composer.json+8 7 modified
    @@ -4,14 +4,14 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/module-catalog": "*",
    -        "magento/module-downloadable": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-quote-graph-ql": "*",
    -        "magento/framework": "*"
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-downloadable": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-quote-graph-ql": "100.3.*",
    +        "magento/framework": "102.0.*"
         },
         "suggest": {
    -        "magento/module-catalog-graph-ql": "*"
    +        "magento/module-catalog-graph-ql": "100.3.*"
         },
         "license": [
             "OSL-3.0",
    @@ -24,5 +24,6 @@
             "psr-4": {
                 "Magento\\DownloadableGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/DownloadableImportExport/composer.json+9 8 modified
    @@ -6,13 +6,13 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-import-export": "*",
    -        "magento/module-downloadable": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-import-export": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-import-export": "101.0.*",
    +        "magento/module-downloadable": "100.3.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-import-export": "100.3.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -26,5 +26,6 @@
             "psr-4": {
                 "Magento\\DownloadableImportExport\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Eav/composer.json+8 7 modified
    @@ -6,12 +6,12 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-config": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-media-storage": "100.3.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -25,5 +25,6 @@
             "psr-4": {
                 "Magento\\Eav\\": ""
             }
    -    }
    +    },
    +    "version": "102.0.4-p2"
     }
    
  • app/code/Magento/EavGraphQl/composer.json+5 4 modified
    @@ -4,11 +4,11 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-eav": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-eav": "102.0.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*"
    +        "magento/module-graph-ql": "100.3.*"
         },
         "license": [
             "OSL-3.0",
    @@ -21,5 +21,6 @@
             "psr-4": {
                 "Magento\\EavGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Eav/Model/Entity/Attribute.php+19 0 modified
    @@ -260,6 +260,8 @@ public function beforeSave()
                 );
             }
     
    +        $this->validateEntityType();
    +
             $defaultValue = $this->getDefaultValue();
             $hasDefaultValue = (string)$defaultValue != '';
     
    @@ -512,4 +514,21 @@ public function __wakeup()
             $this->reservedAttributeList = $objectManager->get(\Magento\Catalog\Model\Product\ReservedAttributeList::class);
             $this->dateTimeFormatter = $objectManager->get(DateTimeFormatterInterface::class);
         }
    +
    +    /**
    +     * Entity type for existing attribute shouldn't be changed.
    +     *
    +     * @return void
    +     * @throws LocalizedException
    +     */
    +    private function validateEntityType(): void
    +    {
    +        if ($this->getId() !== null) {
    +            $origEntityTypeId = $this->getOrigData('entity_type_id');
    +
    +            if (($origEntityTypeId !== null) && ((int)$this->getEntityTypeId() !== (int)$origEntityTypeId)) {
    +                throw new LocalizedException(__('Do not change entity type.'));
    +            }
    +        }
    +    }
     }
    
  • app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute.php+2 1 modified
    @@ -107,6 +107,7 @@ public function loadByCode(AbstractModel $object, $entityTypeId, $code)
     
             if ($data) {
                 $object->setData($data);
    +            $object->setOrigData('entity_type_id', $object->getEntityTypeId());
                 $this->_afterLoad($object);
                 return true;
             }
    @@ -197,7 +198,7 @@ protected function _beforeSave(AbstractModel $object)
          * @param AbstractModel $attribute
          * @return AbstractDb
          * @throws CouldNotDeleteException
    -     * @since 102.0.3
    +     * @since 102.0.2
          */
         protected function _beforeDelete(AbstractModel $attribute)
         {
    
  • app/code/Magento/Elasticsearch6/composer.json+9 8 modified
    @@ -3,16 +3,16 @@
         "description": "N/A",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-advanced-search": "*",
    -        "magento/module-catalog-search": "*",
    -        "magento/module-search": "*",
    -        "magento/module-store": "*",
    -        "magento/module-elasticsearch": "*",
    +        "magento/framework": "102.0.*",
    +        "magento/module-advanced-search": "100.3.*",
    +        "magento/module-catalog-search": "101.0.*",
    +        "magento/module-search": "101.0.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-elasticsearch": "100.3.*",
             "elasticsearch/elasticsearch": "~2.0|~5.1|~6.1"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -26,5 +26,6 @@
             "psr-4": {
                 "Magento\\Elasticsearch6\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.3"
     }
    
  • app/code/Magento/Elasticsearch/composer.json+12 11 modified
    @@ -3,19 +3,19 @@
         "description": "N/A",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/module-advanced-search": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-search": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-search": "*",
    -        "magento/module-store": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/framework": "*",
    +        "magento/module-advanced-search": "100.3.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-search": "101.0.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-search": "101.0.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-catalog-inventory": "100.3.*",
    +        "magento/framework": "102.0.*",
             "elasticsearch/elasticsearch": "~2.0|~5.1|~6.1"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -29,5 +29,6 @@
             "psr-4": {
                 "Magento\\Elasticsearch\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Email/composer.json+11 10 modified
    @@ -6,17 +6,17 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-config": "*",
    -        "magento/module-store": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-variable": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-cms": "103.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-theme": "101.0.*",
    +        "magento/module-media-storage": "100.3.*",
    +        "magento/module-variable": "100.3.*"
         },
         "suggest": {
    -        "magento/module-theme": "*"
    +        "magento/module-theme": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -30,5 +30,6 @@
             "psr-4": {
                 "Magento\\Email\\": ""
             }
    -    }
    +    },
    +    "version": "101.0.4-p2"
     }
    
  • app/code/Magento/Email/Model/Template/Filter.php+44 7 modified
    @@ -6,8 +6,9 @@
     namespace Magento\Email\Model\Template;
     
     use Magento\Framework\App\ObjectManager;
    +use Magento\Framework\Exception\MailException;
    +use Magento\Framework\Exception\NoSuchEntityException;
     use Magento\Framework\Filesystem;
    -use Magento\Framework\Filesystem\Directory\ReadInterface;
     use Magento\Framework\Filter\VariableResolverInterface;
     use Magento\Framework\View\Asset\ContentProcessorException;
     use Magento\Framework\View\Asset\ContentProcessorInterface;
    @@ -51,7 +52,7 @@ class Filter extends \Magento\Framework\Filter\Template
          * Modifier Callbacks
          *
          * @var array
    -     * @deprecated Use the new Directive Processor interfaces
    +     * @deprecated 101.0.4 Use the new Directive Processor interfaces
          */
         protected $_modifiers = ['nl2br' => ''];
     
    @@ -665,7 +666,7 @@ public function varDirective($construction)
          * @param string $value
          * @param string $default assumed modifier if none present
          * @return array
    -     * @deprecated Use the new FilterApplier or Directive Processor interfaces
    +     * @deprecated 101.0.4 Use the new FilterApplier or Directive Processor interfaces
          */
         protected function explodeModifiers($value, $default = null)
         {
    @@ -684,7 +685,7 @@ protected function explodeModifiers($value, $default = null)
          * @param string $value
          * @param string $modifiers
          * @return string
    -     * @deprecated Use the new FilterApplier or Directive Processor interfaces
    +     * @deprecated 101.0.4 Use the new FilterApplier or Directive Processor interfaces
          */
         protected function applyModifiers($value, $modifiers)
         {
    @@ -712,7 +713,7 @@ protected function applyModifiers($value, $modifiers)
          * @param string $value
          * @param string $type
          * @return string
    -     * @deprecated Use the new FilterApplier or Directive Processor interfaces
    +     * @deprecated 101.0.4 Use the new FilterApplier or Directive Processor interfaces
          */
         public function modifierEscape($value, $type = 'html')
         {
    @@ -740,27 +741,32 @@ public function modifierEscape($value, $type = 'html')
          *     {{protocol store="1"}} - Optional parameter which gets protocol from provide store based on store ID or code
          *
          * @param string[] $construction
    -     * @throws \Magento\Framework\Exception\MailException
          * @return string
    +     * @throws MailException
    +     * @throws NoSuchEntityException
          */
         public function protocolDirective($construction)
         {
             $params = $this->getParameters($construction[2]);
    +
             $store = null;
             if (isset($params['store'])) {
                 try {
                     $store = $this->_storeManager->getStore($params['store']);
                 } catch (\Exception $e) {
    -                throw new \Magento\Framework\Exception\MailException(
    +                throw new MailException(
                         __('Requested invalid store "%1"', $params['store'])
                     );
                 }
             }
    +
             $isSecure = $this->_storeManager->getStore($store)->isCurrentlySecure();
             $protocol = $isSecure ? 'https' : 'http';
             if (isset($params['url'])) {
                 return $protocol . '://' . $params['url'];
             } elseif (isset($params['http']) && isset($params['https'])) {
    +            $this->validateProtocolDirectiveHttpScheme($params);
    +
                 if ($isSecure) {
                     return $params['https'];
                 }
    @@ -770,6 +776,37 @@ public function protocolDirective($construction)
             return $protocol;
         }
     
    +    /**
    +     * Validate protocol directive HTTP parameters.
    +     *
    +     * @param string[] $params
    +     * @return void
    +     * @throws MailException
    +     */
    +    private function validateProtocolDirectiveHttpScheme(array $params) : void
    +    {
    +        $parsed_http = parse_url($params['http']);
    +        $parsed_https = parse_url($params['https']);
    +
    +        if (empty($parsed_http)) {
    +            throw new MailException(
    +                __('Contents of %1 could not be loaded or is empty', $params['http'])
    +            );
    +        } elseif (empty($parsed_https)) {
    +            throw new MailException(
    +                __('Contents of %1 could not be loaded or is empty', $params['https'])
    +            );
    +        } elseif ($parsed_http['scheme'] !== 'http') {
    +            throw new MailException(
    +                __('Contents of %1 could not be loaded or is empty', $params['http'])
    +            );
    +        } elseif ($parsed_https['scheme'] !== 'https') {
    +            throw new MailException(
    +                __('Contents of %1 could not be loaded or is empty', $params['https'])
    +            );
    +        }
    +    }
    +
         /**
          * Store config directive
          *
    
  • app/code/Magento/Email/Test/Unit/Model/Template/FilterTest.php+40 0 modified
    @@ -10,6 +10,8 @@
     use Magento\Framework\App\Area;
     use Magento\Framework\App\Filesystem\DirectoryList;
     use Magento\Framework\Filesystem\Directory\ReadInterface;
    +use Magento\Framework\Exception\MailException;
    +use Magento\Framework\Exception\NoSuchEntityException;
     use Magento\Framework\View\Asset\File\FallbackContext;
     
     /**
    @@ -402,4 +404,42 @@ public function testConfigDirectiveUnavailable()
     
             $this->assertEquals($scopeConfigValue, $this->getModel()->configDirective($construction));
         }
    +
    +    /**
    +     * @throws MailException
    +     * @throws NoSuchEntityException
    +     */
    +    public function testProtocolDirectiveWithValidSchema()
    +    {
    +        $model = $this->getModel();
    +        $storeMock = $this->createMock(\Magento\Store\Model\Store::class);
    +        $storeMock->expects($this->once())->method('isCurrentlySecure')->willReturn(true);
    +        $this->storeManager->expects($this->once())->method('getStore')->willReturn($storeMock);
    +
    +        $data = [
    +            "{{protocol http=\"http://url\" https=\"https://url\"}}",
    +            "protocol",
    +            " http=\"http://url\" https=\"https://url\""
    +        ];
    +        $this->assertEquals('https://url', $model->protocolDirective($data));
    +    }
    +
    +    /**
    +     * @expectedException \Magento\Framework\Exception\MailException
    +     * @throws NoSuchEntityException
    +     */
    +    public function testProtocolDirectiveWithInvalidSchema()
    +    {
    +        $model = $this->getModel();
    +        $storeMock = $this->createMock(\Magento\Store\Model\Store::class);
    +        $storeMock->expects($this->once())->method('isCurrentlySecure')->willReturn(true);
    +        $this->storeManager->expects($this->once())->method('getStore')->willReturn($storeMock);
    +
    +        $data = [
    +            "{{protocol http=\"https://url\" https=\"http://url\"}}",
    +            "protocol",
    +            " http=\"https://url\" https=\"http://url\""
    +        ];
    +        $model->protocolDirective($data);
    +    }
     }
    
  • app/code/Magento/EncryptionKey/composer.json+5 4 modified
    @@ -6,9 +6,9 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-config": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-config": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -22,5 +22,6 @@
             "psr-4": {
                 "Magento\\EncryptionKey\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Fedex/composer.json+11 10 modified
    @@ -7,15 +7,15 @@
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
             "lib-libxml": "*",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-config": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-shipping": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-inventory": "100.3.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-shipping": "100.3.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -29,5 +29,6 @@
             "psr-4": {
                 "Magento\\Fedex\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/GiftMessage/composer.json+13 12 modified
    @@ -6,19 +6,19 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-ui": "101.1.*"
         },
         "suggest": {
    -        "magento/module-eav": "*",
    -        "magento/module-multishipping": "*"
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-multishipping": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -32,5 +32,6 @@
             "psr-4": {
                 "Magento\\GiftMessage\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/GoogleAdwords/composer.json+5 4 modified
    @@ -6,9 +6,9 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -22,5 +22,6 @@
             "psr-4": {
                 "Magento\\GoogleAdwords\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/GoogleAnalytics/composer.json+7 6 modified
    @@ -6,13 +6,13 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-cookie": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-cookie": "100.3.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-store": "101.0.*"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -26,5 +26,6 @@
             "psr-4": {
                 "Magento\\GoogleAnalytics\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/GoogleOptimizer/composer.json+9 8 modified
    @@ -6,13 +6,13 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-google-analytics": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-cms": "103.0.*",
    +        "magento/module-google-analytics": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-ui": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -26,5 +26,6 @@
             "psr-4": {
                 "Magento\\GoogleOptimizer\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/GraphQlCache/composer.json+5 4 modified
    @@ -4,9 +4,9 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-page-cache": "*",
    -        "magento/module-graph-ql": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-page-cache": "100.3.*",
    +        "magento/module-graph-ql": "100.3.*"
         },
         "license": [
             "OSL-3.0",
    @@ -19,5 +19,6 @@
             "psr-4": {
                 "Magento\\GraphQlCache\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.2"
     }
    
  • app/code/Magento/GraphQl/composer.json+6 5 modified
    @@ -4,12 +4,12 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/module-eav": "*",
    -        "magento/framework": "*"
    +        "magento/module-eav": "102.0.*",
    +        "magento/framework": "102.0.*"
         },
         "suggest": {
    -        "magento/module-webapi": "*",
    -        "magento/module-graph-ql-cache": "*"
    +        "magento/module-webapi": "100.3.*",
    +        "magento/module-graph-ql-cache": "100.3.*"
         },
         "license": [
             "OSL-3.0",
    @@ -22,5 +22,6 @@
             "psr-4": {
                 "Magento\\GraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/GroupedCatalogInventory/composer.json+6 5 modified
    @@ -6,10 +6,10 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-grouped-product": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-inventory": "100.3.*",
    +        "magento/module-grouped-product": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -23,5 +23,6 @@
             "psr-4": {
                 "Magento\\GroupedCatalogInventory\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.3"
     }
    
  • app/code/Magento/GroupedImportExport/composer.json+8 7 modified
    @@ -6,12 +6,12 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-import-export": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-grouped-product": "*",
    -        "magento/module-import-export": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-import-export": "101.0.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-grouped-product": "100.3.*",
    +        "magento/module-import-export": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -25,5 +25,6 @@
             "psr-4": {
                 "Magento\\GroupedImportExport\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/GroupedProduct/composer.json+16 15 modified
    @@ -6,22 +6,22 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-msrp": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-inventory": "100.3.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-media-storage": "100.3.*",
    +        "magento/module-msrp": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-ui": "101.1.*"
         },
         "suggest": {
    -        "magento/module-grouped-product-sample-data": "*"
    +        "magento/module-grouped-product-sample-data": "Sample Data version: 100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -35,5 +35,6 @@
             "psr-4": {
                 "Magento\\GroupedProduct\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/GroupedProductGraphQl/composer.json+6 5 modified
    @@ -4,10 +4,10 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/module-grouped-product": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-graph-ql": "*",
    -        "magento/framework": "*"
    +        "magento/module-grouped-product": "100.3.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-graph-ql": "100.3.*",
    +        "magento/framework": "102.0.*"
         },
         "license": [
             "OSL-3.0",
    @@ -20,5 +20,6 @@
             "psr-4": {
                 "Magento\\GroupedProductGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/ImportExport/composer.json+9 8 modified
    @@ -7,13 +7,13 @@
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
             "ext-ctype": "*",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-media-storage": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-ui": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -27,5 +27,6 @@
             "psr-4": {
                 "Magento\\ImportExport\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/ImportExport/Test/Mftf/Test/AdminCheckThatSomeAttributesChangedValueToEmptyAfterImportTest.xml+3 0 modified
    @@ -42,6 +42,9 @@
                 <!--Delete attribute-->
                 <deleteData createDataKey="productAttribute" stepKey="deleteProductAttribute"/>
                 <actionGroup ref="logout" stepKey="logoutFromAdmin"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <!--Create product-->
             <actionGroup ref="GoToSpecifiedCreateProductPage" stepKey="openProductFillForm"/>
    
  • app/code/Magento/Indexer/composer.json+4 3 modified
    @@ -6,8 +6,8 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -21,5 +21,6 @@
             "psr-4": {
                 "Magento\\Indexer\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/Indexer/Test/Mftf/ActionGroup/CliRunReindexUsingCronJobsActionGroup.xml+18 0 added
    @@ -0,0 +1,18 @@
    +<?xml version="1.0" encoding="UTF-8"?>
    +<!--
    + /**
    +  * Copyright © Magento, Inc. All rights reserved.
    +  * See COPYING.txt for license details.
    +  */
    +-->
    +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +              xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
    +    <actionGroup name="CliRunReindexUsingCronJobsActionGroup">
    +        <annotations>
    +            <description>Run cron 'index' group which reindex all invalidated indices.</description>
    +        </annotations>
    +
    +        <magentoCLI command="cron:run" arguments="--group='index'" stepKey="firstRunToScheduleJobs"/>
    +        <magentoCLI command="cron:run" arguments="--group='index'" stepKey="secondRunToExecuteJobs"/>
    +    </actionGroup>
    +</actionGroups>
    
  • app/code/Magento/InstantPurchase/composer.json+26 25 modified
    @@ -1,28 +1,29 @@
     {
    -  "name": "magento/module-instant-purchase",
    -  "description": "N/A",
    -  "type": "magento2-module",
    -  "license": [
    -    "OSL-3.0",
    -    "AFL-3.0"
    -  ],
    -  "require": {
    -    "php": "~7.1.3||~7.2.0||~7.3.0",
    -    "magento/module-store": "*",
    -    "magento/module-catalog": "*",
    -    "magento/module-customer": "*",
    -    "magento/module-sales": "*",
    -    "magento/module-shipping": "*",
    -    "magento/module-quote": "*",
    -    "magento/module-vault": "*",
    -    "magento/framework": "*"
    -  },
    -  "autoload": {
    -    "files": [
    -      "registration.php"
    +    "name": "magento/module-instant-purchase",
    +    "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
         ],
    -    "psr-4": {
    -      "Magento\\InstantPurchase\\": ""
    -    }
    -  }
    +    "require": {
    +        "php": "~7.1.3||~7.2.0||~7.3.0",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-shipping": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-vault": "101.1.*",
    +        "magento/framework": "102.0.*"
    +    },
    +    "autoload": {
    +        "files": [
    +            "registration.php"
    +        ],
    +        "psr-4": {
    +            "Magento\\InstantPurchase\\": ""
    +        }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Integration/composer.json+9 8 modified
    @@ -6,13 +6,13 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-security": "*",
    -        "magento/module-store": "*",
    -        "magento/module-user": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-authorization": "100.3.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-security": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-user": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -26,5 +26,6 @@
             "psr-4": {
                 "Magento\\Integration\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/LayeredNavigation/Block/Navigation.php+1 0 modified
    @@ -76,6 +76,7 @@ protected function _prepareLayout()
     
         /**
          * @inheritdoc
    +     * @since 100.3.4
          */
         protected function _beforeToHtml()
         {
    
  • app/code/Magento/LayeredNavigation/composer.json+5 4 modified
    @@ -6,9 +6,9 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-config": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-config": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -22,5 +22,6 @@
             "psr-4": {
                 "Magento\\LayeredNavigation\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Marketplace/composer.json+4 3 modified
    @@ -6,8 +6,8 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -21,5 +21,6 @@
             "psr-4": {
                 "Magento\\Marketplace\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/MediaGalleryApi/composer.json+3 2 modified
    @@ -3,7 +3,7 @@
         "description": "Magento module responsible for media gallery asset attributes storage and management",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*"
    +        "magento/framework": "102.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -17,5 +17,6 @@
             "psr-4": {
                 "Magento\\MediaGalleryApi\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.0"
     }
    
  • app/code/Magento/MediaGallery/composer.json+6 5 modified
    @@ -3,10 +3,10 @@
         "description": "Magento module responsible for media handling",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-media-gallery-api": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-catalog": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-media-gallery-api": "100.3.*",
    +        "magento/module-cms": "103.0.*",
    +        "magento/module-catalog": "103.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -20,5 +20,6 @@
             "psr-4": {
                 "Magento\\MediaGallery\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.0-p2"
     }
    
  • app/code/Magento/MediaStorage/composer.json+8 7 modified
    @@ -6,12 +6,12 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-config": "*",
    -        "magento/module-store": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-theme": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-theme": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -25,5 +25,6 @@
             "psr-4": {
                 "Magento\\MediaStorage\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/MessageQueue/composer.json+3 2 modified
    @@ -5,7 +5,7 @@
             "sort-packages": true
         },
         "require": {
    -        "magento/framework": "*",
    +        "magento/framework": "102.0.*",
             "magento/magento-composer-installer": "*",
             "php": "~7.1.3||~7.2.0||~7.3.0"
         },
    @@ -21,5 +21,6 @@
             "psr-4": {
                 "Magento\\MessageQueue\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/Msrp/composer.json+10 9 modified
    @@ -6,16 +6,16 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-downloadable": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-downloadable": "100.3.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-tax": "100.3.*"
         },
         "suggest": {
    -        "magento/module-bundle": "*",
    -        "magento/module-msrp-sample-data": "*"
    +        "magento/module-bundle": "100.3.*",
    +        "magento/module-msrp-sample-data": "Sample Data version: 100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -29,5 +29,6 @@
             "psr-4": {
                 "Magento\\Msrp\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/MsrpConfigurableProduct/composer.json+6 5 modified
    @@ -6,10 +6,10 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-msrp": "*",
    -        "magento/module-configurable-product": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-msrp": "100.3.*",
    +        "magento/module-configurable-product": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -23,5 +23,6 @@
             "psr-4": {
                 "Magento\\MsrpConfigurableProduct\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.3"
     }
    
  • app/code/Magento/MsrpGroupedProduct/composer.json+6 5 modified
    @@ -6,10 +6,10 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-msrp": "*",
    -        "magento/module-grouped-product": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-msrp": "100.3.*",
    +        "magento/module-grouped-product": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -23,5 +23,6 @@
             "psr-4": {
                 "Magento\\MsrpGroupedProduct\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.3"
     }
    
  • app/code/Magento/Msrp/Test/Mftf/Test/StorefrontProductWithMapAssignedConfigProductIsCorrectTest.xml+3 0 modified
    @@ -105,6 +105,9 @@
                 <createData entity="MsrpDisableMAP" stepKey="disableMAP"/>
     
                 <actionGroup ref="logout" stepKey="logoutOfAdmin"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
     
             <!-- Set Manufacturer's Suggested Retail Price to products-->
    
  • app/code/Magento/Multishipping/composer.json+12 11 modified
    @@ -6,16 +6,16 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-theme": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-payment": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-tax": "100.3.*",
    +        "magento/module-theme": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -29,5 +29,6 @@
             "psr-4": {
                 "Magento\\Multishipping\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/MysqlMq/composer.json+4 3 modified
    @@ -5,9 +5,9 @@
             "sort-packages": true
         },
         "require": {
    -        "magento/framework": "*",
    +        "magento/framework": "102.0.*",
             "magento/magento-composer-installer": "*",
    -        "magento/module-store": "*",
    +        "magento/module-store": "101.0.*",
             "php": "~7.1.3||~7.2.0||~7.3.0"
         },
         "type": "magento2-module",
    @@ -22,5 +22,6 @@
             "psr-4": {
                 "Magento\\MysqlMq\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/NewRelicReporting/composer.json+9 8 modified
    @@ -6,14 +6,14 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    +        "magento/framework": "102.0.*",
             "magento/magento-composer-installer": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-config": "*",
    -        "magento/module-configurable-product": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-store": "*"
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-configurable-product": "100.3.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -27,5 +27,6 @@
             "psr-4": {
                 "Magento\\NewRelicReporting\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/Newsletter/Block/Adminhtml/Queue/Preview.php+5 1 modified
    @@ -26,8 +26,8 @@ class Preview extends \Magento\Newsletter\Block\Adminhtml\Template\Preview
         /**
          * @param \Magento\Backend\Block\Template\Context $context
          * @param \Magento\Newsletter\Model\TemplateFactory $templateFactory
    -     * @param \Magento\Newsletter\Model\QueueFactory $queueFactory
          * @param \Magento\Newsletter\Model\SubscriberFactory $subscriberFactory
    +     * @param \Magento\Newsletter\Model\QueueFactory $queueFactory
          * @param array $data
          */
         public function __construct(
    @@ -42,6 +42,8 @@ public function __construct(
         }
     
         /**
    +     * Load newsletter email template.
    +     *
          * @param \Magento\Newsletter\Model\Template $template
          * @param string $id
          * @return $this
    @@ -50,9 +52,11 @@ protected function loadTemplate(\Magento\Newsletter\Model\Template $template, $i
         {
             /** @var \Magento\Newsletter\Model\Queue $queue */
             $queue = $this->_queueFactory->create()->load($id);
    +        $template->setId($queue->getTemplateId());
             $template->setTemplateType($queue->getNewsletterType());
             $template->setTemplateText($queue->getNewsletterText());
             $template->setTemplateStyles($queue->getNewsletterStyles());
    +
             return $this;
         }
     }
    
  • app/code/Magento/Newsletter/composer.json+11 10 modified
    @@ -6,15 +6,15 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-email": "*",
    -        "magento/module-require-js": "*",
    -        "magento/module-store": "*",
    -        "magento/module-widget": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-cms": "103.0.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-email": "101.0.*",
    +        "magento/module-require-js": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-widget": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -28,5 +28,6 @@
             "psr-4": {
                 "Magento\\Newsletter\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/Newsletter/Test/Unit/Block/Adminhtml/Queue/PreviewTest.php+50 22 modified
    @@ -49,18 +49,18 @@ protected function setUp()
         {
             $context = $this->createMock(\Magento\Backend\Block\Template\Context::class);
             $eventManager = $this->createMock(\Magento\Framework\Event\ManagerInterface::class);
    -        $context->expects($this->once())->method('getEventManager')->will($this->returnValue($eventManager));
    +        $context->expects($this->once())->method('getEventManager')->willReturn($eventManager);
             $scopeConfig = $this->createMock(\Magento\Framework\App\Config\ScopeConfigInterface::class);
    -        $context->expects($this->once())->method('getScopeConfig')->will($this->returnValue($scopeConfig));
    +        $context->expects($this->once())->method('getScopeConfig')->willReturn($scopeConfig);
             $this->request = $this->createMock(\Magento\Framework\App\Request\Http::class);
    -        $context->expects($this->once())->method('getRequest')->will($this->returnValue($this->request));
    +        $context->expects($this->once())->method('getRequest')->willReturn($this->request);
             $this->storeManager = $this->createPartialMock(
                 \Magento\Store\Model\StoreManager::class,
                 ['getStores', 'getDefaultStoreView']
             );
    -        $context->expects($this->once())->method('getStoreManager')->will($this->returnValue($this->storeManager));
    +        $context->expects($this->once())->method('getStoreManager')->willReturn($this->storeManager);
             $appState = $this->createMock(\Magento\Framework\App\State::class);
    -        $context->expects($this->once())->method('getAppState')->will($this->returnValue($appState));
    +        $context->expects($this->once())->method('getAppState')->willReturn($appState);
     
             $backendSession = $this->getMockBuilder(\Magento\Backend\Model\Session::class)
                 ->disableOriginalConstructor()
    @@ -69,16 +69,34 @@ protected function setUp()
             $context->expects($this->once())->method('getBackendSession')->willReturn($backendSession);
     
             $templateFactory = $this->createPartialMock(\Magento\Newsletter\Model\TemplateFactory::class, ['create']);
    -        $this->template = $this->createMock(\Magento\Newsletter\Model\Template::class);
    -        $templateFactory->expects($this->once())->method('create')->will($this->returnValue($this->template));
    +        $this->template = $this->createPartialMock(
    +            \Magento\Newsletter\Model\Template::class,
    +            [
    +                'isPlain',
    +                'setId',
    +                'setTemplateType',
    +                'setTemplateText',
    +                'setTemplateStyles',
    +            ]
    +        );
    +        $templateFactory->expects($this->once())->method('create')->willReturn($this->template);
     
             $subscriberFactory = $this->createPartialMock(\Magento\Newsletter\Model\SubscriberFactory::class, ['create']);
             $this->subscriber = $this->createMock(\Magento\Newsletter\Model\Subscriber::class);
    -        $subscriberFactory->expects($this->once())->method('create')->will($this->returnValue($this->subscriber));
    +        $subscriberFactory->expects($this->once())->method('create')->willReturn($this->subscriber);
     
             $queueFactory = $this->createPartialMock(\Magento\Newsletter\Model\QueueFactory::class, ['create']);
    -        $this->queue = $this->createPartialMock(\Magento\Newsletter\Model\Queue::class, ['load']);
    -        $queueFactory->expects($this->any())->method('create')->will($this->returnValue($this->queue));
    +        $this->queue = $this->createPartialMock(
    +            \Magento\Newsletter\Model\Queue::class,
    +            [
    +                'load',
    +                'getTemplateId',
    +                'getNewsletterType',
    +                'getNewsletterText',
    +                'getNewsletterStyles',
    +            ]
    +        );
    +        $queueFactory->expects($this->any())->method('create')->willReturn($this->queue);
     
             $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
     
    @@ -100,27 +118,37 @@ public function testToHtmlEmpty()
         {
             /** @var \Magento\Store\Model\Store $store */
             $store = $this->createPartialMock(\Magento\Store\Model\Store::class, ['getId']);
    -        $this->storeManager->expects($this->once())->method('getDefaultStoreView')->will($this->returnValue($store));
    +        $this->storeManager->expects($this->once())->method('getDefaultStoreView')->willReturn($store);
             $result = $this->preview->toHtml();
             $this->assertEquals('', $result);
         }
     
         public function testToHtmlWithId()
         {
    -        $this->request->expects($this->any())->method('getParam')->will(
    -            $this->returnValueMap(
    -                [
    -                    ['id', null, 1],
    -                    ['store_id', null, 0]
    -                ]
    -            )
    +        $templateId = 1;
    +        $newsletterType = 2;
    +        $newsletterText = 'newsletter text';
    +        $newsletterStyle = 'style';
    +        $this->request->expects($this->any())->method('getParam')->willReturnMap(
    +            [
    +                ['id', null, 1],
    +                ['store_id', null, 0],
    +            ]
             );
    -        $this->queue->expects($this->once())->method('load')->will($this->returnSelf());
    -        $this->template->expects($this->any())->method('isPlain')->will($this->returnValue(true));
    +        $this->queue->expects($this->once())->method('load')->willReturnSelf();
    +        $this->queue->expects($this->once())->method('getTemplateId')->willReturn($templateId);
    +        $this->queue->expects($this->once())->method('getNewsletterType')->willReturn($newsletterType);
    +        $this->queue->expects($this->once())->method('getNewsletterText')->willReturn($newsletterText);
    +        $this->queue->expects($this->once())->method('getNewsletterStyles')->willReturn($newsletterStyle);
    +        $this->template->expects($this->any())->method('isPlain')->willReturn(true);
    +        $this->template->expects($this->once())->method('setId')->willReturn($templateId);
    +        $this->template->expects($this->once())->method('setTemplateType')->willReturn($newsletterType);
    +        $this->template->expects($this->once())->method('setTemplateText')->willReturn($newsletterText);
    +        $this->template->expects($this->once())->method('setTemplateStyles')->willReturn($newsletterStyle);
             /** @var \Magento\Store\Model\Store $store */
    -        $this->storeManager->expects($this->once())->method('getDefaultStoreView')->will($this->returnValue(null));
    +        $this->storeManager->expects($this->once())->method('getDefaultStoreView')->willReturn(null);
             $store = $this->createPartialMock(\Magento\Store\Model\Store::class, ['getId']);
    -        $this->storeManager->expects($this->once())->method('getStores')->will($this->returnValue([0 => $store]));
    +        $this->storeManager->expects($this->once())->method('getStores')->willReturn([0 => $store]);
             $result = $this->preview->toHtml();
             $this->assertEquals('<pre></pre>', $result);
         }
    
  • app/code/Magento/OfflinePayments/composer.json+6 5 modified
    @@ -6,12 +6,12 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-payment": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-payment": "100.3.*"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -25,5 +25,6 @@
             "psr-4": {
                 "Magento\\OfflinePayments\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/OfflineShipping/composer.json+14 13 modified
    @@ -6,20 +6,20 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-config": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-sales-rule": "*",
    -        "magento/module-shipping": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-sales-rule": "101.1.*",
    +        "magento/module-shipping": "100.3.*",
    +        "magento/module-store": "101.0.*"
         },
         "suggest": {
    -        "magento/module-checkout": "*",
    -        "magento/module-offline-shipping-sample-data": "*"
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-offline-shipping-sample-data": "Sample Data version: 100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -33,5 +33,6 @@
             "psr-4": {
                 "Magento\\OfflineShipping\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/PageCache/composer.json+6 5 modified
    @@ -6,10 +6,10 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-config": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -23,5 +23,6 @@
             "psr-4": {
                 "Magento\\PageCache\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/PageCache/Controller/Block/Render.php+1 1 modified
    @@ -11,7 +11,7 @@
     /**
      * Page cache render controller
      *
    - * @deprecated
    + * @deprecated 100.3.4
      */
     class Render extends \Magento\PageCache\Controller\Block implements HttpGetActionInterface
     {
    
  • app/code/Magento/Payment/composer.json+9 8 modified
    @@ -6,13 +6,13 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-config": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -26,5 +26,6 @@
             "psr-4": {
                 "Magento\\Payment\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/PaypalCaptcha/composer.json+7 6 modified
    @@ -6,13 +6,13 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-captcha": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-captcha": "100.3.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-store": "101.0.*"
         },
         "suggest": {
    -        "magento/module-paypal": "*"
    +        "magento/module-paypal": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -26,5 +26,6 @@
             "psr-4": {
                 "Magento\\PaypalCaptcha\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.2"
     }
    
  • app/code/Magento/Paypal/composer.json+20 19 modified
    @@ -7,26 +7,26 @@
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
             "lib-libxml": "*",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-instant-purchase": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-vault": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-instant-purchase": "100.3.*",
    +        "magento/module-payment": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-tax": "100.3.*",
    +        "magento/module-theme": "101.0.*",
    +        "magento/module-ui": "101.1.*",
    +        "magento/module-vault": "101.1.*"
         },
         "suggest": {
    -        "magento/module-checkout-agreements": "*"
    +        "magento/module-checkout-agreements": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -40,5 +40,6 @@
             "psr-4": {
                 "Magento\\Paypal\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/PaypalGraphQl/composer.json+11 10 modified
    @@ -6,17 +6,17 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-paypal": "*",
    -        "magento/module-quote-graph-ql": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-paypal": "100.3.*",
    +        "magento/module-quote-graph-ql": "100.3.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-payment": "100.3.*",
    +        "magento/module-store": "101.0.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*"
    +        "magento/module-graph-ql": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -30,5 +30,6 @@
             "psr-4": {
                 "Magento\\PaypalGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.1"
     }
    
  • app/code/Magento/Paypal/Model/Api/Nvp.php+14 14 modified
    @@ -1512,17 +1512,17 @@ protected function _applyStreetAndRegionWorkarounds(DataObject $address)
             }
             // attempt to fetch region_id from directory
             if ($address->getCountryId() && $address->getRegion()) {
    -            $regions = $this->_countryFactory->create()->loadByCode(
    -                $address->getCountryId()
    -            )->getRegionCollection()->addRegionCodeOrNameFilter(
    -                $address->getRegion()
    -            )->setPageSize(
    -                1
    -            );
    +            $regions = $this->_countryFactory->create()
    +                ->getRegionCollection()
    +                ->addCountryFilter($address->getCountryId())
    +                ->addRegionCodeOrNameFilter($address->getRegion())
    +                ->setPageSize(1);
                 $regionItems = $regions->getItems();
    -            $region = array_shift($regionItems);
    -            $address->setRegionId($region->getId());
    -            $address->setExportedKeys(array_merge($address->getExportedKeys(), ['region_id']));
    +            if (count($regionItems)) {
    +                $region = array_shift($regionItems);
    +                $address->setRegionId($region->getId());
    +                $address->setExportedKeys(array_merge($address->getExportedKeys(), ['region_id']));
    +            }
             }
         }
     
    @@ -1624,7 +1624,7 @@ protected function _filterPeriodUnit($value)
                 case 'year':
                     return 'Year';
                 default:
    -                break;
    +                return '';
             }
         }
     
    @@ -1653,7 +1653,7 @@ protected function _filterBillingAgreementStatus($value)
                 case 'active':
                     return 'Active';
                 default:
    -                break;
    +                return '';
             }
         }
     
    @@ -1694,7 +1694,7 @@ protected function _filterPaymentStatusFromNvpToInfo($value)
                 case 'Voided':
                     return \Magento\Paypal\Model\Info::PAYMENTSTATUS_VOIDED;
                 default:
    -                break;
    +                return null;
             }
         }
     
    @@ -1712,7 +1712,7 @@ protected function _filterPaymentReviewAction($value)
                 case \Magento\Paypal\Model\Pro::PAYMENT_REVIEW_DENY:
                     return 'Deny';
                 default:
    -                break;
    +                return null;
             }
         }
     
    
  • app/code/Magento/Persistent/composer.json+9 8 modified
    @@ -6,13 +6,13 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-cron": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-page-cache": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-cron": "100.3.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-page-cache": "100.3.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-store": "101.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -26,5 +26,6 @@
             "psr-4": {
                 "Magento\\Persistent\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/ProductAlert/composer.json+8 7 modified
    @@ -6,14 +6,14 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-store": "101.0.*"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -27,5 +27,6 @@
             "psr-4": {
                 "Magento\\ProductAlert\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/ProductVideo/composer.json+10 9 modified
    @@ -6,17 +6,17 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    +        "magento/framework": "102.0.*",
             "magento/magento-composer-installer": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-store": "*"
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-media-storage": "100.3.*",
    +        "magento/module-store": "101.0.*"
         },
         "suggest": {
    -        "magento/module-customer": "*",
    -        "magento/module-config": "*"
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-config": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -30,5 +30,6 @@
             "psr-4": {
                 "Magento\\ProductVideo\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/QuoteAnalytics/composer.json+5 4 modified
    @@ -3,9 +3,9 @@
         "description": "N/A",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-analytics": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-analytics": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -19,5 +19,6 @@
             "psr-4": {
                 "Magento\\QuoteAnalytics\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/Quote/composer.json+18 17 modified
    @@ -6,24 +6,24 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-sales-sequence": "*",
    -        "magento/module-shipping": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-authorization": "100.3.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-inventory": "100.3.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-payment": "100.3.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-sales-sequence": "100.3.*",
    +        "magento/module-shipping": "100.3.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-tax": "100.3.*"
         },
         "suggest": {
    -        "magento/module-webapi": "*"
    +        "magento/module-webapi": "100.3.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -37,5 +37,6 @@
             "psr-4": {
                 "Magento\\Quote\\": ""
             }
    -    }
    +    },
    +    "version": "101.1.4-p2"
     }
    
  • app/code/Magento/QuoteGraphQl/composer.json+13 12 modified
    @@ -4,19 +4,19 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-store": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-customer-graph-ql": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-graph-ql": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-checkout": "100.3.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-customer-graph-ql": "100.3.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-directory": "100.3.*",
    +        "magento/module-graph-ql": "100.3.*"
         },
         "suggest": {
    -        "magento/module-graph-ql-cache": "*"
    +        "magento/module-graph-ql-cache": "100.3.*"
         },
         "license": [
             "OSL-3.0",
    @@ -29,5 +29,6 @@
             "psr-4": {
                 "Magento\\QuoteGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    
  • app/code/Magento/QuoteGraphQl/Model/Resolver/SetPaymentAndPlaceOrder.php+1 1 modified
    @@ -22,7 +22,7 @@
     /**
      * Resolver for setting payment method and placing order
      *
    - * @deprecated Should use setPaymentMethodOnCart and placeOrder mutations in single request.
    + * @deprecated 100.3.4 Should use setPaymentMethodOnCart and placeOrder mutations in single request.
      * @see \Magento\QuoteGraphQl\Model\Resolver\SetPaymentMethodOnCart
      * @see \Magento\QuoteGraphQl\Model\Resolver\PlaceOrder
      */
    
  • app/code/Magento/Quote/Test/Mftf/Test/StorefrontGuestCheckoutDisabledProductTest.xml+3 0 modified
    @@ -87,6 +87,9 @@
                 <deleteData createDataKey="createConfigProductAttribute" stepKey="deleteConfigProductAttribute"/>
                 <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="navigateToProductListing"/>
                 <actionGroup ref="resetProductGridToDefaultView" stepKey="resetGridToDefaultKeywordSearch"/>
    +
    +            <!-- Reindex invalidated indices after product attribute has been created/deleted -->
    +            <actionGroup ref="CliRunReindexUsingCronJobsActionGroup" stepKey="reindexInvalidatedIndices"/>
             </after>
             <!-- Step 1: Add simple product to shopping cart -->
             <amOnPage url="{{StorefrontProductPage.url($$createSimpleProduct.name$$)}}" stepKey="amOnSimpleProductPage"/>
    
  • app/code/Magento/RelatedProductGraphQl/composer.json+6 5 modified
    @@ -4,12 +4,12 @@
         "type": "magento2-module",
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-graph-ql": "*",
    -        "magento/framework": "*"
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-graph-ql": "100.3.*",
    +        "magento/framework": "102.0.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*"
    +        "magento/module-graph-ql": "100.3.*"
         },
         "license": [
             "OSL-3.0",
    @@ -22,5 +22,6 @@
             "psr-4": {
                 "Magento\\RelatedProductGraphQl\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.1"
     }
    
  • app/code/Magento/ReleaseNotification/composer.json+25 24 modified
    @@ -1,27 +1,28 @@
     {
    -  "name": "magento/module-release-notification",
    -  "description": "N/A",
    -  "require": {
    -    "php": "~7.1.3||~7.2.0||~7.3.0",
    -    "magento/module-user": "*",
    -    "magento/module-backend": "*",
    -    "magento/module-ui": "*",
    -    "magento/framework": "*"
    -  },
    -  "suggest": {
    -    "magento/module-config": "*"
    -  },
    -  "type": "magento2-module",
    -  "license": [
    -    "OSL-3.0",
    -    "AFL-3.0"
    -  ],
    -  "autoload": {
    -    "files": [
    -      "registration.php"
    +    "name": "magento/module-release-notification",
    +    "description": "N/A",
    +    "require": {
    +        "php": "~7.1.3||~7.2.0||~7.3.0",
    +        "magento/module-user": "101.1.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-ui": "101.1.*",
    +        "magento/framework": "102.0.*"
    +    },
    +    "suggest": {
    +        "magento/module-config": "101.1.*"
    +    },
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
         ],
    -    "psr-4": {
    -      "Magento\\ReleaseNotification\\": ""
    -    }
    -  }
    +    "autoload": {
    +        "files": [
    +            "registration.php"
    +        ],
    +        "psr-4": {
    +            "Magento\\ReleaseNotification\\": ""
    +        }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/Reports/composer.json+19 18 modified
    @@ -6,23 +6,23 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-downloadable": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-review": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-sales-rule": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-widget": "*",
    -        "magento/module-wishlist": "*"
    +        "magento/framework": "102.0.*",
    +        "magento/module-backend": "101.0.*",
    +        "magento/module-catalog": "103.0.*",
    +        "magento/module-catalog-inventory": "100.3.*",
    +        "magento/module-cms": "103.0.*",
    +        "magento/module-config": "101.1.*",
    +        "magento/module-customer": "102.0.*",
    +        "magento/module-downloadable": "100.3.*",
    +        "magento/module-eav": "102.0.*",
    +        "magento/module-quote": "101.1.*",
    +        "magento/module-review": "100.3.*",
    +        "magento/module-sales": "102.0.*",
    +        "magento/module-sales-rule": "101.1.*",
    +        "magento/module-store": "101.0.*",
    +        "magento/module-tax": "100.3.*",
    +        "magento/module-widget": "101.1.*",
    +        "magento/module-wishlist": "101.1.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -36,5 +36,6 @@
             "psr-4": {
                 "Magento\\Reports\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4-p2"
     }
    
  • app/code/Magento/RequireJs/composer.json+3 2 modified
    @@ -6,7 +6,7 @@
         },
         "require": {
             "php": "~7.1.3||~7.2.0||~7.3.0",
    -        "magento/framework": "*"
    +        "magento/framework": "102.0.*"
         },
         "type": "magento2-module",
         "license": [
    @@ -20,5 +20,6 @@
             "psr-4": {
                 "Magento\\RequireJs\\": ""
             }
    -    }
    +    },
    +    "version": "100.3.4"
     }
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

4

News mentions

0

No linked articles in our index yet.