From 8488c07818215f92b073a6e6b31b38162caa7aaf Mon Sep 17 00:00:00 2001 From: Valentin Hirson Date: Thu, 18 Jul 2019 12:23:22 +0200 Subject: [PATCH 01/15] #23766 - fix pattern validation on form submit --- lib/web/mage/validation.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web/mage/validation.js b/lib/web/mage/validation.js index a7a5ade2ae9f3..8c1b68be3ba6c 100644 --- a/lib/web/mage/validation.js +++ b/lib/web/mage/validation.js @@ -559,7 +559,7 @@ /* eslint-enable max-len */ 'pattern': [ function (value, element, param) { - return this.optional(element) || param.test(value); + return this.optional(element) || new RegExp(param).test(value); }, $.mage.__('Invalid format.') ], From f0856e8575bc0cc86543d14da2bd45d8e457fa25 Mon Sep 17 00:00:00 2001 From: David Verholen Date: Tue, 6 Aug 2019 12:39:54 +0200 Subject: [PATCH 02/15] 24025 add caching for magento product version fixes https://github.com/magento/magento2/issues/24025 --- .../Magento/Framework/App/ProductMetadata.php | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/internal/Magento/Framework/App/ProductMetadata.php b/lib/internal/Magento/Framework/App/ProductMetadata.php index c9fde94352a71..2829292555790 100644 --- a/lib/internal/Magento/Framework/App/ProductMetadata.php +++ b/lib/internal/Magento/Framework/App/ProductMetadata.php @@ -8,9 +8,9 @@ namespace Magento\Framework\App; use Magento\Framework\Composer\ComposerFactory; -use \Magento\Framework\Composer\ComposerJsonFinder; -use \Magento\Framework\App\Filesystem\DirectoryList; -use \Magento\Framework\Composer\ComposerInformation; +use Magento\Framework\Composer\ComposerJsonFinder; +use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\Composer\ComposerInformation; /** * Class ProductMetadata @@ -28,6 +28,11 @@ class ProductMetadata implements ProductMetadataInterface */ const PRODUCT_NAME = 'Magento'; + /** + * Magento Product Version Cache Key + */ + const MAGENTO_PRODUCT_VERSION_CACHE_KEY = 'magento-product-version'; + /** * Product version * @@ -45,13 +50,19 @@ class ProductMetadata implements ProductMetadataInterface * @var \Magento\Framework\Composer\ComposerInformation */ private $composerInformation; + /** + * @var CacheInterface + */ + private $cache; /** * @param ComposerJsonFinder $composerJsonFinder + * @param CacheInterface|null $cache */ - public function __construct(ComposerJsonFinder $composerJsonFinder) + public function __construct(ComposerJsonFinder $composerJsonFinder, CacheInterface $cache = null) { $this->composerJsonFinder = $composerJsonFinder; + $this->cache = $cache ?: ObjectManager::getInstance()->get(CacheInterface::class); } /** @@ -61,6 +72,9 @@ public function __construct(ComposerJsonFinder $composerJsonFinder) */ public function getVersion() { + if ($cachedVersion = $this->cache->load(self::MAGENTO_PRODUCT_VERSION_CACHE_KEY)) { + $this->version = $cachedVersion; + } if (!$this->version) { if (!($this->version = $this->getSystemPackageVersion())) { if ($this->getComposerInformation()->isMagentoRoot()) { @@ -69,6 +83,7 @@ public function getVersion() $this->version = 'UNKNOWN'; } } + $this->cache->save($this->version, self::MAGENTO_PRODUCT_VERSION_CACHE_KEY); } return $this->version; } From ed1fb0358045fd988c59a00e68099cf3632e5865 Mon Sep 17 00:00:00 2001 From: David Verholen Date: Wed, 7 Aug 2019 15:30:34 +0200 Subject: [PATCH 03/15] 24025 add caching for magento product version fixes https://github.com/magento/magento2/issues/24025 --- lib/internal/Magento/Framework/App/ProductMetadata.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/internal/Magento/Framework/App/ProductMetadata.php b/lib/internal/Magento/Framework/App/ProductMetadata.php index 2829292555790..d5da7aeba3054 100644 --- a/lib/internal/Magento/Framework/App/ProductMetadata.php +++ b/lib/internal/Magento/Framework/App/ProductMetadata.php @@ -14,6 +14,7 @@ /** * Class ProductMetadata + * * @package Magento\Framework\App */ class ProductMetadata implements ProductMetadataInterface From 34d6d5599178d5939baf9d11bb4780b145f46e84 Mon Sep 17 00:00:00 2001 From: Vinai Kopp Date: Fri, 16 Aug 2019 09:08:41 -0500 Subject: [PATCH 04/15] Fix config backend model PDF file name extension --- .../Config/Model/Config/Backend/File/Pdf.php | 21 +++++++++++++++++++ .../Config/Model/Config/Backend/Image/Pdf.php | 10 +++------ 2 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 app/code/Magento/Config/Model/Config/Backend/File/Pdf.php diff --git a/app/code/Magento/Config/Model/Config/Backend/File/Pdf.php b/app/code/Magento/Config/Model/Config/Backend/File/Pdf.php new file mode 100644 index 0000000000000..f4acd6ed21dbb --- /dev/null +++ b/app/code/Magento/Config/Model/Config/Backend/File/Pdf.php @@ -0,0 +1,21 @@ + - */ namespace Magento\Config\Model\Config\Backend\Image; /** * @api - * @since 100.0.2 + * @deprecated The wrong file type extensions are returned. + * @see \Magento\Config\Model\Config\Backend\File\Pdf */ class Pdf extends \Magento\Config\Model\Config\Backend\Image { @@ -22,6 +18,6 @@ class Pdf extends \Magento\Config\Model\Config\Backend\Image */ protected function _getAllowedExtensions() { - return ['tif', 'tiff', 'png', 'jpg', 'jpe', 'jpeg']; + return ['tif', 'tiff', 'png', 'jpg', 'jpe', 'jpeg', 'pdf']; } } From 8628a3a1acf0f34ada315b2e80b11f0c6d17ad62 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky Date: Thu, 22 Aug 2019 14:46:22 +0300 Subject: [PATCH 05/15] magento/magento2#24153: Static tests fix. --- app/code/Magento/Config/Model/Config/Backend/File/Pdf.php | 6 ++++-- app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Config/Model/Config/Backend/File/Pdf.php b/app/code/Magento/Config/Model/Config/Backend/File/Pdf.php index f4acd6ed21dbb..9e3a5ec507a4b 100644 --- a/app/code/Magento/Config/Model/Config/Backend/File/Pdf.php +++ b/app/code/Magento/Config/Model/Config/Backend/File/Pdf.php @@ -4,15 +4,17 @@ * See COPYING.txt for license details. */ -namespace Magento\Config\Model\Config\Backend\Image; +namespace Magento\Config\Model\Config\Backend\File; /** + * System config PDF field backend model. + * * @api */ class Pdf extends \Magento\Config\Model\Config\Backend\File { /** - * @return string[] + * @inheritdoc */ protected function _getAllowedExtensions() { diff --git a/app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php b/app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php index 6e1ff24a65ce3..bde392547a7f9 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php +++ b/app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php @@ -7,6 +7,8 @@ namespace Magento\Config\Model\Config\Backend\Image; /** + * System config PDF field backend model. + * * @api * @deprecated The wrong file type extensions are returned. * @see \Magento\Config\Model\Config\Backend\File\Pdf @@ -14,7 +16,7 @@ class Pdf extends \Magento\Config\Model\Config\Backend\Image { /** - * @return string[] + * @inheritdoc */ protected function _getAllowedExtensions() { From 992602f6237b6f8b50ce61f6b8d69eb708971b29 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov Date: Mon, 16 Sep 2019 17:09:30 -0300 Subject: [PATCH 06/15] Removed api annotation --- app/code/Magento/Config/Model/Config/Backend/File/Pdf.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/code/Magento/Config/Model/Config/Backend/File/Pdf.php b/app/code/Magento/Config/Model/Config/Backend/File/Pdf.php index 9e3a5ec507a4b..8716fe5a23ad3 100644 --- a/app/code/Magento/Config/Model/Config/Backend/File/Pdf.php +++ b/app/code/Magento/Config/Model/Config/Backend/File/Pdf.php @@ -8,8 +8,6 @@ /** * System config PDF field backend model. - * - * @api */ class Pdf extends \Magento\Config\Model\Config\Backend\File { From 2e97e8fc03ff286b4b5eac3b0ec92192a17efb5b Mon Sep 17 00:00:00 2001 From: Stanislav Idolov Date: Mon, 16 Sep 2019 17:10:03 -0300 Subject: [PATCH 07/15] Removed deprecated tag --- app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php b/app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php index bde392547a7f9..4ddc848784551 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php +++ b/app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php @@ -10,7 +10,7 @@ * System config PDF field backend model. * * @api - * @deprecated The wrong file type extensions are returned. + * @since 100.0.2 * @see \Magento\Config\Model\Config\Backend\File\Pdf */ class Pdf extends \Magento\Config\Model\Config\Backend\Image From 66b7785aebd4e4570d789a308f6d40387cc56053 Mon Sep 17 00:00:00 2001 From: rani-webkul Date: Wed, 18 Sep 2019 09:50:50 +0530 Subject: [PATCH 08/15] fixed getting error in console while selecting all downloadable links #24633 added MFTF test --- .../StorefrontDownloadableProductSection.xml | 1 + ...wnloadableLinksDownloadableProductTest.xml | 101 ++++++++++++++++++ .../view/frontend/web/js/add-to-wishlist.js | 4 +- 3 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 app/code/Magento/Downloadable/Test/Mftf/Test/SelectAllDownloadableLinksDownloadableProductTest.xml diff --git a/app/code/Magento/Downloadable/Test/Mftf/Section/StorefrontDownloadableProductSection.xml b/app/code/Magento/Downloadable/Test/Mftf/Section/StorefrontDownloadableProductSection.xml index 543aea7d8297f..20b62ef060309 100644 --- a/app/code/Magento/Downloadable/Test/Mftf/Section/StorefrontDownloadableProductSection.xml +++ b/app/code/Magento/Downloadable/Test/Mftf/Section/StorefrontDownloadableProductSection.xml @@ -14,5 +14,6 @@ + diff --git a/app/code/Magento/Downloadable/Test/Mftf/Test/SelectAllDownloadableLinksDownloadableProductTest.xml b/app/code/Magento/Downloadable/Test/Mftf/Test/SelectAllDownloadableLinksDownloadableProductTest.xml new file mode 100644 index 0000000000000..94940f0e08195 --- /dev/null +++ b/app/code/Magento/Downloadable/Test/Mftf/Test/SelectAllDownloadableLinksDownloadableProductTest.xml @@ -0,0 +1,101 @@ + + + + + + + + + + <description value="All the downloadable links must be selected or unselected when anyone click on select all or unselect all checkbox respectively."/> + <severity value="MAJOR"/> + <group value="Downloadable"/> + </annotations> + <before> + <!-- Create category --> + <createData entity="SimpleSubCategory" stepKey="createCategory"/> + + <!-- Login as admin --> + <actionGroup ref="LoginAsAdmin" stepKey="LoginAsAdmin"/> + + <!-- Create downloadable product --> + <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="amOnProductGridPage"/> + <waitForPageLoad stepKey="waitForProductGridPageLoad"/> + <actionGroup ref="GoToSpecifiedCreateProductPage" stepKey="createProduct"> + <argument name="productType" value="downloadable"/> + </actionGroup> + + <!-- Fill downloadable product values --> + <actionGroup ref="fillMainProductFormNoWeight" stepKey="fillDownloadableProductForm"> + <argument name="product" value="DownloadableProduct"/> + </actionGroup> + + <!-- Add downloadable product to category --> + <searchAndMultiSelectOption selector="{{AdminProductFormSection.categoriesDropdown}}" + parameterArray="[$$createCategory.name$$]" stepKey="fillCategory"/> + + <!-- Fill downloadable link information before the creation link --> + <actionGroup ref="AdminAddDownloadableLinkInformationActionGroup" stepKey="addDownloadableLinkInformation"/> + + <!-- Links can be purchased separately --> + <checkOption selector="{{AdminProductDownloadableSection.isLinksPurchasedSeparately}}" + stepKey="checkOptionPurchaseSeparately"/> + + <!-- Add first downloadable link --> + <actionGroup ref="addDownloadableProductLinkWithMaxDownloads" stepKey="addFirstDownloadableProductLink"> + <argument name="link" value="downloadableLinkWithMaxDownloads"/> + </actionGroup> + + <!-- Add second downloadable link --> + <actionGroup ref="addDownloadableProductLink" stepKey="addSecondDownloadableProductLink"> + <argument name="link" value="downloadableLink"/> + </actionGroup> + + <!-- Save product --> + <actionGroup ref="saveProductForm" stepKey="saveProduct"/> + </before> + <after> + <!-- Delete category --> + <deleteData createDataKey="createCategory" stepKey="deleteCategory"/> + + <!-- Delete created downloadable product --> + <actionGroup ref="deleteProductUsingProductGrid" stepKey="deleteProduct"> + <argument name="product" value="DownloadableProduct"/> + </actionGroup> + + <!-- Log out --> + <actionGroup ref="logout" stepKey="logout"/> + </after> + + <!-- Step 1: Navigate to store front Product page as guest --> + <amOnPage url="/{{DownloadableProduct.sku}}.html" + stepKey="amOnStorefrontProductPage"/> + + <!-- Step 2: click on select all checkbox --> + <click + selector="{{StorefrontDownloadableProductSection.downloadableLinkSelectAllCheckbox}}" + stepKey="selectAllProductLink"/> + + <!-- Step 3: Make sure that all product links are checked --> + <seeCheckboxIsChecked selector="{{StorefrontDownloadableProductSection.downloadableLinkByTitle(downloadableLinkWithMaxDownloads.title)}}" stepKey="seeFirstCheckboxChecked"/> + + <seeCheckboxIsChecked selector="{{StorefrontDownloadableProductSection.downloadableLinkByTitle(downloadableLink.title)}}" stepKey="seeSecondCheckboxChecked"/> + + <!-- Step 4: click again on select all checkbox --> + <click + selector="{{StorefrontDownloadableProductSection.downloadableLinkSelectAllCheckbox}}" + stepKey="unselectAllProductLink"/> + + <!-- Step 5: Make sure that all product links are unchecked --> + <dontSeeCheckboxIsChecked selector="{{StorefrontDownloadableProductSection.downloadableLinkByTitle(downloadableLinkWithMaxDownloads.title)}}" stepKey="seeFirstCheckboxUnChecked"/> + + <dontSeeCheckboxIsChecked selector="{{StorefrontDownloadableProductSection.downloadableLinkByTitle(downloadableLink.title)}}" stepKey="seeSecondCheckboxUnChecked"/> + + </test> +</tests> diff --git a/app/code/Magento/Wishlist/view/frontend/web/js/add-to-wishlist.js b/app/code/Magento/Wishlist/view/frontend/web/js/add-to-wishlist.js index 033e2e43a3c22..aca843872af65 100644 --- a/app/code/Magento/Wishlist/view/frontend/web/js/add-to-wishlist.js +++ b/app/code/Magento/Wishlist/view/frontend/web/js/add-to-wishlist.js @@ -79,7 +79,9 @@ define([ $(element).is('textarea') || $('#' + element.id + ' option:selected').length ) { - dataToAdd = $.extend({}, dataToAdd, self._getElementData(element)); + if ($(element).data('selector') || $(element).attr('name')) { + dataToAdd = $.extend({}, dataToAdd, self._getElementData(element)); + } return; } From a8dae6e8b9fb07f0d83a260230b80719b2abd70f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Szubert?= <bartlomiejszubert@gmail.com> Date: Fri, 20 Sep 2019 09:31:26 +0200 Subject: [PATCH 09/15] Refactor apply options of sales rule to it's own source model to simplify extending of it --- .../Action/SimpleActionOptionsProvider.php | 30 +++++++++ .../Model/Rule/Metadata/ValueProvider.php | 31 ++++++---- .../SimpleActionOptionsProviderTest.php | 43 +++++++++++++ .../Model/Rule/Metadata/ValueProviderTest.php | 62 +++++++++++++------ 4 files changed, 135 insertions(+), 31 deletions(-) create mode 100644 app/code/Magento/SalesRule/Model/Rule/Action/SimpleActionOptionsProvider.php create mode 100644 app/code/Magento/SalesRule/Test/Unit/Model/Rule/Action/SimpleActionOptionsProviderTest.php diff --git a/app/code/Magento/SalesRule/Model/Rule/Action/SimpleActionOptionsProvider.php b/app/code/Magento/SalesRule/Model/Rule/Action/SimpleActionOptionsProvider.php new file mode 100644 index 0000000000000..a0fd4bf576f61 --- /dev/null +++ b/app/code/Magento/SalesRule/Model/Rule/Action/SimpleActionOptionsProvider.php @@ -0,0 +1,30 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\SalesRule\Model\Rule\Action; + +use Magento\Framework\Data\OptionSourceInterface; +use Magento\SalesRule\Model\Rule; + +/** + * Class SimpleActionOptionsProvider + */ +class SimpleActionOptionsProvider implements OptionSourceInterface +{ + /** + * @inheritdoc + */ + public function toOptionArray() + { + return [ + ['label' => __('Percent of product price discount'), 'value' => Rule::BY_PERCENT_ACTION], + ['label' => __('Fixed amount discount'), 'value' => Rule::BY_FIXED_ACTION], + ['label' => __('Fixed amount discount for whole cart'), 'value' => Rule::CART_FIXED_ACTION], + ['label' => __('Buy X get Y free (discount amount is Y)'), 'value' => Rule::BUY_X_GET_Y_ACTION] + ]; + } +} diff --git a/app/code/Magento/SalesRule/Model/Rule/Metadata/ValueProvider.php b/app/code/Magento/SalesRule/Model/Rule/Metadata/ValueProvider.php index fdd6c2b169a7d..e4aaaec98dc79 100644 --- a/app/code/Magento/SalesRule/Model/Rule/Metadata/ValueProvider.php +++ b/app/code/Magento/SalesRule/Model/Rule/Metadata/ValueProvider.php @@ -5,11 +5,14 @@ */ namespace Magento\SalesRule\Model\Rule\Metadata; -use Magento\SalesRule\Model\Rule; -use Magento\Store\Model\System\Store; use Magento\Customer\Api\GroupRepositoryInterface; use Magento\Framework\Api\SearchCriteriaBuilder; +use Magento\Framework\App\ObjectManager; use Magento\Framework\Convert\DataObject; +use Magento\SalesRule\Model\Rule; +use Magento\SalesRule\Model\Rule\Action\SimpleActionOptionsProvider; +use Magento\SalesRule\Model\RuleFactory; +use Magento\Store\Model\System\Store; /** * Metadata provider for sales rule edit form. @@ -37,10 +40,15 @@ class ValueProvider protected $objectConverter; /** - * @var \Magento\SalesRule\Model\RuleFactory + * @var RuleFactory */ protected $salesRuleFactory; + /** + * @var SimpleActionOptionsProvider + */ + private $simpleActionOptionsProvider; + /** * Initialize dependencies. * @@ -48,20 +56,24 @@ class ValueProvider * @param GroupRepositoryInterface $groupRepository * @param SearchCriteriaBuilder $searchCriteriaBuilder * @param DataObject $objectConverter - * @param \Magento\SalesRule\Model\RuleFactory $salesRuleFactory + * @param RuleFactory $salesRuleFactory + * @param SimpleActionOptionsProvider|null $simpleActionOptionsProvider */ public function __construct( Store $store, GroupRepositoryInterface $groupRepository, SearchCriteriaBuilder $searchCriteriaBuilder, DataObject $objectConverter, - \Magento\SalesRule\Model\RuleFactory $salesRuleFactory + RuleFactory $salesRuleFactory, + SimpleActionOptionsProvider $simpleActionOptionsProvider = null ) { $this->store = $store; $this->groupRepository = $groupRepository; $this->searchCriteriaBuilder = $searchCriteriaBuilder; $this->objectConverter = $objectConverter; $this->salesRuleFactory = $salesRuleFactory; + $this->simpleActionOptionsProvider = $simpleActionOptionsProvider ?: + ObjectManager::getInstance()->get(SimpleActionOptionsProvider::class); } /** @@ -71,15 +83,10 @@ public function __construct( * @return array * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ - public function getMetadataValues(\Magento\SalesRule\Model\Rule $rule) + public function getMetadataValues(Rule $rule) { $customerGroups = $this->groupRepository->getList($this->searchCriteriaBuilder->create())->getItems(); - $applyOptions = [ - ['label' => __('Percent of product price discount'), 'value' => Rule::BY_PERCENT_ACTION], - ['label' => __('Fixed amount discount'), 'value' => Rule::BY_FIXED_ACTION], - ['label' => __('Fixed amount discount for whole cart'), 'value' => Rule::CART_FIXED_ACTION], - ['label' => __('Buy X get Y free (discount amount is Y)'), 'value' => Rule::BUY_X_GET_Y_ACTION] - ]; + $applyOptions = $this->simpleActionOptionsProvider->toOptionArray(); $couponTypesOptions = []; $couponTypes = $this->salesRuleFactory->create()->getCouponTypes(); diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Action/SimpleActionOptionsProviderTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Action/SimpleActionOptionsProviderTest.php new file mode 100644 index 0000000000000..4aa9969334e46 --- /dev/null +++ b/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Action/SimpleActionOptionsProviderTest.php @@ -0,0 +1,43 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\SalesRule\Test\Unit\Model\System\Config\Source; + +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use Magento\SalesRule\Model\Rule; +use Magento\SalesRule\Model\Rule\Action\SimpleActionOptionsProvider; +use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\TestCase; + +/** + * @covers SimpleActionOptionsProvider + */ +class SimpleActionOptionsProviderTest extends TestCase +{ + /** + * @var SimpleActionOptionsProvider|MockObject + */ + protected $model; + + protected function setUp() + { + $objectManager = new ObjectManager($this); + + $this->model = $objectManager->getObject(SimpleActionOptionsProvider::class); + } + + public function testToOptionArray() + { + $expected = [ + ['label' => __('Percent of product price discount'), 'value' => Rule::BY_PERCENT_ACTION], + ['label' => __('Fixed amount discount'), 'value' => Rule::BY_FIXED_ACTION], + ['label' => __('Fixed amount discount for whole cart'), 'value' => Rule::CART_FIXED_ACTION], + ['label' => __('Buy X get Y free (discount amount is Y)'), 'value' => Rule::BUY_X_GET_Y_ACTION] + ]; + + $this->assertEquals($expected, $this->model->toOptionArray()); + } +} diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Metadata/ValueProviderTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Metadata/ValueProviderTest.php index 0864b4a5e1480..0a5663598c8e3 100644 --- a/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Metadata/ValueProviderTest.php +++ b/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Metadata/ValueProviderTest.php @@ -5,52 +5,72 @@ */ namespace Magento\SalesRule\Test\Unit\Model\Rule\Metadata; +use Magento\Customer\Api\Data\GroupInterface; +use Magento\Customer\Api\Data\GroupSearchResultsInterface; +use Magento\Customer\Api\GroupRepositoryInterface; +use Magento\Framework\Api\SearchCriteriaBuilder; +use Magento\Framework\Api\SearchCriteriaInterface; +use Magento\Framework\Convert\DataObject; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use Magento\SalesRule\Model\Rule; +use Magento\SalesRule\Model\Rule\Action\SimpleActionOptionsProvider; +use Magento\SalesRule\Model\Rule\Metadata\ValueProvider; +use Magento\SalesRule\Model\RuleFactory; +use Magento\Store\Model\System\Store; +use PHPUnit\Framework\TestCase; +use PHPUnit\Framework\MockObject\MockObject; /** - * @covers Magento\SalesRule\Model\Rule\Metadata\ValueProvider + * @covers ValueProvider */ -class ValueProviderTest extends \PHPUnit\Framework\TestCase +class ValueProviderTest extends TestCase { /** - * @var \Magento\SalesRule\Model\Rule\Metadata\ValueProvider + * @var ValueProvider */ protected $model; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var Store|MockObject */ protected $storeMock; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var GroupRepositoryInterface|MockObject */ protected $groupRepositoryMock; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var SearchCriteriaBuilder|MockObject */ protected $searchCriteriaBuilderMock; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var DataObject|MockObject */ protected $dataObjectMock; /** - * @var \Magento\SalesRule\Model\RuleFactory|\PHPUnit_Framework_MockObject_MockObject + * @var RuleFactory|MockObject */ protected $ruleFactoryMock; + /** + * @var SimpleActionOptionsProvider|MockObject + */ + private $simpleActionOptionsProviderMock; + protected function setUp() { - $this->searchCriteriaBuilderMock = $this->createMock(\Magento\Framework\Api\SearchCriteriaBuilder::class); - $this->storeMock = $this->createMock(\Magento\Store\Model\System\Store::class); - $this->groupRepositoryMock = $this->createMock(\Magento\Customer\Api\GroupRepositoryInterface::class); - $this->dataObjectMock = $this->createMock(\Magento\Framework\Convert\DataObject::class); - $searchCriteriaMock = $this->createMock(\Magento\Framework\Api\SearchCriteriaInterface::class); - $groupSearchResultsMock = $this->createMock(\Magento\Customer\Api\Data\GroupSearchResultsInterface::class); - $groupsMock = $this->createMock(\Magento\Customer\Api\Data\GroupInterface::class); + $expectedData = include __DIR__ . '/_files/MetaData.php'; + $this->searchCriteriaBuilderMock = $this->createMock(SearchCriteriaBuilder::class); + $this->storeMock = $this->createMock(Store::class); + $this->groupRepositoryMock = $this->createMock(GroupRepositoryInterface::class); + $this->dataObjectMock = $this->createMock(DataObject::class); + $this->simpleActionOptionsProviderMock = $this->createMock(SimpleActionOptionsProvider::class); + $searchCriteriaMock = $this->createMock(SearchCriteriaInterface::class); + $groupSearchResultsMock = $this->createMock(GroupSearchResultsInterface::class); + $groupsMock = $this->createMock(GroupInterface::class); $this->searchCriteriaBuilderMock->expects($this->once())->method('create')->willReturn($searchCriteriaMock); $this->groupRepositoryMock->expects($this->once())->method('getList')->with($searchCriteriaMock) @@ -59,15 +79,19 @@ protected function setUp() $this->storeMock->expects($this->once())->method('getWebsiteValuesForForm')->willReturn([]); $this->dataObjectMock->expects($this->once())->method('toOptionArray')->with([$groupsMock], 'id', 'code') ->willReturn([]); - $this->ruleFactoryMock = $this->createPartialMock(\Magento\SalesRule\Model\RuleFactory::class, ['create']); + $this->ruleFactoryMock = $this->createPartialMock(RuleFactory::class, ['create']); + $this->simpleActionOptionsProviderMock->method('toOptionArray')->willReturn( + $expectedData['actions']['children']['simple_action']['arguments']['data']['config']['options'] + ); $this->model = (new ObjectManager($this))->getObject( - \Magento\SalesRule\Model\Rule\Metadata\ValueProvider::class, + ValueProvider::class, [ 'store' => $this->storeMock, 'groupRepository' => $this->groupRepositoryMock, 'searchCriteriaBuilder' => $this->searchCriteriaBuilderMock, 'objectConverter' => $this->dataObjectMock, 'salesRuleFactory' => $this->ruleFactoryMock, + 'simpleActionOptionsProvider' => $this->simpleActionOptionsProviderMock ] ); } @@ -76,8 +100,8 @@ public function testGetMetadataValues() { $expectedData = include __DIR__ . '/_files/MetaData.php'; - /** @var \Magento\SalesRule\Model\Rule|\PHPUnit_Framework_MockObject_MockObject $ruleMock */ - $ruleMock = $this->createMock(\Magento\SalesRule\Model\Rule::class); + /** @var Rule|MockObject $ruleMock */ + $ruleMock = $this->createMock(Rule::class); $this->ruleFactoryMock->expects($this->once()) ->method('create') ->willReturn($ruleMock); From b2ca7c878dbdc27b69ddd34646f84f0dc275d073 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov <sidolov@adobe.com> Date: Fri, 20 Sep 2019 10:46:51 -0500 Subject: [PATCH 10/15] Make new const private --- lib/internal/Magento/Framework/App/ProductMetadata.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/App/ProductMetadata.php b/lib/internal/Magento/Framework/App/ProductMetadata.php index d5da7aeba3054..87d58a17ff8e0 100644 --- a/lib/internal/Magento/Framework/App/ProductMetadata.php +++ b/lib/internal/Magento/Framework/App/ProductMetadata.php @@ -32,7 +32,7 @@ class ProductMetadata implements ProductMetadataInterface /** * Magento Product Version Cache Key */ - const MAGENTO_PRODUCT_VERSION_CACHE_KEY = 'magento-product-version'; + private const MAGENTO_PRODUCT_VERSION_CACHE_KEY = 'magento-product-version'; /** * Product version From b397814fefdb1d4ae35c8adf7c108bac96e90ffa Mon Sep 17 00:00:00 2001 From: Stanislav Idolov <sidolov@adobe.com> Date: Fri, 20 Sep 2019 10:47:37 -0500 Subject: [PATCH 11/15] New line between class variables --- lib/internal/Magento/Framework/App/ProductMetadata.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/internal/Magento/Framework/App/ProductMetadata.php b/lib/internal/Magento/Framework/App/ProductMetadata.php index 87d58a17ff8e0..89dc6f97d2348 100644 --- a/lib/internal/Magento/Framework/App/ProductMetadata.php +++ b/lib/internal/Magento/Framework/App/ProductMetadata.php @@ -51,6 +51,7 @@ class ProductMetadata implements ProductMetadataInterface * @var \Magento\Framework\Composer\ComposerInformation */ private $composerInformation; + /** * @var CacheInterface */ From f7d1809dc2e4ba8b0213be3f164238c8a089db9e Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <engcom-vendorworker-foxtrot@adobe.com> Date: Mon, 23 Sep 2019 15:32:20 +0300 Subject: [PATCH 12/15] magento/magento2#24665: Static tests fix. --- .../Model/Rule/Action/SimpleActionOptionsProviderTest.php | 4 ++-- .../Test/Unit/Model/Rule/Metadata/ValueProviderTest.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Action/SimpleActionOptionsProviderTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Action/SimpleActionOptionsProviderTest.php index 4aa9969334e46..f1653dd043b50 100644 --- a/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Action/SimpleActionOptionsProviderTest.php +++ b/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Action/SimpleActionOptionsProviderTest.php @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ -namespace Magento\SalesRule\Test\Unit\Model\System\Config\Source; +namespace Magento\SalesRule\Test\Unit\Model\Rule\Action; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\SalesRule\Model\Rule; @@ -13,7 +13,7 @@ use PHPUnit\Framework\TestCase; /** - * @covers SimpleActionOptionsProvider + * @covers Magento\SalesRule\Model\Rule\Action\SimpleActionOptionsProvider */ class SimpleActionOptionsProviderTest extends TestCase { diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Metadata/ValueProviderTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Metadata/ValueProviderTest.php index 0a5663598c8e3..d63ba150f4822 100644 --- a/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Metadata/ValueProviderTest.php +++ b/app/code/Magento/SalesRule/Test/Unit/Model/Rule/Metadata/ValueProviderTest.php @@ -21,7 +21,7 @@ use PHPUnit\Framework\MockObject\MockObject; /** - * @covers ValueProvider + * @covers Magento\SalesRule\Model\Rule\Metadata\ValueProvider */ class ValueProviderTest extends TestCase { From 357013bac8ec5d6f146c406cb731f5d5fe049d6b Mon Sep 17 00:00:00 2001 From: Stanislav Idolov <sidolov@adobe.com> Date: Mon, 23 Sep 2019 15:41:44 -0500 Subject: [PATCH 13/15] Revert docblock return type --- app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php b/app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php index 4ddc848784551..e5596e4db5e55 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php +++ b/app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php @@ -16,7 +16,7 @@ class Pdf extends \Magento\Config\Model\Config\Backend\Image { /** - * @inheritdoc + * @return string[] */ protected function _getAllowedExtensions() { From eff2cdf84bf973a227bd6848598911a8f26290df Mon Sep 17 00:00:00 2001 From: Stanislav Idolov <sidolov@adobe.com> Date: Mon, 23 Sep 2019 15:45:34 -0500 Subject: [PATCH 14/15] Fixed const docblock description --- lib/internal/Magento/Framework/App/ProductMetadata.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/App/ProductMetadata.php b/lib/internal/Magento/Framework/App/ProductMetadata.php index 89dc6f97d2348..631dba8273bcd 100644 --- a/lib/internal/Magento/Framework/App/ProductMetadata.php +++ b/lib/internal/Magento/Framework/App/ProductMetadata.php @@ -30,7 +30,7 @@ class ProductMetadata implements ProductMetadataInterface const PRODUCT_NAME = 'Magento'; /** - * Magento Product Version Cache Key + * Cache key for Magento product version */ private const MAGENTO_PRODUCT_VERSION_CACHE_KEY = 'magento-product-version'; From f0e87e68503432a96a0100d9a20a49ee57bc0a28 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov <sidolov@adobe.com> Date: Tue, 24 Sep 2019 11:34:45 -0500 Subject: [PATCH 15/15] Added docblock for the method --- app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php b/app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php index e5596e4db5e55..a5a81a4dde75d 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php +++ b/app/code/Magento/Config/Model/Config/Backend/Image/Pdf.php @@ -16,6 +16,8 @@ class Pdf extends \Magento\Config\Model\Config\Backend\Image { /** + * Returns the list of allowed file extensions. + * * @return string[] */ protected function _getAllowedExtensions()