From a872f4061695b91e923d1c1abb87a0a50e18c77d Mon Sep 17 00:00:00 2001 From: Viktor Tymchynskyi Date: Wed, 18 Oct 2017 15:18:48 +0300 Subject: [PATCH] MAGETWO-81153: Backward incompatible changes of 2.2.1 release --- app/code/Magento/Customer/Helper/Address.php | 39 +----- .../Customer/Helper/AttributeChecker.php | 71 +++++++++++ .../Customer/Test/Unit/Helper/AddressTest.php | 69 ----------- .../Test/Unit/Helper/AttributeCheckerTest.php | 112 ++++++++++++++++++ 4 files changed, 184 insertions(+), 107 deletions(-) create mode 100644 app/code/Magento/Customer/Helper/AttributeChecker.php create mode 100644 app/code/Magento/Customer/Test/Unit/Helper/AttributeCheckerTest.php diff --git a/app/code/Magento/Customer/Helper/Address.php b/app/code/Magento/Customer/Helper/Address.php index 8dac704aaa085..c74c62dc6d98c 100644 --- a/app/code/Magento/Customer/Helper/Address.php +++ b/app/code/Magento/Customer/Helper/Address.php @@ -8,9 +8,7 @@ use Magento\Customer\Api\AddressMetadataInterface; use Magento\Customer\Api\CustomerMetadataInterface; use Magento\Customer\Api\Data\AttributeMetadataInterface; -use Magento\Customer\Model\Metadata\AttributeResolver; use Magento\Directory\Model\Country\Format; -use Magento\Framework\App\ObjectManager; use Magento\Framework\Exception\NoSuchEntityException; /** @@ -95,11 +93,6 @@ class Address extends \Magento\Framework\App\Helper\AbstractHelper */ protected $_addressConfig; - /** - * @var AttributeResolver - */ - private $attributeResolver; - /** * @param \Magento\Framework\App\Helper\Context $context * @param \Magento\Framework\View\Element\BlockFactory $blockFactory @@ -107,7 +100,6 @@ class Address extends \Magento\Framework\App\Helper\AbstractHelper * @param CustomerMetadataInterface $customerMetadataService * @param AddressMetadataInterface $addressMetadataService * @param \Magento\Customer\Model\Address\Config $addressConfig - * @param AttributeResolver|null $attributeResolver */ public function __construct( \Magento\Framework\App\Helper\Context $context, @@ -115,15 +107,13 @@ public function __construct( \Magento\Store\Model\StoreManagerInterface $storeManager, CustomerMetadataInterface $customerMetadataService, AddressMetadataInterface $addressMetadataService, - \Magento\Customer\Model\Address\Config $addressConfig, - AttributeResolver $attributeResolver = null + \Magento\Customer\Model\Address\Config $addressConfig ) { $this->_blockFactory = $blockFactory; $this->_storeManager = $storeManager; $this->_customerMetadataService = $customerMetadataService; $this->_addressMetadataService = $addressMetadataService; $this->_addressConfig = $addressConfig; - $this->attributeResolver = $attributeResolver ?: ObjectManager::getInstance()->get(AttributeResolver::class); parent::__construct($context); } @@ -401,31 +391,4 @@ public function isAttributeVisible($code) } return false; } - - /** - * Checks whether it is allowed to show an attribute on the form - * - * This check relies on the attribute's property 'getUsedInForms' which contains a list of forms - * where allowed to render specified attribute. - * - * @param string $attributeCode - * @param string $formName - * @return bool - */ - public function isAttributeAllowedOnForm($attributeCode, $formName) - { - $isAllowed = false; - $attributeMetadata = $this->_addressMetadataService->getAttributeMetadata($attributeCode); - if ($attributeMetadata) { - /** @var \Magento\Customer\Model\Attribute $attribute */ - $attribute = $this->attributeResolver->getModelByAttribute( - \Magento\Customer\Api\AddressMetadataManagementInterface::ENTITY_TYPE_ADDRESS, - $attributeMetadata - ); - $usedInForms = $attribute->getUsedInForms(); - $isAllowed = in_array($formName, $usedInForms, true); - } - - return $isAllowed; - } } diff --git a/app/code/Magento/Customer/Helper/AttributeChecker.php b/app/code/Magento/Customer/Helper/AttributeChecker.php new file mode 100644 index 0000000000000..d8766a67c8b21 --- /dev/null +++ b/app/code/Magento/Customer/Helper/AttributeChecker.php @@ -0,0 +1,71 @@ +addressMetadata = $addressMetadata; + $this->attributeResolver = $attributeResolver; + parent::__construct($context); + } + + /** + * Checks whether it is allowed to show an attribute on the form + * + * This check relies on the attribute's property 'getUsedInForms' which contains a list of forms + * where allowed to render specified attribute. + * + * @param string $attributeCode + * @param string $formName + * @return bool + */ + public function isAttributeAllowedOnForm($attributeCode, $formName) + { + $isAllowed = false; + $attributeMetadata = $this->addressMetadata->getAttributeMetadata($attributeCode); + if ($attributeMetadata) { + /** @var Attribute $attribute */ + $attribute = $this->attributeResolver->getModelByAttribute( + AddressMetadataManagementInterface::ENTITY_TYPE_ADDRESS, + $attributeMetadata + ); + $usedInForms = $attribute->getUsedInForms(); + $isAllowed = in_array($formName, $usedInForms, true); + } + + return $isAllowed; + } +} diff --git a/app/code/Magento/Customer/Test/Unit/Helper/AddressTest.php b/app/code/Magento/Customer/Test/Unit/Helper/AddressTest.php index 7b42e8b7774c8..50785247d7965 100644 --- a/app/code/Magento/Customer/Test/Unit/Helper/AddressTest.php +++ b/app/code/Magento/Customer/Test/Unit/Helper/AddressTest.php @@ -7,7 +7,6 @@ namespace Magento\Customer\Test\Unit\Helper; use Magento\Customer\Api\AddressMetadataInterface; -use Magento\Customer\Api\AddressMetadataManagementInterface; use Magento\Customer\Api\CustomerMetadataInterface; /** @@ -36,9 +35,6 @@ class AddressTest extends \PHPUnit\Framework\TestCase /** @var \Magento\Customer\Model\Address\Config|\PHPUnit_Framework_MockObject_MockObject */ protected $addressConfig; - /** @var \Magento\Customer\Model\Metadata\AttributeResolver|\PHPUnit_Framework_MockObject_MockObject */ - protected $attributeResolver; - /** @var \PHPUnit_Framework_MockObject_MockObject|AddressMetadataInterface */ private $addressMetadataService; @@ -55,7 +51,6 @@ protected function setUp() $this->customerMetadataService = $arguments['customerMetadataService']; $this->addressConfig = $arguments['addressConfig']; $this->addressMetadataService = $arguments['addressMetadataService']; - $this->attributeResolver = $arguments['attributeResolver']; $this->helper = $objectManagerHelper->getObject($className, $arguments); } @@ -408,68 +403,4 @@ public function isAttributeVisibleDataProvider() ['invalid_code', false], ]; } - - /** - * @dataProvider attributeOnFormDataProvider - * @param bool $isAllowed - * @param bool $isMetadataExists - * @param string $attributeCode - * @param string $formName - * @param array $attributeFormsList - */ - public function testIsAttributeAllowedOnForm( - $isAllowed, - $isMetadataExists, - $attributeCode, - $formName, - array $attributeFormsList - ) { - $attributeMetadata = null; - if ($isMetadataExists) { - $attributeMetadata = $this->getMockBuilder(\Magento\Customer\Api\Data\AttributeMetadataInterface::class) - ->getMockForAbstractClass(); - $attribute = $this->getMockBuilder(\Magento\Customer\Model\Attribute::class) - ->disableOriginalConstructor() - ->getMock(); - $this->attributeResolver->expects($this->once()) - ->method('getModelByAttribute') - ->with(AddressMetadataManagementInterface::ENTITY_TYPE_ADDRESS, $attributeMetadata) - ->willReturn($attribute); - $attribute->expects($this->once()) - ->method('getUsedInForms') - ->willReturn($attributeFormsList); - } - $this->addressMetadataService->expects($this->once()) - ->method('getAttributeMetadata') - ->with($attributeCode) - ->willReturn($attributeMetadata); - $this->assertEquals($isAllowed, $this->helper->isAttributeAllowedOnForm($attributeCode, $formName)); - } - - public function attributeOnFormDataProvider() - { - return [ - 'metadata not exists' => [ - 'isAllowed' => false, - 'isMetadataExists' => false, - 'attributeCode' => 'attribute_code', - 'formName' => 'form_name', - 'attributeFormsList' => [], - ], - 'form not in the list' => [ - 'isAllowed' => false, - 'isMetadataExists' => true, - 'attributeCode' => 'attribute_code', - 'formName' => 'form_name', - 'attributeFormsList' => ['form_1', 'form_2'], - ], - 'allowed' => [ - 'isAllowed' => true, - 'isMetadataExists' => true, - 'attributeCode' => 'attribute_code', - 'formName' => 'form_name', - 'attributeFormsList' => ['form_name', 'form_1', 'form_2'], - ], - ]; - } } diff --git a/app/code/Magento/Customer/Test/Unit/Helper/AttributeCheckerTest.php b/app/code/Magento/Customer/Test/Unit/Helper/AttributeCheckerTest.php new file mode 100644 index 0000000000000..3ec2ded413bbb --- /dev/null +++ b/app/code/Magento/Customer/Test/Unit/Helper/AttributeCheckerTest.php @@ -0,0 +1,112 @@ +context = $this->getMockBuilder(Context::class) + ->disableOriginalConstructor() + ->getMock(); + $this->addressMetadataService = $this->getMockForAbstractClass(AddressMetadataInterface::class); + $this->attributeResolver = $this->getMockBuilder(AttributeResolver::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->model = new AttributeChecker( + $this->context, + $this->addressMetadataService, + $this->attributeResolver + ); + } + + /** + * @param bool $isAllowed + * @param bool $isMetadataExists + * @param string $attributeCode + * @param string $formName + * @param array $attributeFormsList + * + * @dataProvider attributeOnFormDataProvider + */ + public function testIsAttributeAllowedOnForm( + $isAllowed, + $isMetadataExists, + $attributeCode, + $formName, + array $attributeFormsList + ) { + $attributeMetadata = null; + if ($isMetadataExists) { + $attributeMetadata = $this->getMockForAbstractClass(AttributeMetadataInterface::class); + $attribute = $this->getMockBuilder(Attribute::class) + ->disableOriginalConstructor() + ->getMock(); + $this->attributeResolver->expects($this->once()) + ->method('getModelByAttribute') + ->with(AddressMetadataManagementInterface::ENTITY_TYPE_ADDRESS, $attributeMetadata) + ->willReturn($attribute); + $attribute->expects($this->once()) + ->method('getUsedInForms') + ->willReturn($attributeFormsList); + } + $this->addressMetadataService->expects($this->once()) + ->method('getAttributeMetadata') + ->with($attributeCode) + ->willReturn($attributeMetadata); + + $this->assertEquals($isAllowed, $this->model->isAttributeAllowedOnForm($attributeCode, $formName)); + } + + public function attributeOnFormDataProvider() + { + return [ + 'metadata not exists' => [ + 'isAllowed' => false, + 'isMetadataExists' => false, + 'attributeCode' => 'attribute_code', + 'formName' => 'form_name', + 'attributeFormsList' => [], + ], + 'form not in the list' => [ + 'isAllowed' => false, + 'isMetadataExists' => true, + 'attributeCode' => 'attribute_code', + 'formName' => 'form_name', + 'attributeFormsList' => ['form_1', 'form_2'], + ], + 'allowed' => [ + 'isAllowed' => true, + 'isMetadataExists' => true, + 'attributeCode' => 'attribute_code', + 'formName' => 'form_name', + 'attributeFormsList' => ['form_name', 'form_1', 'form_2'], + ], + ]; + } +}