PageRenderTime 95ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 1ms

/app/code/Magento/Newsletter/Test/Unit/Model/TemplateTest.php

https://gitlab.com/crazybutterfly815/magento2
PHP | 382 lines | 253 code | 53 blank | 76 comment | 0 complexity | 6ff7c610e8f2ceb1343f317e740f8b5e MD5 | raw file
  1. <?php
  2. /**
  3. * Copyright © 2016 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Newsletter\Test\Unit\Model;
  7. use Magento\Framework\App\TemplateTypesInterface;
  8. /**
  9. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  10. */
  11. class TemplateTest extends \PHPUnit_Framework_TestCase
  12. {
  13. /**
  14. * @var \Magento\Framework\Model\Context|\PHPUnit_Framework_MockObject_MockObject
  15. */
  16. private $context;
  17. /**
  18. * @var \Magento\Framework\View\DesignInterface|\PHPUnit_Framework_MockObject_MockObject
  19. */
  20. private $design;
  21. /**
  22. * @var \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject
  23. */
  24. private $registry;
  25. /**
  26. * @var \Magento\Store\Model\App\Emulation|\PHPUnit_Framework_MockObject_MockObject
  27. */
  28. private $appEmulation;
  29. /**
  30. * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject
  31. */
  32. private $storeManager;
  33. /**
  34. * @var \Magento\Store\Model\Store|\PHPUnit_Framework_MockObject_MockObject
  35. */
  36. private $store;
  37. /**
  38. * @var \Magento\Framework\View\Asset\Repository|\PHPUnit_Framework_MockObject_MockObject
  39. */
  40. private $assetRepo;
  41. /**
  42. * @var \Magento\Framework\Filesystem|\PHPUnit_Framework_MockObject_MockObject
  43. */
  44. private $filesystem;
  45. /**
  46. * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
  47. */
  48. private $scopeConfig;
  49. /**
  50. * @var \Magento\Email\Model\Template\Config|\PHPUnit_Framework_MockObject_MockObject
  51. */
  52. private $emailConfig;
  53. /**
  54. * @var \Magento\Email\Model\TemplateFactory|\PHPUnit_Framework_MockObject_MockObject
  55. */
  56. private $templateFactory;
  57. /**
  58. * @var \Magento\Framework\Filter\FilterManager|\PHPUnit_Framework_MockObject_MockObject
  59. */
  60. private $filterManager;
  61. /**
  62. * @var \Magento\Framework\Url|\PHPUnit_Framework_MockObject_MockObject
  63. */
  64. private $urlModel;
  65. /**
  66. * @var \Magento\Framework\App\RequestInterface|\PHPUnit_Framework_MockObject_MockObject
  67. */
  68. private $request;
  69. /**
  70. * @var \Magento\Newsletter\Model\Template\FilterFactory|\PHPUnit_Framework_MockObject_MockObject
  71. */
  72. private $filterFactory;
  73. protected function setUp()
  74. {
  75. $this->context = $this->getMockBuilder(\Magento\Framework\Model\Context::class)
  76. ->disableOriginalConstructor()
  77. ->getMock();
  78. $this->design = $this->getMockBuilder(\Magento\Framework\View\DesignInterface::class)
  79. ->disableOriginalConstructor()
  80. ->getMock();
  81. $this->registry = $this->getMockBuilder(\Magento\Framework\Registry::class)
  82. ->disableOriginalConstructor()
  83. ->getMock();
  84. $this->appEmulation = $this->getMockBuilder(\Magento\Store\Model\App\Emulation::class)
  85. ->disableOriginalConstructor()
  86. ->getMock();
  87. $this->storeManager = $this->getMockBuilder(\Magento\Store\Model\StoreManagerInterface::class)
  88. ->disableOriginalConstructor()
  89. ->getMock();
  90. $this->store = $this->getMockBuilder(\Magento\Store\Model\Store::class)
  91. ->setMethods(['getFrontendName', 'getId'])
  92. ->disableOriginalConstructor()
  93. ->getMock();
  94. $this->store->expects($this->any())
  95. ->method('getFrontendName')
  96. ->will($this->returnValue('frontendName'));
  97. $this->store->expects($this->any())
  98. ->method('getFrontendName')
  99. ->will($this->returnValue('storeId'));
  100. $this->storeManager->expects($this->any())
  101. ->method('getStore')
  102. ->will($this->returnValue($this->store));
  103. $this->assetRepo = $this->getMockBuilder(\Magento\Framework\View\Asset\Repository::class)
  104. ->disableOriginalConstructor()
  105. ->getMock();
  106. $this->filesystem = $this->getMockBuilder(\Magento\Framework\Filesystem::class)
  107. ->disableOriginalConstructor()
  108. ->getMock();
  109. $this->scopeConfig = $this->getMockBuilder(\Magento\Framework\App\Config\ScopeConfigInterface::class)
  110. ->disableOriginalConstructor()
  111. ->getMock();
  112. $this->emailConfig = $this->getMockBuilder(\Magento\Email\Model\Template\Config::class)
  113. ->disableOriginalConstructor()
  114. ->getMock();
  115. $this->templateFactory = $this->getMockBuilder(\Magento\Email\Model\TemplateFactory::class)
  116. ->disableOriginalConstructor()
  117. ->getMock();
  118. $this->filterManager = $this->getMockBuilder(\Magento\Framework\Filter\FilterManager::class)
  119. ->disableOriginalConstructor()
  120. ->getMock();
  121. $this->urlModel = $this->getMockBuilder(\Magento\Framework\Url::class)
  122. ->disableOriginalConstructor()
  123. ->getMock();
  124. $this->request = $this->getMockBuilder(\Magento\Framework\App\RequestInterface::class)
  125. ->disableOriginalConstructor()
  126. ->getMock();
  127. $this->filterFactory = $this->getMockBuilder(\Magento\Newsletter\Model\Template\FilterFactory::class)
  128. ->disableOriginalConstructor()
  129. ->getMock();
  130. }
  131. /**
  132. * Return the model under test with additional methods mocked.
  133. *
  134. * @param $mockedMethods array
  135. * @return \Magento\Newsletter\Model\Template|\PHPUnit_Framework_MockObject_MockObject
  136. */
  137. protected function getModelMock(array $mockedMethods = [])
  138. {
  139. return $this->getMockBuilder(\Magento\Newsletter\Model\Template::class)
  140. ->setMethods(array_merge($mockedMethods, ['__wakeup', '__sleep', '_init']))
  141. ->setConstructorArgs(
  142. [
  143. $this->context,
  144. $this->design,
  145. $this->registry,
  146. $this->appEmulation,
  147. $this->storeManager,
  148. $this->assetRepo,
  149. $this->filesystem,
  150. $this->scopeConfig,
  151. $this->emailConfig,
  152. $this->templateFactory,
  153. $this->filterManager,
  154. $this->urlModel,
  155. $this->request,
  156. $this->filterFactory,
  157. ]
  158. )
  159. ->getMock();
  160. }
  161. public function testGetProcessedTemplateSubject()
  162. {
  163. $model = $this->getModelMock([
  164. 'getTemplateFilter',
  165. 'getDesignConfig',
  166. 'applyDesignConfig',
  167. 'setVariables',
  168. ]);
  169. $templateSubject = 'templateSubject';
  170. $model->setTemplateSubject($templateSubject);
  171. $filterTemplate = $this->getMockBuilder(\Magento\Framework\Filter\Template::class)
  172. ->setMethods(['setVariables', 'setStoreId', 'filter'])
  173. ->disableOriginalConstructor()
  174. ->getMock();
  175. $model->expects($this->once())
  176. ->method('getTemplateFilter')
  177. ->will($this->returnValue($filterTemplate));
  178. $expectedResult = 'expected';
  179. $filterTemplate->expects($this->once())
  180. ->method('filter')
  181. ->with($templateSubject)
  182. ->will($this->returnValue($expectedResult));
  183. $variables = ['key' => 'value'];
  184. $filterTemplate->expects($this->once())
  185. ->method('setVariables')
  186. ->with(array_merge($variables, ['this' => $model]))
  187. ->will($this->returnValue($filterTemplate));
  188. $this->assertEquals($expectedResult, $model->getProcessedTemplateSubject($variables));
  189. }
  190. /**
  191. * This test is nearly identical to the
  192. * \Magento\Email\Test\Unit\Model\AbstractTemplateTest::testGetProcessedTemplate test, except this test also tests
  193. * to ensure that if a "subscriber" variable is passed to method, the store ID from that object will be used for
  194. * filtering.
  195. *
  196. * @param $variables array
  197. * @param $templateType string
  198. * @param $storeId int
  199. * @param $expectedVariables array
  200. * @param $expectedResult string
  201. * @dataProvider getProcessedTemplateDataProvider
  202. */
  203. public function testGetProcessedTemplate($variables, $templateType, $storeId, $expectedVariables, $expectedResult)
  204. {
  205. $filterTemplate = $this->getMockBuilder(\Magento\Newsletter\Model\Template\Filter::class)
  206. ->setMethods([
  207. 'setUseSessionInUrl',
  208. 'setPlainTemplateMode',
  209. 'setIsChildTemplate',
  210. 'setDesignParams',
  211. 'setVariables',
  212. 'setStoreId',
  213. 'filter',
  214. 'getStoreId',
  215. 'getInlineCssFiles',
  216. ])
  217. ->disableOriginalConstructor()
  218. ->getMock();
  219. $filterTemplate->expects($this->once())
  220. ->method('setUseSessionInUrl')
  221. ->with(false)
  222. ->will($this->returnSelf());
  223. $filterTemplate->expects($this->once())
  224. ->method('setPlainTemplateMode')
  225. ->with($templateType === TemplateTypesInterface::TYPE_TEXT)
  226. ->will($this->returnSelf());
  227. $filterTemplate->expects($this->once())
  228. ->method('setIsChildTemplate')
  229. ->will($this->returnSelf());
  230. $filterTemplate->expects($this->once())
  231. ->method('setDesignParams')
  232. ->will($this->returnSelf());
  233. $filterTemplate->expects($this->any())
  234. ->method('setStoreId')
  235. ->will($this->returnSelf());
  236. $filterTemplate->expects($this->any())
  237. ->method('getStoreId')
  238. ->will($this->returnValue($storeId));
  239. // The following block of code tests to ensure that the store id of the subscriber will be used, if the
  240. // 'subscriber' variable is set.
  241. $subscriber = $this->getMockBuilder(\Magento\Newsletter\Model\Subscriber::class)
  242. ->setMethods([
  243. 'getStoreId',
  244. ])
  245. ->disableOriginalConstructor()
  246. ->getMock();
  247. $subscriber->expects($this->once())
  248. ->method('getStoreId')
  249. ->will($this->returnValue('3'));
  250. $expectedVariables['subscriber'] = $subscriber;
  251. $variables['subscriber'] = $subscriber;
  252. $expectedVariables['store'] = $this->store;
  253. $model = $this->getModelMock([
  254. 'getDesignParams',
  255. 'applyDesignConfig',
  256. 'getTemplateText',
  257. 'isPlain',
  258. ]);
  259. $filterTemplate->expects($this->any())
  260. ->method('setVariables')
  261. ->with(array_merge(['this' => $model], $expectedVariables));
  262. $model->setTemplateFilter($filterTemplate);
  263. $model->setTemplateType($templateType);
  264. $designParams = [
  265. 'area' => \Magento\Framework\App\Area::AREA_FRONTEND,
  266. 'theme' => 'themeId',
  267. 'locale' => 'localeId',
  268. ];
  269. $model->expects($this->any())
  270. ->method('getDesignParams')
  271. ->will($this->returnValue($designParams));
  272. $model->expects($this->atLeastOnce())
  273. ->method('isPlain')
  274. ->will($this->returnValue($templateType === TemplateTypesInterface::TYPE_TEXT));
  275. $preparedTemplateText = $expectedResult; //'prepared text';
  276. $model->expects($this->once())
  277. ->method('getTemplateText')
  278. ->will($this->returnValue($preparedTemplateText));
  279. $filterTemplate->expects($this->once())
  280. ->method('filter')
  281. ->with($preparedTemplateText)
  282. ->will($this->returnValue($expectedResult));
  283. $this->assertEquals($expectedResult, $model->getProcessedTemplate($variables));
  284. }
  285. /**
  286. * @return array
  287. */
  288. public function getProcessedTemplateDataProvider()
  289. {
  290. return [
  291. 'default' => [
  292. 'variables' => [],
  293. 'templateType' => TemplateTypesInterface::TYPE_TEXT,
  294. 'storeId' => 1,
  295. 'expectedVariables' => [
  296. 'logo_url' => null,
  297. 'logo_alt' => 'frontendName',
  298. 'store' => null,
  299. 'logo_width' => null,
  300. 'logo_height' => null,
  301. 'store_phone' => null,
  302. 'store_hours' => null,
  303. 'store_email' => null,
  304. ],
  305. 'expectedResult' => 'expected result',
  306. ],
  307. 'logo variables set' => [
  308. 'variables' => [
  309. 'logo_url' => 'http://example.com/logo',
  310. 'logo_alt' => 'Logo Alt',
  311. ],
  312. 'templateType' => TemplateTypesInterface::TYPE_HTML,
  313. 'storeId' => 1,
  314. 'expectedVariables' => [
  315. 'logo_url' => 'http://example.com/logo',
  316. 'logo_alt' => 'Logo Alt',
  317. 'store' => null,
  318. 'logo_width' => null,
  319. 'logo_height' => null,
  320. 'store_phone' => null,
  321. 'store_hours' => null,
  322. 'store_email' => null,
  323. 'template_styles' => null,
  324. ],
  325. 'expectedResult' => 'expected result',
  326. ],
  327. ];
  328. }
  329. }