123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Theme\Test\Unit\Controller\Result;
- use Magento\Framework\Controller\Result\Json;
- use Magento\Framework\Controller\Result\Redirect;
- use Magento\Framework\Json\Helper\Data;
- use Magento\Framework\Message\Collection;
- use Magento\Framework\Message\ManagerInterface;
- use Magento\Framework\Message\MessageInterface;
- use Magento\Framework\Stdlib\Cookie\CookieMetadataFactory;
- use Magento\Framework\Stdlib\Cookie\PublicCookieMetadata;
- use Magento\Framework\Stdlib\CookieManagerInterface;
- use Magento\Framework\Translate\InlineInterface;
- use Magento\Framework\View\Element\Message\InterpretationStrategyInterface;
- use Magento\Theme\Controller\Result\MessagePlugin;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class MessagePluginTest extends \PHPUnit\Framework\TestCase
- {
- /** @var MessagePlugin */
- protected $model;
- /** @var CookieManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $cookieManagerMock;
- /** @var CookieMetadataFactory|\PHPUnit_Framework_MockObject_MockObject */
- protected $cookieMetadataFactoryMock;
- /** @var ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $managerMock;
- /** @var InterpretationStrategyInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $interpretationStrategyMock;
- /** @var \Magento\Framework\Serialize\Serializer\Json|\PHPUnit_Framework_MockObject_MockObject */
- private $serializerMock;
- /** @var InlineInterface|\PHPUnit_Framework_MockObject_MockObject */
- private $inlineTranslateMock;
- protected function setUp()
- {
- $this->cookieManagerMock = $this->getMockBuilder(CookieManagerInterface::class)
- ->getMockForAbstractClass();
- $this->cookieMetadataFactoryMock = $this->getMockBuilder(CookieMetadataFactory::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->managerMock = $this->getMockBuilder(ManagerInterface::class)
- ->getMockForAbstractClass();
- $this->interpretationStrategyMock = $this->getMockBuilder(InterpretationStrategyInterface::class)
- ->getMockForAbstractClass();
- $this->serializerMock = $this->getMockBuilder(\Magento\Framework\Serialize\Serializer\Json::class)
- ->getMock();
- $this->inlineTranslateMock = $this->getMockBuilder(InlineInterface::class)->getMockForAbstractClass();
- $this->model = new MessagePlugin(
- $this->cookieManagerMock,
- $this->cookieMetadataFactoryMock,
- $this->managerMock,
- $this->interpretationStrategyMock,
- $this->serializerMock,
- $this->inlineTranslateMock
- );
- }
- public function testAfterRenderResultJson()
- {
- /** @var Json|\PHPUnit_Framework_MockObject_MockObject $resultMock */
- $resultMock = $this->getMockBuilder(Json::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->cookieManagerMock->expects($this->never())
- ->method('setPublicCookie');
- $this->assertEquals($resultMock, $this->model->afterRenderResult($resultMock, $resultMock));
- }
- public function testAfterRenderResult()
- {
- $existingMessages = [
- [
- 'type' => 'message0type',
- 'text' => 'message0text',
- ],
- ];
- $messageType = 'message1type';
- $messageText = 'message1text';
- $messages = [
- [
- 'type' => $messageType,
- 'text' => $messageText,
- ],
- ];
- $messages = array_merge($existingMessages, $messages);
-
- /** @var Redirect|\PHPUnit_Framework_MockObject_MockObject $resultMock */
- $resultMock = $this->getMockBuilder(Redirect::class)
- ->disableOriginalConstructor()
- ->getMock();
- /** @var PublicCookieMetadata|\PHPUnit_Framework_MockObject_MockObject $cookieMetadataMock */
- $cookieMetadataMock = $this->getMockBuilder(PublicCookieMetadata::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->cookieMetadataFactoryMock->expects($this->once())
- ->method('createPublicCookieMetadata')
- ->willReturn($cookieMetadataMock);
- $this->cookieManagerMock->expects($this->once())
- ->method('setPublicCookie')
- ->with(
- MessagePlugin::MESSAGES_COOKIES_NAME,
- json_encode($messages),
- $cookieMetadataMock
- );
- $this->cookieManagerMock->expects($this->once())
- ->method('getCookie')
- ->with(
- MessagePlugin::MESSAGES_COOKIES_NAME
- )
- ->willReturn(json_encode($existingMessages));
- $this->serializerMock->expects($this->once())
- ->method('unserialize')
- ->willReturnCallback(
- function ($data) {
- return json_decode($data, true);
- }
- );
- $this->serializerMock->expects($this->once())
- ->method('serialize')
- ->willReturnCallback(
- function ($data) {
- return json_encode($data);
- }
- );
- /** @var MessageInterface|\PHPUnit_Framework_MockObject_MockObject $messageMock */
- $messageMock = $this->getMockBuilder(MessageInterface::class)
- ->getMock();
- $messageMock->expects($this->once())
- ->method('getType')
- ->willReturn($messageType);
- $this->interpretationStrategyMock->expects($this->once())
- ->method('interpret')
- ->with($messageMock)
- ->willReturn($messageText);
- /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
- $collectionMock = $this->getMockBuilder(Collection::class)
- ->disableOriginalConstructor()
- ->getMock();
- $collectionMock->expects($this->once())
- ->method('getItems')
- ->willReturn([$messageMock]);
- $this->managerMock->expects($this->once())
- ->method('getMessages')
- ->with(true, null)
- ->willReturn($collectionMock);
- $this->assertEquals($resultMock, $this->model->afterRenderResult($resultMock, $resultMock));
- }
- public function testAfterRenderResultWithNoMessages()
- {
- /** @var Redirect|\PHPUnit_Framework_MockObject_MockObject $resultMock */
- $resultMock = $this->getMockBuilder(Redirect::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->cookieManagerMock->expects($this->once())
- ->method('getCookie')
- ->with(
- MessagePlugin::MESSAGES_COOKIES_NAME
- )
- ->willReturn(json_encode([]));
- $this->serializerMock->expects($this->once())
- ->method('unserialize')
- ->willReturnCallback(
- function ($data) {
- return json_decode($data, true);
- }
- );
- $this->serializerMock->expects($this->never())
- ->method('serialize');
- /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
- $collectionMock = $this->getMockBuilder(Collection::class)
- ->disableOriginalConstructor()
- ->getMock();
- $collectionMock->expects($this->once())
- ->method('getItems')
- ->willReturn([]);
- $this->managerMock->expects($this->once())
- ->method('getMessages')
- ->with(true, null)
- ->willReturn($collectionMock);
- $this->cookieMetadataFactoryMock->expects($this->never())
- ->method('createPublicCookieMetadata')
- ->willReturn(null);
- $this->assertEquals($resultMock, $this->model->afterRenderResult($resultMock, $resultMock));
- }
- public function testAfterRenderResultWithoutExisting()
- {
- $messageType = 'message1type';
- $messageText = 'message1text';
- $messages = [
- [
- 'type' => $messageType,
- 'text' => $messageText,
- ],
- ];
- /** @var Redirect|\PHPUnit_Framework_MockObject_MockObject $resultMock */
- $resultMock = $this->getMockBuilder(Redirect::class)
- ->disableOriginalConstructor()
- ->getMock();
- /** @var PublicCookieMetadata|\PHPUnit_Framework_MockObject_MockObject $cookieMetadataMock */
- $cookieMetadataMock = $this->getMockBuilder(PublicCookieMetadata::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->cookieMetadataFactoryMock->expects($this->once())
- ->method('createPublicCookieMetadata')
- ->willReturn($cookieMetadataMock);
- $this->cookieManagerMock->expects($this->once())
- ->method('setPublicCookie')
- ->with(
- MessagePlugin::MESSAGES_COOKIES_NAME,
- json_encode($messages),
- $cookieMetadataMock
- );
- $this->cookieManagerMock->expects($this->once())
- ->method('getCookie')
- ->with(
- MessagePlugin::MESSAGES_COOKIES_NAME
- )
- ->willReturn(json_encode([]));
- $this->serializerMock->expects($this->once())
- ->method('unserialize')
- ->willReturnCallback(
- function ($data) {
- return json_decode($data, true);
- }
- );
- $this->serializerMock->expects($this->once())
- ->method('serialize')
- ->willReturnCallback(
- function ($data) {
- return json_encode($data);
- }
- );
- /** @var MessageInterface|\PHPUnit_Framework_MockObject_MockObject $messageMock */
- $messageMock = $this->getMockBuilder(MessageInterface::class)
- ->getMock();
- $messageMock->expects($this->once())
- ->method('getType')
- ->willReturn($messageType);
- $this->interpretationStrategyMock->expects($this->once())
- ->method('interpret')
- ->with($messageMock)
- ->willReturn($messageText);
- /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
- $collectionMock = $this->getMockBuilder(Collection::class)
- ->disableOriginalConstructor()
- ->getMock();
- $collectionMock->expects($this->once())
- ->method('getItems')
- ->willReturn([$messageMock]);
- $this->managerMock->expects($this->once())
- ->method('getMessages')
- ->with(true, null)
- ->willReturn($collectionMock);
- $this->assertEquals($resultMock, $this->model->afterRenderResult($resultMock, $resultMock));
- }
- public function testAfterRenderResultWithWrongJson()
- {
- $messageType = 'message1type';
- $messageText = 'message1text';
- $messages = [
- [
- 'type' => $messageType,
- 'text' => $messageText,
- ],
- ];
- /** @var Redirect|\PHPUnit_Framework_MockObject_MockObject $resultMock */
- $resultMock = $this->getMockBuilder(Redirect::class)
- ->disableOriginalConstructor()
- ->getMock();
- /** @var PublicCookieMetadata|\PHPUnit_Framework_MockObject_MockObject $cookieMetadataMock */
- $cookieMetadataMock = $this->getMockBuilder(PublicCookieMetadata::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->cookieMetadataFactoryMock->expects($this->once())
- ->method('createPublicCookieMetadata')
- ->willReturn($cookieMetadataMock);
- $this->cookieManagerMock->expects($this->once())
- ->method('setPublicCookie')
- ->with(
- MessagePlugin::MESSAGES_COOKIES_NAME,
- json_encode($messages),
- $cookieMetadataMock
- );
- $this->cookieManagerMock->expects($this->once())
- ->method('getCookie')
- ->with(
- MessagePlugin::MESSAGES_COOKIES_NAME
- )
- ->willReturn(null);
- $this->serializerMock->expects($this->never())
- ->method('unserialize');
- $this->serializerMock->expects($this->once())
- ->method('serialize')
- ->willReturnCallback(
- function ($data) {
- return json_encode($data);
- }
- );
- /** @var MessageInterface|\PHPUnit_Framework_MockObject_MockObject $messageMock */
- $messageMock = $this->getMockBuilder(MessageInterface::class)
- ->getMock();
- $messageMock->expects($this->once())
- ->method('getType')
- ->willReturn($messageType);
- $this->interpretationStrategyMock->expects($this->once())
- ->method('interpret')
- ->with($messageMock)
- ->willReturn($messageText);
- /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
- $collectionMock = $this->getMockBuilder(Collection::class)
- ->disableOriginalConstructor()
- ->getMock();
- $collectionMock->expects($this->once())
- ->method('getItems')
- ->willReturn([$messageMock]);
- $this->managerMock->expects($this->once())
- ->method('getMessages')
- ->with(true, null)
- ->willReturn($collectionMock);
- $this->assertEquals($resultMock, $this->model->afterRenderResult($resultMock, $resultMock));
- }
- public function testAfterRenderResultWithWrongArray()
- {
- $messageType = 'message1type';
- $messageText = 'message1text';
- $messages = [
- [
- 'type' => $messageType,
- 'text' => $messageText,
- ],
- ];
- /** @var Redirect|\PHPUnit_Framework_MockObject_MockObject $resultMock */
- $resultMock = $this->getMockBuilder(Redirect::class)
- ->disableOriginalConstructor()
- ->getMock();
- /** @var PublicCookieMetadata|\PHPUnit_Framework_MockObject_MockObject $cookieMetadataMock */
- $cookieMetadataMock = $this->getMockBuilder(PublicCookieMetadata::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->cookieMetadataFactoryMock->expects($this->once())
- ->method('createPublicCookieMetadata')
- ->willReturn($cookieMetadataMock);
- $this->cookieManagerMock->expects($this->once())
- ->method('setPublicCookie')
- ->with(
- MessagePlugin::MESSAGES_COOKIES_NAME,
- json_encode($messages),
- $cookieMetadataMock
- );
- $this->cookieManagerMock->expects($this->once())
- ->method('getCookie')
- ->with(
- MessagePlugin::MESSAGES_COOKIES_NAME
- )
- ->willReturn(json_encode('string'));
- $this->serializerMock->expects($this->once())
- ->method('unserialize')
- ->willReturnCallback(
- function ($data) {
- return json_decode($data, true);
- }
- );
- $this->serializerMock->expects($this->once())
- ->method('serialize')
- ->willReturnCallback(
- function ($data) {
- return json_encode($data);
- }
- );
- /** @var MessageInterface|\PHPUnit_Framework_MockObject_MockObject $messageMock */
- $messageMock = $this->getMockBuilder(MessageInterface::class)
- ->getMock();
- $messageMock->expects($this->once())
- ->method('getType')
- ->willReturn($messageType);
- $this->interpretationStrategyMock->expects($this->once())
- ->method('interpret')
- ->with($messageMock)
- ->willReturn($messageText);
- /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
- $collectionMock = $this->getMockBuilder(Collection::class)
- ->disableOriginalConstructor()
- ->getMock();
- $collectionMock->expects($this->once())
- ->method('getItems')
- ->willReturn([$messageMock]);
- $this->managerMock->expects($this->once())
- ->method('getMessages')
- ->with(true, null)
- ->willReturn($collectionMock);
- $this->assertEquals($resultMock, $this->model->afterRenderResult($resultMock, $resultMock));
- }
- /**
- * @return void
- */
- public function testAfterRenderResultWithAllowedInlineTranslate(): void
- {
- $messageType = 'message1type';
- $messageText = '{{{message1text}}{{message1text}}{{message1text}}{{theme/luma}}}';
- $expectedMessages = [
- [
- 'type' => $messageType,
- 'text' => 'message1text',
- ],
- ];
- /** @var Redirect|\PHPUnit_Framework_MockObject_MockObject $resultMock */
- $resultMock = $this->getMockBuilder(Redirect::class)
- ->disableOriginalConstructor()
- ->getMock();
- /** @var PublicCookieMetadata|\PHPUnit_Framework_MockObject_MockObject $cookieMetadataMock */
- $cookieMetadataMock = $this->getMockBuilder(PublicCookieMetadata::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->cookieMetadataFactoryMock->expects($this->once())
- ->method('createPublicCookieMetadata')
- ->willReturn($cookieMetadataMock);
- $this->cookieManagerMock->expects($this->once())
- ->method('setPublicCookie')
- ->with(
- MessagePlugin::MESSAGES_COOKIES_NAME,
- json_encode($expectedMessages),
- $cookieMetadataMock
- );
- $this->cookieManagerMock->expects($this->once())
- ->method('getCookie')
- ->with(
- MessagePlugin::MESSAGES_COOKIES_NAME
- )
- ->willReturn(json_encode([]));
- $this->serializerMock->expects($this->once())
- ->method('unserialize')
- ->willReturnCallback(
- function ($data) {
- return json_decode($data, true);
- }
- );
- $this->serializerMock->expects($this->once())
- ->method('serialize')
- ->willReturnCallback(
- function ($data) {
- return json_encode($data);
- }
- );
- /** @var MessageInterface|\PHPUnit_Framework_MockObject_MockObject $messageMock */
- $messageMock = $this->getMockBuilder(MessageInterface::class)
- ->getMock();
- $messageMock->expects($this->once())
- ->method('getType')
- ->willReturn($messageType);
- $this->interpretationStrategyMock->expects($this->once())
- ->method('interpret')
- ->with($messageMock)
- ->willReturn($messageText);
- $this->inlineTranslateMock->expects($this->once())
- ->method('isAllowed')
- ->willReturn(true);
- /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
- $collectionMock = $this->getMockBuilder(Collection::class)
- ->disableOriginalConstructor()
- ->getMock();
- $collectionMock->expects($this->once())
- ->method('getItems')
- ->willReturn([$messageMock]);
- $this->managerMock->expects($this->once())
- ->method('getMessages')
- ->with(true, null)
- ->willReturn($collectionMock);
- $this->assertEquals($resultMock, $this->model->afterRenderResult($resultMock, $resultMock));
- }
- }
|