From 2fbddf0c4135e7288b23faaec91ab890575d0cc2 Mon Sep 17 00:00:00 2001 From: dmanners Date: Tue, 28 Feb 2017 09:41:02 +0000 Subject: [PATCH 1/4] Remove Zend_Json from the email module --- .../Block/Adminhtml/Template/Edit/Form.php | 15 ++++++++++++-- .../Email/Template/DefaultTemplate.php | 20 ++++++++++++++++--- .../Magento/Email/Model/BackendTemplate.php | 6 ++++-- app/code/Magento/Email/Model/Template.php | 16 ++++++++++++--- .../Test/Unit/Model/BackendTemplateTest.php | 11 +++++++++- 5 files changed, 57 insertions(+), 11 deletions(-) diff --git a/app/code/Magento/Email/Block/Adminhtml/Template/Edit/Form.php b/app/code/Magento/Email/Block/Adminhtml/Template/Edit/Form.php index 18a6ef1967607..057b892f65ec0 100644 --- a/app/code/Magento/Email/Block/Adminhtml/Template/Edit/Form.php +++ b/app/code/Magento/Email/Block/Adminhtml/Template/Edit/Form.php @@ -21,6 +21,11 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic */ protected $_variableFactory; + /** + * @var \Magento\Framework\Serialize\Serializer\Json + */ + private $serializer; + /** * @param \Magento\Backend\Block\Template\Context $context * @param \Magento\Framework\Registry $registry @@ -28,6 +33,8 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic * @param \Magento\Variable\Model\VariableFactory $variableFactory * @param \Magento\Email\Model\Source\Variables $variables * @param array $data + * @param \Magento\Framework\Serialize\Serializer\Json|null $serializer + * @throws \RuntimeException */ public function __construct( \Magento\Backend\Block\Template\Context $context, @@ -35,10 +42,13 @@ public function __construct( \Magento\Framework\Data\FormFactory $formFactory, \Magento\Variable\Model\VariableFactory $variableFactory, \Magento\Email\Model\Source\Variables $variables, - array $data = [] + array $data = [], + \Magento\Framework\Serialize\Serializer\Json $serializer = null ) { $this->_variableFactory = $variableFactory; $this->_variables = $variables; + $this->serializer = $serializer ?: \Magento\Framework\App\ObjectManager::getInstance() + ->get(\Magento\Framework\Serialize\Serializer\Json::class); parent::__construct($context, $registry, $formFactory, $data); } @@ -60,6 +70,7 @@ protected function _prepareLayout() * @return \Magento\Backend\Block\Widget\Form * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + * @throws \Magento\Framework\Exception\LocalizedException */ protected function _prepareForm() { @@ -100,7 +111,7 @@ protected function _prepareForm() $fieldset->addField( 'variables', 'hidden', - ['name' => 'variables', 'value' => \Zend_Json::encode($this->getVariables())] + ['name' => 'variables', 'value' => $this->serializer->serialize($this->getVariables())] ); $fieldset->addField('template_variables', 'hidden', ['name' => 'template_variables']); diff --git a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/DefaultTemplate.php b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/DefaultTemplate.php index 3a646ff19db24..3b7c7c1345190 100644 --- a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/DefaultTemplate.php +++ b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/DefaultTemplate.php @@ -13,17 +13,27 @@ class DefaultTemplate extends \Magento\Email\Controller\Adminhtml\Email\Template */ private $emailConfig; + /** + * @var \Magento\Framework\Serialize\Serializer\Json + */ + private $serializer; + /** * @param \Magento\Backend\App\Action\Context $context * @param \Magento\Framework\Registry $coreRegistry * @param \Magento\Email\Model\Template\Config $emailConfig + * @param \Magento\Framework\Serialize\Serializer\Json|null $serializer + * @throws \RuntimeException */ public function __construct( \Magento\Backend\App\Action\Context $context, \Magento\Framework\Registry $coreRegistry, - \Magento\Email\Model\Template\Config $emailConfig + \Magento\Email\Model\Template\Config $emailConfig, + \Magento\Framework\Serialize\Serializer\Json $serializer = null ) { $this->emailConfig = $emailConfig; + $this->serializer = $serializer ?: \Magento\Framework\App\ObjectManager::getInstance() + ->get(\Magento\Framework\Serialize\Serializer\Json::class); parent::__construct($context, $coreRegistry); } @@ -31,6 +41,7 @@ public function __construct( * Set template data to retrieve it in template info form * * @return void + * @throws \RuntimeException */ public function execute() { @@ -49,7 +60,10 @@ public function execute() $template->loadDefault($templateId); $template->setData('orig_template_code', $templateId); - $template->setData('template_variables', \Zend_Json::encode($template->getVariablesOptionArray(true))); + $template->setData( + 'template_variables', + $this->serializer->serialize($template->getVariablesOptionArray(true)) + ); $templateBlock = $this->_view->getLayout()->createBlock( \Magento\Email\Block\Adminhtml\Template\Edit::class @@ -57,7 +71,7 @@ public function execute() $template->setData('orig_template_currently_used_for', $templateBlock->getCurrentlyUsedForPaths(false)); $this->getResponse()->representJson( - $this->_objectManager->get(\Magento\Framework\Json\Helper\Data::class)->jsonEncode($template->getData()) + $this->serializer->serialize($template->getData()) ); } catch (\Exception $e) { $this->_objectManager->get(\Psr\Log\LoggerInterface::class)->critical($e); diff --git a/app/code/Magento/Email/Model/BackendTemplate.php b/app/code/Magento/Email/Model/BackendTemplate.php index 49a8dec614346..1ea731a20abba 100644 --- a/app/code/Magento/Email/Model/BackendTemplate.php +++ b/app/code/Magento/Email/Model/BackendTemplate.php @@ -53,7 +53,8 @@ public function __construct( \Magento\Framework\UrlInterface $urlModel, \Magento\Email\Model\Template\FilterFactory $filterFactory, \Magento\Config\Model\Config\Structure $structure, - array $data = [] + array $data = [], + \Magento\Framework\Serialize\Serializer\Json $serializer = null ) { $this->structure = $structure; parent::__construct( @@ -70,7 +71,8 @@ public function __construct( $filterManager, $urlModel, $filterFactory, - $data + $data, + $serializer ); } diff --git a/app/code/Magento/Email/Model/Template.php b/app/code/Magento/Email/Model/Template.php index 3bdbfca13cece..6e3cbb13c5659 100644 --- a/app/code/Magento/Email/Model/Template.php +++ b/app/code/Magento/Email/Model/Template.php @@ -92,7 +92,12 @@ class Template extends AbstractTemplate implements \Magento\Framework\Mail\Templ private $filterFactory; /** - * Initialize dependencies. + * @var \Magento\Framework\Serialize\Serializer\Json + */ + private $serializer; + + /** + * Template constructor. * * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\View\DesignInterface $design @@ -108,6 +113,8 @@ class Template extends AbstractTemplate implements \Magento\Framework\Mail\Templ * @param \Magento\Framework\UrlInterface $urlModel * @param Template\FilterFactory $filterFactory * @param array $data + * @param \Magento\Framework\Serialize\Serializer\Json|null $serializer + * @throws \RuntimeException * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ @@ -125,9 +132,12 @@ public function __construct( \Magento\Framework\Filter\FilterManager $filterManager, \Magento\Framework\UrlInterface $urlModel, \Magento\Email\Model\Template\FilterFactory $filterFactory, - array $data = [] + array $data = [], + \Magento\Framework\Serialize\Serializer\Json $serializer = null ) { $this->filterFactory = $filterFactory; + $this->serializer = $serializer ?: \Magento\Framework\App\ObjectManager::getInstance() + ->get(\Magento\Framework\Serialize\Serializer\Json::class); parent::__construct( $context, $design, @@ -289,7 +299,7 @@ protected function _parseVariablesString($variablesString) $variables = []; if ($variablesString && is_string($variablesString)) { $variablesString = str_replace("\n", '', $variablesString); - $variables = \Zend_Json::decode($variablesString); + $variables = $this->serializer->unserialize($variablesString); } return $variables; } diff --git a/app/code/Magento/Email/Test/Unit/Model/BackendTemplateTest.php b/app/code/Magento/Email/Test/Unit/Model/BackendTemplateTest.php index c28bee9027aa8..6db7fad0c846d 100644 --- a/app/code/Magento/Email/Test/Unit/Model/BackendTemplateTest.php +++ b/app/code/Magento/Email/Test/Unit/Model/BackendTemplateTest.php @@ -43,6 +43,9 @@ class BackendTemplateTest extends \PHPUnit_Framework_TestCase */ protected $objectManagerBackup; + /** @var \Magento\Framework\Serialize\Serializer\Json|\PHPUnit_Framework_MockObject_MockObject */ + private $serilizerMock; + protected function setUp() { $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); @@ -70,9 +73,15 @@ protected function setUp() \Magento\Framework\App\ObjectManager::setInstance($objectManagerMock); + $this->serilizerMock = $this->getMockBuilder(\Magento\Framework\Serialize\Serializer\Json::class)->getMock(); + $this->model = $helper->getObject( \Magento\Email\Model\BackendTemplate::class, - ['scopeConfig' => $this->scopeConfigMock, 'structure' => $this->structureMock] + [ + 'scopeConfig' => $this->scopeConfigMock, + 'structure' => $this->structureMock, + 'serializer' => $this->serilizerMock + ] ); } From ce261ee0f554306528cd4763902c5c89710f70c3 Mon Sep 17 00:00:00 2001 From: dmanners Date: Tue, 28 Feb 2017 09:49:57 +0000 Subject: [PATCH 2/4] Fix the unit tests for the backend template to work with serilizer mock objects --- .../Unit/Block/Adminhtml/Template/EditTest.php | 5 ++++- .../Email/Test/Unit/Model/BackendTemplateTest.php | 4 +++- .../Magento/Email/Test/Unit/Model/TemplateTest.php | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/EditTest.php b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/EditTest.php index 807d9950dcb71..85108402725c6 100644 --- a/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/EditTest.php +++ b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/EditTest.php @@ -56,7 +56,10 @@ protected function setUp() $menuMock = $this->getMock( \Magento\Backend\Model\Menu::class, [], - [$this->getMock(\Psr\Log\LoggerInterface::class)] + [$this->getMock(\Psr\Log\LoggerInterface::class)], + '', + false, + false ); $menuItemMock = $this->getMock(\Magento\Backend\Model\Menu\Item::class, [], [], '', false, false); $urlBuilder = $this->getMock(\Magento\Backend\Model\Url::class, [], [], '', false, false); diff --git a/app/code/Magento/Email/Test/Unit/Model/BackendTemplateTest.php b/app/code/Magento/Email/Test/Unit/Model/BackendTemplateTest.php index 6db7fad0c846d..9e8969f6ec9ce 100644 --- a/app/code/Magento/Email/Test/Unit/Model/BackendTemplateTest.php +++ b/app/code/Magento/Email/Test/Unit/Model/BackendTemplateTest.php @@ -43,7 +43,9 @@ class BackendTemplateTest extends \PHPUnit_Framework_TestCase */ protected $objectManagerBackup; - /** @var \Magento\Framework\Serialize\Serializer\Json|\PHPUnit_Framework_MockObject_MockObject */ + /** + * @var \Magento\Framework\Serialize\Serializer\Json|\PHPUnit_Framework_MockObject_MockObject + */ private $serilizerMock; protected function setUp() diff --git a/app/code/Magento/Email/Test/Unit/Model/TemplateTest.php b/app/code/Magento/Email/Test/Unit/Model/TemplateTest.php index 491b3466fd623..6fdd487751beb 100644 --- a/app/code/Magento/Email/Test/Unit/Model/TemplateTest.php +++ b/app/code/Magento/Email/Test/Unit/Model/TemplateTest.php @@ -84,6 +84,11 @@ class TemplateTest extends \PHPUnit_Framework_TestCase */ private $templateFactory; + /** + * @var \Magento\Framework\Serialize\Serializer\Json|\PHPUnit_Framework_MockObject_MockObject + */ + private $serilizerMock; + protected function setUp() { $this->context = $this->getMockBuilder(\Magento\Framework\Model\Context::class) @@ -138,6 +143,8 @@ protected function setUp() ->setMethods(['create']) ->disableOriginalConstructor() ->getMock(); + + $this->serilizerMock = $this->getMockBuilder(\Magento\Framework\Serialize\Serializer\Json::class)->getMock(); } /** @@ -164,6 +171,8 @@ protected function getModelMock(array $mockedMethods = []) $this->filterManager, $this->urlModel, $this->filterFactory, + [], + $this->serilizerMock ]) ->getMock(); } @@ -532,6 +541,11 @@ public function testGetVariablesOptionArray($withGroup, $templateVariables, $exp { $model = $this->getModelMock(); $model->setData('orig_template_variables', $templateVariables); + + $this->serilizerMock->expects($this->any())->method('unserialize') + ->willReturn( + json_decode($templateVariables, true) + ); $this->assertEquals($expectedResult, $model->getVariablesOptionArray($withGroup)); } From 875ea4f6bac48bff069bb6e843812ad56f286770 Mon Sep 17 00:00:00 2001 From: dmanners Date: Tue, 28 Feb 2017 09:57:53 +0000 Subject: [PATCH 3/4] Fix typo with the BackendTemplateTest serializerMock object --- .../Magento/Email/Test/Unit/Model/BackendTemplateTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Email/Test/Unit/Model/BackendTemplateTest.php b/app/code/Magento/Email/Test/Unit/Model/BackendTemplateTest.php index 9e8969f6ec9ce..541f4a13dde66 100644 --- a/app/code/Magento/Email/Test/Unit/Model/BackendTemplateTest.php +++ b/app/code/Magento/Email/Test/Unit/Model/BackendTemplateTest.php @@ -46,7 +46,7 @@ class BackendTemplateTest extends \PHPUnit_Framework_TestCase /** * @var \Magento\Framework\Serialize\Serializer\Json|\PHPUnit_Framework_MockObject_MockObject */ - private $serilizerMock; + private $serializerMock; protected function setUp() { @@ -75,14 +75,14 @@ protected function setUp() \Magento\Framework\App\ObjectManager::setInstance($objectManagerMock); - $this->serilizerMock = $this->getMockBuilder(\Magento\Framework\Serialize\Serializer\Json::class)->getMock(); + $this->serializerMock = $this->getMockBuilder(\Magento\Framework\Serialize\Serializer\Json::class)->getMock(); $this->model = $helper->getObject( \Magento\Email\Model\BackendTemplate::class, [ 'scopeConfig' => $this->scopeConfigMock, 'structure' => $this->structureMock, - 'serializer' => $this->serilizerMock + 'serializer' => $this->serializerMock ] ); } From 1415a845743c446ae2bf0e4f67733ed903e955db Mon Sep 17 00:00:00 2001 From: dmanners Date: Fri, 3 Mar 2017 14:13:54 +0000 Subject: [PATCH 4/4] Fix type with app/code/Magento/Email/Test/Unit/Model/TemplateTest.php --- app/code/Magento/Email/Test/Unit/Model/TemplateTest.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Email/Test/Unit/Model/TemplateTest.php b/app/code/Magento/Email/Test/Unit/Model/TemplateTest.php index 6fdd487751beb..11baf7bdff82b 100644 --- a/app/code/Magento/Email/Test/Unit/Model/TemplateTest.php +++ b/app/code/Magento/Email/Test/Unit/Model/TemplateTest.php @@ -87,7 +87,7 @@ class TemplateTest extends \PHPUnit_Framework_TestCase /** * @var \Magento\Framework\Serialize\Serializer\Json|\PHPUnit_Framework_MockObject_MockObject */ - private $serilizerMock; + private $serializerMock; protected function setUp() { @@ -144,7 +144,7 @@ protected function setUp() ->disableOriginalConstructor() ->getMock(); - $this->serilizerMock = $this->getMockBuilder(\Magento\Framework\Serialize\Serializer\Json::class)->getMock(); + $this->serializerMock = $this->getMockBuilder(\Magento\Framework\Serialize\Serializer\Json::class)->getMock(); } /** @@ -172,7 +172,7 @@ protected function getModelMock(array $mockedMethods = []) $this->urlModel, $this->filterFactory, [], - $this->serilizerMock + $this->serializerMock ]) ->getMock(); } @@ -542,7 +542,7 @@ public function testGetVariablesOptionArray($withGroup, $templateVariables, $exp $model = $this->getModelMock(); $model->setData('orig_template_variables', $templateVariables); - $this->serilizerMock->expects($this->any())->method('unserialize') + $this->serializerMock->expects($this->any())->method('unserialize') ->willReturn( json_decode($templateVariables, true) );