123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- /**
- * Test class for \Magento\Email\Model\AbstractTemplate.
- */
- namespace Magento\Email\Test\Unit\Model;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class AbstractTemplateTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var \Magento\Framework\View\DesignInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $design;
- /**
- * @var \Magento\Store\Model\App\Emulation|\PHPUnit_Framework_MockObject_MockObject
- */
- private $appEmulation;
- /**
- * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $storeManager;
- /**
- * @var \Magento\Store\Model\Store|\PHPUnit_Framework_MockObject_MockObject
- */
- private $store;
- /**
- * @var \Magento\Framework\Filesystem|\PHPUnit_Framework_MockObject_MockObject
- */
- private $filesystem;
- /**
- * @var \Magento\Framework\View\Asset\Repository|\PHPUnit_Framework_MockObject_MockObject
- */
- private $assetRepo;
- /**
- * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $scopeConfig;
- /**
- * @var \Magento\Email\Model\Template\FilterFactory|\PHPUnit_Framework_MockObject_MockObject
- */
- private $filterFactory;
- /**
- * @var \Magento\Email\Model\Template\Config|\PHPUnit_Framework_MockObject_MockObject
- */
- private $emailConfig;
- /**
- * @var \Magento\Email\Model\TemplateFactory|\PHPUnit_Framework_MockObject_MockObject
- */
- private $templateFactory;
- protected function setUp()
- {
- $this->design = $this->getMockBuilder(\Magento\Framework\View\DesignInterface::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->registry = $this->getMockBuilder(\Magento\Framework\Registry::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->appEmulation = $this->getMockBuilder(\Magento\Store\Model\App\Emulation::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->storeManager = $this->getMockBuilder(\Magento\Store\Model\StoreManagerInterface::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->store = $this->getMockBuilder(\Magento\Store\Model\Store::class)
- ->setMethods(['getFrontendName', 'getId'])
- ->disableOriginalConstructor()
- ->getMock();
- $this->store->expects($this->any())
- ->method('getFrontendName')
- ->will($this->returnValue('frontendName'));
- $this->store->expects($this->any())
- ->method('getFrontendName')
- ->will($this->returnValue('storeId'));
- $this->storeManager->expects($this->any())
- ->method('getStore')
- ->will($this->returnValue($this->store));
- $this->filesystem = $this->getMockBuilder(\Magento\Framework\Filesystem::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->assetRepo = $this->getMockBuilder(\Magento\Framework\View\Asset\Repository::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->scopeConfig = $this->getMockBuilder(\Magento\Framework\App\Config\ScopeConfigInterface::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->emailConfig = $this->getMockBuilder(\Magento\Email\Model\Template\Config::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->filterFactory = $this->getMockBuilder(\Magento\Email\Model\Template\FilterFactory::class)
- ->setMethods(['create'])
- ->disableOriginalConstructor()
- ->getMock();
- $this->templateFactory = $this->getMockBuilder(\Magento\Email\Model\TemplateFactory::class)
- ->disableOriginalConstructor()
- ->getMock();
- }
- /**
- * Return the model under test with additional methods mocked.
- *
- * @param array $mockedMethods
- * @param array $data
- * @return \Magento\Email\Model\Template|\PHPUnit_Framework_MockObject_MockObject
- */
- protected function getModelMock(array $mockedMethods = [], array $data = [])
- {
- $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
- return $this->getMockForAbstractClass(
- \Magento\Email\Model\AbstractTemplate::class,
- $helper->getConstructArguments(
- \Magento\Email\Model\AbstractTemplate::class,
- [
- 'design' => $this->design,
- 'appEmulation' => $this->appEmulation,
- 'storeManager' => $this->storeManager,
- 'filesystem' => $this->filesystem,
- 'assetRepo' => $this->assetRepo,
- 'scopeConfig' => $this->scopeConfig,
- 'emailConfig' => $this->emailConfig,
- 'filterFactory' => $this->filterFactory,
- 'templateFactory' => $this->templateFactory,
- 'data' => $data,
- ]
- ),
- '',
- true,
- true,
- true,
- array_merge($mockedMethods, ['__wakeup', '__sleep', '_init'])
- );
- }
- /**
- * @param $variables array
- * @param $templateType string
- * @param $storeId int
- * @param $expectedVariables array
- * @param $expectedResult string
- * @dataProvider getProcessedTemplateProvider
- */
- public function testGetProcessedTemplate($variables, $templateType, $storeId, $expectedVariables, $expectedResult)
- {
- $filterTemplate = $this->getMockBuilder(\Magento\Email\Model\Template\Filter::class)
- ->setMethods([
- 'setUseSessionInUrl',
- 'setPlainTemplateMode',
- 'setIsChildTemplate',
- 'setDesignParams',
- 'setVariables',
- 'setStoreId',
- 'filter',
- 'getStoreId',
- 'getInlineCssFiles',
- ])
- ->disableOriginalConstructor()
- ->getMock();
- $filterTemplate->expects($this->once())
- ->method('setUseSessionInUrl')
- ->with(false)
- ->will($this->returnSelf());
- $filterTemplate->expects($this->once())
- ->method('setPlainTemplateMode')
- ->with($templateType === \Magento\Framework\App\TemplateTypesInterface::TYPE_TEXT)
- ->will($this->returnSelf());
- $filterTemplate->expects($this->once())
- ->method('setIsChildTemplate')
- ->will($this->returnSelf());
- $filterTemplate->expects($this->once())
- ->method('setDesignParams')
- ->will($this->returnSelf());
- $filterTemplate->expects($this->any())
- ->method('setStoreId')
- ->will($this->returnSelf());
- $filterTemplate->expects($this->any())
- ->method('getStoreId')
- ->will($this->returnValue($storeId));
- $expectedVariables['store'] = $this->store;
- $model = $this->getModelMock([
- 'getDesignParams',
- 'applyDesignConfig',
- 'getTemplateText',
- 'isPlain',
- ]);
- $filterTemplate->expects($this->any())
- ->method('setVariables')
- ->with(array_merge(['this' => $model], $expectedVariables));
- $model->setTemplateFilter($filterTemplate);
- $model->setTemplateType($templateType);
- $designParams = [
- 'area' => \Magento\Framework\App\Area::AREA_FRONTEND,
- 'theme' => 'themeId',
- 'locale' => 'localeId',
- ];
- $model->expects($this->any())
- ->method('getDesignParams')
- ->will($this->returnValue($designParams));
- $model->expects($this->atLeastOnce())
- ->method('isPlain')
- ->will($this->returnValue($templateType === \Magento\Framework\App\TemplateTypesInterface::TYPE_TEXT));
- $preparedTemplateText = $expectedResult; //'prepared text';
- $model->expects($this->once())
- ->method('getTemplateText')
- ->will($this->returnValue($preparedTemplateText));
- $filterTemplate->expects($this->once())
- ->method('filter')
- ->with($preparedTemplateText)
- ->will($this->returnValue($expectedResult));
- $this->assertEquals($expectedResult, $model->getProcessedTemplate($variables));
- }
- /**
- * @expectedException \LogicException
- */
- public function testGetProcessedTemplateException()
- {
- $filterTemplate = $this->getMockBuilder(\Magento\Email\Model\Template\Filter::class)
- ->setMethods([
- 'setUseSessionInUrl',
- 'setPlainTemplateMode',
- 'setIsChildTemplate',
- 'setDesignParams',
- 'setVariables',
- 'setStoreId',
- 'filter',
- 'getStoreId',
- 'getInlineCssFiles',
- ])
- ->disableOriginalConstructor()
- ->getMock();
- $filterTemplate->expects($this->once())
- ->method('setUseSessionInUrl')
- ->will($this->returnSelf());
- $filterTemplate->expects($this->once())
- ->method('setPlainTemplateMode')
- ->will($this->returnSelf());
- $filterTemplate->expects($this->once())
- ->method('setIsChildTemplate')
- ->will($this->returnSelf());
- $filterTemplate->expects($this->once())
- ->method('setDesignParams')
- ->will($this->returnSelf());
- $filterTemplate->expects($this->any())
- ->method('setStoreId')
- ->will($this->returnSelf());
- $filterTemplate->expects($this->any())
- ->method('getStoreId')
- ->will($this->returnValue(1));
- $model = $this->getModelMock([
- 'getDesignParams',
- 'applyDesignConfig',
- 'getTemplateText',
- 'isPlain',
- ]);
- $designParams = [
- 'area' => \Magento\Framework\App\Area::AREA_FRONTEND,
- 'theme' => 'themeId',
- 'locale' => 'localeId',
- ];
- $model->expects($this->any())
- ->method('getDesignParams')
- ->will($this->returnValue($designParams));
- $model->setTemplateFilter($filterTemplate);
- $model->setTemplateType(\Magento\Framework\App\TemplateTypesInterface::TYPE_TEXT);
- $filterTemplate->expects($this->once())
- ->method('filter')
- ->will($this->throwException(new \Exception));
- $model->getProcessedTemplate([]);
- }
- /**
- * @return array
- */
- public function getProcessedTemplateProvider()
- {
- return [
- 'default' => [
- 'variables' => [],
- 'templateType' => \Magento\Framework\App\TemplateTypesInterface::TYPE_TEXT,
- 'storeId' => 1,
- 'expectedVariables' => [
- 'logo_url' => null,
- 'logo_alt' => 'frontendName',
- 'store' => null,
- 'logo_width' => null,
- 'logo_height' => null,
- 'store_phone' => null,
- 'store_hours' => null,
- 'store_email' => null,
- ],
- 'expectedResult' => 'expected result',
- ],
- 'logo variables set' => [
- 'variables' => [
- 'logo_url' => 'http://example.com/logo',
- 'logo_alt' => 'Logo Alt',
- ],
- 'templateType' => \Magento\Framework\App\TemplateTypesInterface::TYPE_HTML,
- 'storeId' => 1,
- 'expectedVariables' => [
- 'logo_url' => 'http://example.com/logo',
- 'logo_alt' => 'Logo Alt',
- 'store' => null,
- 'logo_width' => null,
- 'logo_height' => null,
- 'store_phone' => null,
- 'store_hours' => null,
- 'store_email' => null,
- 'template_styles' => null,
- ],
- 'expectedResult' => 'expected result',
- ],
- ];
- }
- public function testGetDefaultEmailLogo()
- {
- $model = $this->getModelMock(['getDesignParams']);
- $value = 'urlWithParamsValue';
- $designParams = [
- 'area' => \Magento\Framework\App\Area::AREA_FRONTEND,
- 'theme' => 'themeId',
- 'locale' => 'localeId',
- ];
- $model->expects($this->once())
- ->method('getDesignParams')
- ->will($this->returnValue($designParams));
- $this->assetRepo->method('getUrlWithParams')
- ->with(\Magento\Email\Model\AbstractTemplate::DEFAULT_LOGO_FILE_ID, $designParams)
- ->will($this->returnValue($value));
- $this->assertEquals($value, $model->getDefaultEmailLogo());
- }
- /**
- * @param array $config
- * @expectedException \Magento\Framework\Exception\LocalizedException
- * @dataProvider invalidInputParametersDataProvider
- */
- public function testSetDesignConfigWithInvalidInputParametersThrowsException($config)
- {
- $this->getModelMock()->setDesignConfig($config);
- }
- public function testSetDesignConfigWithValidInputParametersReturnsSuccess()
- {
- $config = ['area' => 'some_area', 'store' => 1];
- $model = $this->getModelMock();
- $model->setDesignConfig($config);
- $this->assertEquals($config, $model->getDesignConfig()->getData());
- }
- /**
- * @return array
- */
- public function invalidInputParametersDataProvider()
- {
- return [[[]], [['area' => 'some_area']], [['store' => 'any_store']]];
- }
- public function testEmulateDesignAndRevertDesign()
- {
- $model = $this->getModelMock();
- $originalConfig = ['area' => 'some_area', 'store' => 1];
- $model->setDesignConfig($originalConfig);
- $expectedConfigs = [
- ['in' => ['area' => 'frontend', 'store' => null], 'out' => $originalConfig],
- ['in' => ['area' => 'frontend', 'store' => false], 'out' => $originalConfig],
- ['in' => ['area' => 'frontend', 'store' => 0], 'out' => ['area' => 'frontend', 'store' => 0]],
- ['in' => ['area' => 'frontend', 'store' => 1], 'out' => ['area' => 'frontend', 'store' => 1]],
- ['in' => ['area' => 'frontend', 'store' => 2], 'out' => ['area' => 'frontend', 'store' => 2]],
- ];
- foreach ($expectedConfigs as $set) {
- $model->emulateDesign($set['in']['store'], $set['in']['area']);
- // assert config data has been emulated
- $this->assertEquals($set['out'], $model->getDesignConfig()->getData());
- $model->revertDesign();
- // assert config data has been reverted to the original state
- $this->assertEquals($originalConfig, $model->getDesignConfig()->getData());
- }
- }
- public function testGetDesignConfig()
- {
- $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
- $designMock = $this->createMock(\Magento\Framework\View\DesignInterface::class);
- $designMock->expects($this->any())->method('getArea')->willReturn('test_area');
- $storeMock = $this->createMock(\Magento\Store\Model\Store::class);
- $storeMock->expects($this->any())->method('getId')->willReturn(2);
- $storeManagerMock = $this->createMock(\Magento\Store\Model\StoreManagerInterface::class);
- $storeManagerMock->expects($this->any())->method('getStore')->willReturn($storeMock);
- $model = $this->getMockForAbstractClass(
- \Magento\Email\Model\AbstractTemplate::class,
- $helper->getConstructArguments(
- \Magento\Email\Model\AbstractTemplate::class,
- [
- 'design' => $designMock,
- 'storeManager' => $storeManagerMock
- ]
- )
- );
- $expectedConfig = ['area' => 'test_area', 'store' => 2];
- $this->assertEquals($expectedConfig, $model->getDesignConfig()->getData());
- }
- /**
- * @return void
- */
- public function testSetForcedAreaWhenAreaIsNotSet(): void
- {
- $templateId = 'test_template';
- $model = $this->getModelMock([], ['area' => null]);
- $this->emailConfig->expects($this->once())
- ->method('getTemplateArea')
- ->with($templateId);
- $model->setForcedArea($templateId);
- }
- /**
- * @return void
- */
- public function testSetForcedAreaWhenAreaIsSet(): void
- {
- $templateId = 'test_template';
- $model = $this->getModelMock([], ['area' => 'frontend']);
- $this->emailConfig->expects($this->never())
- ->method('getTemplateArea');
- $model->setForcedArea($templateId);
- }
- }
|