33 * Copyright © Magento, Inc. All rights reserved.
44 * See COPYING.txt for license details.
55 */
6+ declare (strict_types=1 );
7+
68namespace Magento \SendFriend \Block ;
79
10+ use Magento \Customer \Api \AccountManagementInterface ;
11+ use Magento \Customer \Model \Session ;
12+ use Magento \Framework \ObjectManagerInterface ;
13+ use Magento \Framework \View \LayoutInterface ;
814use Magento \TestFramework \Helper \Bootstrap ;
15+ use Magento \TestFramework \Helper \Xpath ;
16+ use PHPUnit \Framework \TestCase ;
917
10- class SendTest extends \PHPUnit \Framework \TestCase
18+ /**
19+ * Class checks send friend email block
20+ *
21+ * @see \Magento\SendFriend\Block\Send
22+ *
23+ * @magentoAppArea frontend
24+ */
25+ class SendTest extends TestCase
1126{
27+ /** @var array */
28+ private $ elementsXpath = [
29+ 'sender name field ' => "//input[@name='sender[name]'] " ,
30+ 'sender email field ' => "//input[@name='sender[email]'] " ,
31+ 'sender message field ' => "//textarea[@name='sender[message]'] " ,
32+ 'recipient name field ' => "//input[contains(@name, 'recipients[name]')] " ,
33+ 'recipient email field ' => "//input[contains(@name, 'recipients[email]')] " ,
34+ 'submit button ' => "//button[@type='submit']/span[contains(text(), 'Send Email')] " ,
35+ 'notice massage ' => "//div[@id='max-recipient-message'] "
36+ . "/span[contains(text(), 'Maximum 1 email addresses allowed.')] "
37+ ];
38+
39+ /** @var ObjectManagerInterface */
40+ private $ objectManager ;
41+
42+ /** @var LayoutInterface */
43+ private $ layout ;
44+
45+ /** @var Send */
46+ private $ block ;
47+
48+ /** @var Session */
49+ private $ session ;
50+
51+ /** @var AccountManagementInterface */
52+ private $ accountManagement ;
53+
1254 /**
13- * @var \Magento\SendFriend\Block\Send
55+ * @inheritdoc
1456 */
15- protected $ _block ;
16-
1757 protected function setUp ()
1858 {
19- $ this ->_block = Bootstrap::getObjectManager ()->create (\Magento \SendFriend \Block \Send::class);
59+ $ this ->objectManager = Bootstrap::getObjectManager ();
60+ $ this ->layout = $ this ->objectManager ->get (LayoutInterface::class);
61+ $ this ->block = $ this ->layout ->createBlock (Send::class);
62+ $ this ->session = $ this ->objectManager ->get (Session::class);
63+ $ this ->accountManagement = $ this ->objectManager ->get (AccountManagementInterface::class);
64+ }
65+
66+ /**
67+ * @inheritdoc
68+ */
69+ protected function tearDown ()
70+ {
71+ parent ::tearDown ();
72+
73+ $ this ->session ->logout ();
2074 }
2175
2276 /**
77+ * @dataProvider formDataProvider
78+ *
2379 * @param string $field
2480 * @param string $value
25- * @dataProvider formDataProvider
26- * @covers \Magento\SendFriend\Block\Send::getUserName
27- * @covers \Magento\SendFriend\Block\Send::getEmail
81+ * @return void
2882 */
29- public function testGetCustomerFieldFromFormData ($ field , $ value )
83+ public function testGetCustomerFieldFromFormData (string $ field , string $ value ): void
3084 {
3185 $ formData = ['sender ' => [$ field => $ value ]];
32- $ this ->_block ->setFormData ($ formData );
86+ $ this ->block ->setFormData ($ formData );
3387 $ this ->assertEquals (trim ($ value ), $ this ->_callBlockMethod ($ field ));
3488 }
3589
3690 /**
3791 * @return array
3892 */
39- public function formDataProvider ()
93+ public function formDataProvider (): array
4094 {
4195 return [
4296 ['name ' , 'Customer Form Name ' ],
@@ -45,49 +99,65 @@ public function formDataProvider()
4599 }
46100
47101 /**
102+ * @magentoDataFixture Magento/Customer/_files/customer.php
103+ *
104+ * @dataProvider customerSessionDataProvider
105+ *
106+ * @magentoAppIsolation enabled
107+ *
48108 * @param string $field
49109 * @param string $value
50- * @dataProvider customerSessionDataProvider
51- * @covers \Magento\SendFriend\Block\Send::getUserName
52- * @covers \Magento\SendFriend\Block\Send::getEmail
53- * @magentoDataFixture Magento/Customer/_files/customer.php
110+ * @return void
54111 */
55- public function testGetCustomerFieldFromSession ($ field , $ value )
112+ public function testGetCustomerFieldFromSession (string $ field , string $ value ): void
56113 {
57- $ logger = $ this ->createMock (\Psr \Log \LoggerInterface::class);
58- /** @var $session \Magento\Customer\Model\Session */
59- $ session = Bootstrap::getObjectManager ()->create (\Magento \Customer \Model \Session::class, [$ logger ]);
60- /** @var \Magento\Customer\Api\AccountManagementInterface $service */
61- $ service = Bootstrap::getObjectManager ()->create (\Magento \Customer \Api \AccountManagementInterface::class);
62- $ customer = $ service ->authenticate ('customer@example.com ' , 'password ' );
63- $ session ->setCustomerDataAsLoggedIn ($ customer );
114+ $ customer = $ this ->accountManagement ->authenticate ('customer@example.com ' , 'password ' );
115+ $ this ->session ->setCustomerDataAsLoggedIn ($ customer );
64116 $ this ->assertEquals ($ value , $ this ->_callBlockMethod ($ field ));
65117 }
66118
67119 /**
68120 * @return array
69121 */
70- public function customerSessionDataProvider ()
122+ public function customerSessionDataProvider (): array
71123 {
72124 return [
73125 ['name ' , 'John Smith ' ],
74126 ['email ' , 'customer@example.com ' ]
75127 ];
76128 }
77129
130+ /**
131+ * @magentoConfigFixture current_store sendfriend/email/max_recipients 1
132+ *
133+ * @return void
134+ */
135+ public function testBlockAppearance (): void
136+ {
137+ $ this ->block ->setTemplate ('Magento_SendFriend::send.phtml ' );
138+ $ html = preg_replace ('#<script(.*?)>#i ' , '' , $ this ->block ->toHtml ());
139+ foreach ($ this ->elementsXpath as $ key => $ xpath ) {
140+ $ this ->assertEquals (
141+ 1 ,
142+ Xpath::getElementsCountForXpath ($ xpath , $ html ),
143+ sprintf ('The %s field is not found on the page ' , $ key )
144+ );
145+ }
146+ }
147+
78148 /**
79149 * Call block method based on form field
80150 *
81151 * @param string $field
82152 * @return null|string
83153 */
84- protected function _callBlockMethod ($ field )
154+ protected function _callBlockMethod (string $ field ): ? string
85155 {
86156 switch ($ field ) {
87157 case 'name ' :
88- return $ this ->_block ->getUserName ();
158+ return $ this ->block ->getUserName ();
89159 case 'email ' :
90- return $ this ->_block ->getEmail ();
160+ return $ this ->block ->getEmail ();
91161 default :
92162 return null ;
93163 }
0 commit comments