From 2e90ff8ac21a6e3f50073cc58900030bd3f4df9a Mon Sep 17 00:00:00 2001 From: Dale Sikkema Date: Fri, 8 Jan 2016 12:30:23 -0600 Subject: [PATCH 1/2] MAGETWO-47009: Github #2674 Plugins/Interceptors Don't Work with Early Stage Single Instance Objects in Developer Mode - 2.0.1 release --- .../ObjectManager/Environment/Developer.php | 5 ++ .../Environment/DeveloperTest.php | 58 +++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/lib/internal/Magento/Framework/App/ObjectManager/Environment/Developer.php b/lib/internal/Magento/Framework/App/ObjectManager/Environment/Developer.php index 09d25c7de4d1b..df2a6ceee56e0 100644 --- a/lib/internal/Magento/Framework/App/ObjectManager/Environment/Developer.php +++ b/lib/internal/Magento/Framework/App/ObjectManager/Environment/Developer.php @@ -62,6 +62,7 @@ public function getObjectManagerConfigLoader() */ public function configureObjectManager(ConfigInterface $diConfig, &$sharedInstances) { + $originalSharedInstances = $sharedInstances; $objectManager = ObjectManager::getInstance(); $sharedInstances['Magento\Framework\ObjectManager\ConfigLoaderInterface'] = $objectManager ->get('Magento\Framework\App\ObjectManager\ConfigLoader'); @@ -80,5 +81,9 @@ public function configureObjectManager(ConfigInterface $diConfig, &$sharedInstan $diConfig->setInterceptionConfig( $objectManager->get('Magento\Framework\Interception\Config\Config') ); + /** Reset the shared instances once interception config is set so classes can be intercepted if necessary */ + $sharedInstances = $originalSharedInstances; + $sharedInstances['Magento\Framework\ObjectManager\ConfigLoaderInterface'] = $objectManager + ->get('Magento\Framework\App\ObjectManager\ConfigLoader'); } } diff --git a/lib/internal/Magento/Framework/App/Test/Unit/ObjectManager/Environment/DeveloperTest.php b/lib/internal/Magento/Framework/App/Test/Unit/ObjectManager/Environment/DeveloperTest.php index c86318181a2c0..6e7ddc94f3d26 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/ObjectManager/Environment/DeveloperTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/ObjectManager/Environment/DeveloperTest.php @@ -5,6 +5,7 @@ */ namespace Magento\Framework\App\Test\Unit\ObjectManager\Environment; +use Magento\Framework\App\ObjectManager; use Magento\Framework\App\ObjectManager\Environment\Developer; class DeveloperTest extends \PHPUnit_Framework_TestCase @@ -29,4 +30,61 @@ public function testGetObjectManagerConfigLoader() { $this->assertNull($this->_developer->getObjectManagerConfigLoader()); } + + public function testConfigureObjectManager() + { + try { + $origObjectManager = ObjectManager::getInstance(); + } catch (\Exception $e) { + $origObjectManager = null; + } + + + $objectManagerMock = $this->getMockBuilder('Magento\Framework\App\ObjectManager') + ->disableOriginalConstructor() + ->getMock(); + ObjectManager::setInstance($objectManagerMock); + $diConfigMock = $this->getMockBuilder('\Magento\Framework\Interception\ObjectManager\ConfigInterface') + ->disableOriginalConstructor() + ->getMock(); + + $configLoaderMock = $this->getMockBuilder('Magento\Framework\App\ObjectManager\ConfigLoader') + ->disableOriginalConstructor() + ->getMock(); + $configLoaderMock->expects($this->any())->method('load')->willReturn([]); + $omReturnMap = [ + ['Magento\Framework\App\ObjectManager\ConfigLoader', $configLoaderMock], + [ + 'Magento\Framework\Config\ScopeInterface', + $this->getMockBuilder('Magento\Framework\Config\ScopeInterface') + ->disableOriginalConstructor() + ->getMock() + ], + [ + 'Magento\Framework\App\ObjectManager\ConfigCache', + $this->getMockBuilder('Magento\Framework\App\ObjectManager\ConfigCache') + ->disableOriginalConstructor() + ->getMock() + ], + [ + 'Magento\Framework\Interception\Config\Config', + $this->getMockBuilder('Magento\Framework\Interception\Config\Config') + ->disableOriginalConstructor() + ->getMock() + ] + ]; + $objectManagerMock->expects($this->any())->method('get')->willReturnMap($omReturnMap); + + $sharedInstances = ['class_name' => 'shared_object']; + $this->_developer->configureObjectManager($diConfigMock, $sharedInstances); + + $expectedSharedInstances = [ + 'class_name' => 'shared_object', + 'Magento\Framework\ObjectManager\ConfigLoaderInterface' => $configLoaderMock + ]; + $this->assertSame($expectedSharedInstances, $sharedInstances); + if (isset($origObjectManager)) { + ObjectManager::setInstance($origObjectManager); + } + } } From 23746e5fa1f7deb3a4a8643beb317603cf3b0bd0 Mon Sep 17 00:00:00 2001 From: Dale Sikkema Date: Fri, 8 Jan 2016 12:34:07 -0600 Subject: [PATCH 2/2] MAGETWO-47375: Unnecessary MessageBox plugin duplicating Message logic - 2.0.1 release --- .../Model/App/FrontController/MessageBox.php | 100 ------------ .../App/FrontController/MessageBoxTest.php | 148 ------------------ .../Magento/PageCache/etc/frontend/di.xml | 1 - .../view/frontend/web/js/page-cache.js | 26 +-- .../PageCache/frontend/js/page-cache.test.js | 58 ------- 5 files changed, 1 insertion(+), 332 deletions(-) delete mode 100644 app/code/Magento/PageCache/Model/App/FrontController/MessageBox.php delete mode 100644 app/code/Magento/PageCache/Test/Unit/Model/App/FrontController/MessageBoxTest.php diff --git a/app/code/Magento/PageCache/Model/App/FrontController/MessageBox.php b/app/code/Magento/PageCache/Model/App/FrontController/MessageBox.php deleted file mode 100644 index 38d2e63c6e2fb..0000000000000 --- a/app/code/Magento/PageCache/Model/App/FrontController/MessageBox.php +++ /dev/null @@ -1,100 +0,0 @@ -cookieManager = $cookieManager; - $this->cookieMetadataFactory = $cookieMetadataFactory; - $this->request = $request; - $this->config = $config; - $this->messageManager = $messageManager; - } - - /** - * Set Cookie for msg box when it displays first - * - * @param FrontController $subject - * @param \Magento\Framework\App\ResponseInterface|\Magento\Framework\Controller\ResultInterface $result - * - * @return \Magento\Framework\App\ResponseInterface|\Magento\Framework\Controller\ResultInterface - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function afterDispatch(FrontController $subject, $result) - { - if ($this->request->isPost() && $this->messageManager->hasMessages()) { - $publicCookieMetadata = $this->cookieMetadataFactory->createPublicCookieMetadata() - ->setDuration(self::COOKIE_PERIOD) - ->setPath('/') - ->setHttpOnly(false); - $this->cookieManager->setPublicCookie(self::COOKIE_NAME, 1, $publicCookieMetadata); - } - return $result; - } -} diff --git a/app/code/Magento/PageCache/Test/Unit/Model/App/FrontController/MessageBoxTest.php b/app/code/Magento/PageCache/Test/Unit/Model/App/FrontController/MessageBoxTest.php deleted file mode 100644 index cec6b6f530382..0000000000000 --- a/app/code/Magento/PageCache/Test/Unit/Model/App/FrontController/MessageBoxTest.php +++ /dev/null @@ -1,148 +0,0 @@ -cookieManagerMock = $this->getMock('Magento\Framework\Stdlib\CookieManagerInterface'); - $this->cookieMetadataFactoryMock = $this->getMockBuilder( - 'Magento\Framework\Stdlib\Cookie\CookieMetadataFactory' - )->disableOriginalConstructor() - ->getMock(); - $this->publicCookieMetadataMock = $this->getMockBuilder( - 'Magento\Framework\Stdlib\Cookie\PublicCookieMetadata' - )->disableOriginalConstructor() - ->getMock(); - $this->requestMock = $this->getMockBuilder('Magento\Framework\App\Request\Http') - ->disableOriginalConstructor() - ->getMock(); - $this->messageManagerMock = $this->getMockBuilder('Magento\Framework\Message\Manager') - ->disableOriginalConstructor() - ->getMock(); - - $this->msgBox = (new ObjectManager($this))->getObject( - 'Magento\PageCache\Model\App\FrontController\MessageBox', - [ - 'cookieManager' => $this->cookieManagerMock, - 'cookieMetadataFactory' => $this->cookieMetadataFactoryMock, - 'request' => $this->requestMock, - 'messageManager' => $this->messageManagerMock, - ] - ); - - $this->objectMock = $this->getMock('Magento\Framework\App\FrontController', [], [], '', false); - $this->responseMock = $this->getMock('Magento\Framework\App\ResponseInterface', [], [], '', false); - } - - /** - * @param bool $isPost - * @param int $numOfCalls - * @dataProvider afterDispatchTestDataProvider - */ - public function testAfterDispatch($isPost, $numOfCalls) - { - $this->messageManagerMock->expects($this->exactly($numOfCalls)) - ->method('hasMessages') - ->will($this->returnValue(true)); - $this->requestMock->expects($this->once()) - ->method('isPost') - ->will($this->returnValue($isPost)); - $this->cookieMetadataFactoryMock->expects($this->exactly($numOfCalls)) - ->method('createPublicCookieMetadata') - ->will($this->returnValue($this->publicCookieMetadataMock)); - $this->publicCookieMetadataMock->expects(($this->exactly($numOfCalls))) - ->method('setDuration') - ->with(MessageBox::COOKIE_PERIOD) - ->will($this->returnValue($this->publicCookieMetadataMock)); - $this->publicCookieMetadataMock->expects(($this->exactly($numOfCalls))) - ->method('setPath') - ->with('/') - ->will($this->returnValue($this->publicCookieMetadataMock)); - $this->publicCookieMetadataMock->expects(($this->exactly($numOfCalls))) - ->method('setHttpOnly') - ->with(false) - ->will($this->returnValue($this->publicCookieMetadataMock)); - $this->cookieManagerMock->expects($this->exactly($numOfCalls)) - ->method('setPublicCookie') - ->with( - MessageBox::COOKIE_NAME, - 1, - $this->publicCookieMetadataMock - ); - $this->assertSame($this->responseMock, $this->msgBox->afterDispatch($this->objectMock, $this->responseMock)); - } - - /** - * Data provider - * - * @return array - */ - public function afterDispatchTestDataProvider() - { - return [ - [true, 1], - [false, 0], - ]; - } -} diff --git a/app/code/Magento/PageCache/etc/frontend/di.xml b/app/code/Magento/PageCache/etc/frontend/di.xml index 658dce3f72ed6..1d57d767e9904 100644 --- a/app/code/Magento/PageCache/etc/frontend/di.xml +++ b/app/code/Magento/PageCache/etc/frontend/di.xml @@ -9,7 +9,6 @@ - diff --git a/app/code/Magento/PageCache/view/frontend/web/js/page-cache.js b/app/code/Magento/PageCache/view/frontend/web/js/page-cache.js index 162a8412aeda8..26f394b98dd07 100644 --- a/app/code/Magento/PageCache/view/frontend/web/js/page-cache.js +++ b/app/code/Magento/PageCache/view/frontend/web/js/page-cache.js @@ -51,28 +51,6 @@ define([ return elements; }; - /** - * MsgBox Widget checks if message box is displayed and sets cookie - */ - $.widget('mage.msgBox', { - options: { - msgBoxCookieName: 'message_box_display', - msgBoxSelector: '.main div.messages' - }, - - /** - * Creates widget 'mage.msgBox' - * @private - */ - _create: function () { - if ($.mage.cookies.get(this.options.msgBoxCookieName)) { - $.mage.cookies.clear(this.options.msgBoxCookieName); - } else { - $(this.options.msgBoxSelector).hide(); - } - } - }); - /** * FormKey Widget - this widget is generating from key, saves it to cookie and */ @@ -272,14 +250,12 @@ define([ domReady(function () { $('body') - .msgBox() .formKey(); }); return { 'pageCache': $.mage.pageCache, - 'formKey': $.mage.formKey, - 'msgBox': $.mage.msgBox + 'formKey': $.mage.formKey }; /** diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/PageCache/frontend/js/page-cache.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/PageCache/frontend/js/page-cache.test.js index 1f7a247a2faf1..8df486f29c6fb 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/PageCache/frontend/js/page-cache.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/PageCache/frontend/js/page-cache.test.js @@ -64,64 +64,6 @@ define([ }); }); - describe('Testing msgBox Widget', function () { - var wdContainer, - msgCookieName, - msgContainer; - - beforeEach(function () { - wdContainer = $('
'); - msgContainer = $('
'); - msgCookieName = 'FAKE_COOKIE'; - }); - - afterEach(function () { - $(wdContainer).remove(); - $(msgContainer).remove(); - }); - - it('widget extends jQuery object', function () { - expect($.fn.msgBox).toBeDefined(); - }); - - it('widget gets options', function () { - wdContainer.msgBox({ - 'msgBoxCookieName': msgCookieName - }); - expect(wdContainer.msgBox('option', 'msgBoxCookieName')).toBe('FAKE_COOKIE'); - }); - - it('widget disables cookie if it exist', function () { - spyOn($.mage.cookies, 'get').and.returnValue('FAKE_MAGE_COOKIE'); - spyOn($.mage.cookies, 'clear'); - - wdContainer.msgBox({ - 'msgBoxSelector': msgContainer - }); - - expect($.mage.cookies.get).toHaveBeenCalled(); - expect($.mage.cookies.clear).toHaveBeenCalled(); - }); - - it('widget disables messageBox if cookie not exist', function () { - spyOn($.mage.cookies, 'get'); - - wdContainer.msgBox({ - 'msgBoxSelector': msgContainer - }); - - expect($.mage.cookies.get).toHaveBeenCalled(); - expect(msgContainer.is(':hidden')).toBeTruthy(); - }); - - it('widget exist on load on body', function (done) { - $(function () { - expect($('body').data('mageMsgBox')).toBeDefined(); - done(); - }); - }); - }); - describe('Testing FormKey Widget', function () { var wdContainer, msgCookieName,