Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
TemplateTest.php
Go to the documentation of this file.
1 <?php
8 
10 
14 class TemplateTest extends \PHPUnit\Framework\TestCase
15 {
19  private $context;
20 
24  private $design;
25 
29  private $registry;
30 
34  private $appEmulation;
35 
39  private $storeManager;
40 
44  private $store;
45 
49  private $assetRepo;
50 
54  private $filesystem;
55 
59  private $scopeConfig;
60 
64  private $emailConfig;
65 
69  private $templateFactory;
70 
74  private $filterManager;
75 
79  private $urlModel;
80 
84  private $request;
85 
89  private $filterFactory;
90 
91  protected function setUp()
92  {
93  $this->context = $this->getMockBuilder(\Magento\Framework\Model\Context::class)
94  ->disableOriginalConstructor()
95  ->getMock();
96 
97  $this->design = $this->getMockBuilder(\Magento\Framework\View\DesignInterface::class)
98  ->disableOriginalConstructor()
99  ->getMock();
100 
101  $this->registry = $this->getMockBuilder(\Magento\Framework\Registry::class)
102  ->disableOriginalConstructor()
103  ->getMock();
104 
105  $this->appEmulation = $this->getMockBuilder(\Magento\Store\Model\App\Emulation::class)
106  ->disableOriginalConstructor()
107  ->getMock();
108 
109  $this->storeManager = $this->getMockBuilder(\Magento\Store\Model\StoreManagerInterface::class)
110  ->disableOriginalConstructor()
111  ->getMock();
112 
113  $this->store = $this->getMockBuilder(\Magento\Store\Model\Store::class)
114  ->setMethods(['getFrontendName', 'getId'])
115  ->disableOriginalConstructor()
116  ->getMock();
117 
118  $this->store->expects($this->any())
119  ->method('getFrontendName')
120  ->will($this->returnValue('frontendName'));
121 
122  $this->store->expects($this->any())
123  ->method('getFrontendName')
124  ->will($this->returnValue('storeId'));
125 
126  $this->storeManager->expects($this->any())
127  ->method('getStore')
128  ->will($this->returnValue($this->store));
129 
130  $this->assetRepo = $this->getMockBuilder(\Magento\Framework\View\Asset\Repository::class)
131  ->disableOriginalConstructor()
132  ->getMock();
133 
134  $this->filesystem = $this->getMockBuilder(\Magento\Framework\Filesystem::class)
135  ->disableOriginalConstructor()
136  ->getMock();
137 
138  $this->scopeConfig = $this->getMockBuilder(\Magento\Framework\App\Config\ScopeConfigInterface::class)
139  ->disableOriginalConstructor()
140  ->getMock();
141 
142  $this->emailConfig = $this->getMockBuilder(\Magento\Email\Model\Template\Config::class)
143  ->disableOriginalConstructor()
144  ->getMock();
145 
146  $this->templateFactory = $this->getMockBuilder(\Magento\Email\Model\TemplateFactory::class)
147  ->disableOriginalConstructor()
148  ->getMock();
149 
150  $this->filterManager = $this->getMockBuilder(\Magento\Framework\Filter\FilterManager::class)
151  ->disableOriginalConstructor()
152  ->getMock();
153 
154  $this->urlModel = $this->getMockBuilder(\Magento\Framework\Url::class)
155  ->disableOriginalConstructor()
156  ->getMock();
157 
158  $this->request = $this->getMockBuilder(\Magento\Framework\App\RequestInterface::class)
159  ->disableOriginalConstructor()
160  ->getMock();
161 
162  $this->filterFactory = $this->getMockBuilder(\Magento\Newsletter\Model\Template\FilterFactory::class)
163  ->disableOriginalConstructor()
164  ->getMock();
165  }
166 
173  protected function getModelMock(array $mockedMethods = [])
174  {
175  return $this->getMockBuilder(\Magento\Newsletter\Model\Template::class)
176  ->setMethods(array_merge($mockedMethods, ['__wakeup', '__sleep', '_init']))
177  ->setConstructorArgs(
178  [
179  $this->context,
180  $this->design,
181  $this->registry,
182  $this->appEmulation,
183  $this->storeManager,
184  $this->assetRepo,
185  $this->filesystem,
186  $this->scopeConfig,
187  $this->emailConfig,
188  $this->templateFactory,
189  $this->filterManager,
190  $this->urlModel,
191  $this->request,
192  $this->filterFactory,
193  ]
194  )
195  ->getMock();
196  }
197 
199  {
200  $model = $this->getModelMock([
201  'getTemplateFilter',
202  'getDesignConfig',
203  'applyDesignConfig',
204  'setVariables',
205  ]);
206 
207  $templateSubject = 'templateSubject';
208  $model->setTemplateSubject($templateSubject);
209 
210  $filterTemplate = $this->getMockBuilder(\Magento\Framework\Filter\Template::class)
211  ->setMethods(['setVariables', 'setStoreId', 'filter'])
212  ->disableOriginalConstructor()
213  ->getMock();
214  $model->expects($this->once())
215  ->method('getTemplateFilter')
216  ->will($this->returnValue($filterTemplate));
217 
218  $expectedResult = 'expected';
219  $filterTemplate->expects($this->once())
220  ->method('filter')
221  ->with($templateSubject)
222  ->will($this->returnValue($expectedResult));
223 
224  $variables = ['key' => 'value'];
225  $filterTemplate->expects($this->once())
226  ->method('setVariables')
227  ->with(array_merge($variables, ['this' => $model]))
228  ->will($this->returnValue($filterTemplate));
229 
230  $this->assertEquals($expectedResult, $model->getProcessedTemplateSubject($variables));
231  }
232 
246  public function testGetProcessedTemplate($variables, $templateType, $storeId, $expectedVariables, $expectedResult)
247  {
248  $filterTemplate = $this->getMockBuilder(\Magento\Newsletter\Model\Template\Filter::class)
249  ->setMethods([
250  'setUseSessionInUrl',
251  'setPlainTemplateMode',
252  'setIsChildTemplate',
253  'setDesignParams',
254  'setVariables',
255  'setStoreId',
256  'filter',
257  'getStoreId',
258  'getInlineCssFiles',
259  ])
260  ->disableOriginalConstructor()
261  ->getMock();
262 
263  $filterTemplate->expects($this->once())
264  ->method('setUseSessionInUrl')
265  ->with(false)
266  ->will($this->returnSelf());
267  $filterTemplate->expects($this->once())
268  ->method('setPlainTemplateMode')
270  ->will($this->returnSelf());
271  $filterTemplate->expects($this->once())
272  ->method('setIsChildTemplate')
273  ->will($this->returnSelf());
274  $filterTemplate->expects($this->once())
275  ->method('setDesignParams')
276  ->will($this->returnSelf());
277  $filterTemplate->expects($this->any())
278  ->method('setStoreId')
279  ->will($this->returnSelf());
280  $filterTemplate->expects($this->any())
281  ->method('getStoreId')
282  ->will($this->returnValue($storeId));
283 
284  // The following block of code tests to ensure that the store id of the subscriber will be used, if the
285  // 'subscriber' variable is set.
286  $subscriber = $this->getMockBuilder(\Magento\Newsletter\Model\Subscriber::class)
287  ->setMethods([
288  'getStoreId',
289  ])
290  ->disableOriginalConstructor()
291  ->getMock();
292  $subscriber->expects($this->once())
293  ->method('getStoreId')
294  ->will($this->returnValue('3'));
295  $expectedVariables['subscriber'] = $subscriber;
296  $variables['subscriber'] = $subscriber;
297 
298  $expectedVariables['store'] = $this->store;
299 
300  $model = $this->getModelMock([
301  'getDesignParams',
302  'applyDesignConfig',
303  'getTemplateText',
304  'isPlain',
305  ]);
306  $filterTemplate->expects($this->any())
307  ->method('setVariables')
308  ->with(array_merge(['this' => $model], $expectedVariables));
309  $model->setTemplateFilter($filterTemplate);
310  $model->setTemplateType($templateType);
311 
312  $designParams = [
314  'theme' => 'themeId',
315  'locale' => 'localeId',
316  ];
317  $model->expects($this->any())
318  ->method('getDesignParams')
319  ->will($this->returnValue($designParams));
320 
321  $model->expects($this->atLeastOnce())
322  ->method('isPlain')
323  ->will($this->returnValue($templateType === TemplateTypesInterface::TYPE_TEXT));
324 
325  $preparedTemplateText = $expectedResult; //'prepared text';
326  $model->expects($this->once())
327  ->method('getTemplateText')
328  ->will($this->returnValue($preparedTemplateText));
329 
330  $filterTemplate->expects($this->once())
331  ->method('filter')
332  ->with($preparedTemplateText)
333  ->will($this->returnValue($expectedResult));
334 
335  $this->assertEquals($expectedResult, $model->getProcessedTemplate($variables));
336  }
337 
342  {
343  return [
344  'default' => [
345  'variables' => [],
346  'templateType' => TemplateTypesInterface::TYPE_TEXT,
347  'storeId' => 1,
348  'expectedVariables' => [
349  'logo_url' => null,
350  'logo_alt' => 'frontendName',
351  'store' => null,
352  'logo_width' => null,
353  'logo_height' => null,
354  'store_phone' => null,
355  'store_hours' => null,
356  'store_email' => null,
357  ],
358  'expectedResult' => 'expected result',
359  ],
360  'logo variables set' => [
361  'variables' => [
362  'logo_url' => 'http://example.com/logo',
363  'logo_alt' => 'Logo Alt',
364  ],
365  'templateType' => TemplateTypesInterface::TYPE_HTML,
366  'storeId' => 1,
367  'expectedVariables' => [
368  'logo_url' => 'http://example.com/logo',
369  'logo_alt' => 'Logo Alt',
370  'store' => null,
371  'logo_width' => null,
372  'logo_height' => null,
373  'store_phone' => null,
374  'store_hours' => null,
375  'store_email' => null,
376  'template_styles' => null,
377  ],
378  'expectedResult' => 'expected result',
379  ],
380  ];
381  }
382 
389  public function testIsValidForSend($senderName, $senderEmail, $templateSubject, $expectedValue)
390  {
391  $model = $this->getModelMock(['getTemplateSenderName', 'getTemplateSenderEmail', 'getTemplateSubject']);
392  $model->expects($this->any())
393  ->method('getTemplateSenderName')
394  ->will($this->returnValue($senderName));
395  $model->expects($this->any())
396  ->method('getTemplateSenderEmail')
397  ->will($this->returnValue($senderEmail));
398  $model->expects($this->any())
399  ->method('getTemplateSubject')
400  ->will($this->returnValue($templateSubject));
401  $this->assertEquals($expectedValue, $model->isValidForSend());
402  }
403 
407  public function isValidForSendDataProvider()
408  {
409  return [
410  'should be valid' => [
411  'senderName' => 'sender name',
412  'senderEmail' => '[email protected]',
413  'templateSubject' => 'template subject',
414  'expectedValue' => true
415  ],
416  'no sender name so not valid' => [
417  'senderName' => '',
418  'senderEmail' => '[email protected]',
419  'templateSubject' => 'template subject',
420  'expectedValue' => false
421  ],
422  'no sender email so not valid' => [
423  'senderName' => 'sender name',
424  'senderEmail' => '',
425  'templateSubject' => 'template subject',
426  'expectedValue' => false
427  ],
428  'no subject so not valid' => [
429  'senderName' => 'sender name',
430  'senderEmail' => '[email protected]',
431  'templateSubject' => '',
432  'expectedValue' => false
433  ],
434  ];
435  }
436 }
return false
Definition: gallery.phtml:36
testIsValidForSend($senderName, $senderEmail, $templateSubject, $expectedValue)
$templateType
Definition: list.phtml:37
testGetProcessedTemplate($variables, $templateType, $storeId, $expectedVariables, $expectedResult)
$subscriber
Definition: subscribers.php:20