Skip to content

Commit 31c17dc

Browse files
committed
Merge remote-tracking branch 'magento-tango/MC-21481' into MPI-PR
2 parents 58b9030 + c798126 commit 31c17dc

File tree

5 files changed

+133
-6
lines changed

5 files changed

+133
-6
lines changed

dev/tests/integration/framework/Magento/TestFramework/Mail/Template/TransportBuilderMock.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
namespace Magento\TestFramework\Mail\Template;
88

9+
/**
10+
* Class TransportBuilderMock
11+
*/
912
class TransportBuilderMock extends \Magento\Framework\Mail\Template\TransportBuilder
1013
{
1114
/**
@@ -38,11 +41,12 @@ public function getSentMessage()
3841
* Return transport mock.
3942
*
4043
* @return \Magento\TestFramework\Mail\TransportInterfaceMock
44+
* @throws \Magento\Framework\Exception\LocalizedException
4145
*/
4246
public function getTransport()
4347
{
4448
$this->prepareMessage();
4549
$this->reset();
46-
return new \Magento\TestFramework\Mail\TransportInterfaceMock();
50+
return new \Magento\TestFramework\Mail\TransportInterfaceMock($this->message);
4751
}
4852
}

dev/tests/integration/framework/Magento/TestFramework/Mail/TransportInterfaceMock.php

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,46 @@
66

77
namespace Magento\TestFramework\Mail;
88

9+
use Magento\Framework\Mail\EmailMessageInterface;
10+
11+
/**
12+
* Class TransportInterfaceMock
13+
*/
914
class TransportInterfaceMock implements \Magento\Framework\Mail\TransportInterface
1015
{
16+
/**
17+
* @var null|EmailMessageInterface
18+
*/
19+
private $message;
20+
21+
/**
22+
* TransportInterfaceMock constructor.
23+
*
24+
* @param null|EmailMessageInterface $message
25+
*/
26+
public function __construct($message = null)
27+
{
28+
$this->message = $message;
29+
}
30+
1131
/**
1232
* Mock of send a mail using transport
1333
*
1434
* @return void
1535
*/
1636
public function sendMessage()
1737
{
38+
//phpcs:ignore Squiz.PHP.NonExecutableCode.ReturnNotRequired
1839
return;
1940
}
2041

2142
/**
2243
* Get message
2344
*
24-
* @return string
45+
* @return null|EmailMessageInterface
2546
*/
2647
public function getMessage()
2748
{
28-
return '';
49+
return $this->message;
2950
}
3051
}

dev/tests/integration/testsuite/Magento/Email/Model/_files/email_template.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
$template->setOptions(['area' => 'test area', 'store' => 1]);
1111
$template->setData(
1212
[
13-
'template_text' =>
14-
file_get_contents(__DIR__ . '/template_fixture.html'),
15-
'template_code' => \Magento\Theme\Model\Config\ValidatorTest::TEMPLATE_CODE
13+
'template_text' => file_get_contents(__DIR__ . '/template_fixture.html'),
14+
'template_code' => \Magento\Theme\Model\Config\ValidatorTest::TEMPLATE_CODE,
15+
'template_type' => \Magento\Email\Model\Template::TYPE_TEXT
1616
]
1717
);
1818
$template->save();
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Framework\Mail;
9+
10+
use Magento\Email\Model\BackendTemplate;
11+
use Magento\Email\Model\Template;
12+
use Magento\Framework\Mail\Template\TransportBuilder;
13+
use Magento\Framework\ObjectManagerInterface;
14+
use Magento\TestFramework\Helper\Bootstrap;
15+
use PHPUnit\Framework\TestCase;
16+
17+
/**
18+
* Class EmailMessageTest
19+
*/
20+
class TransportBuilderTest extends TestCase
21+
{
22+
/**
23+
* @var ObjectManagerInterface
24+
*/
25+
private $di;
26+
27+
/**
28+
* @var TransportBuilder
29+
*/
30+
protected $builder;
31+
32+
/**
33+
* @var Template
34+
*/
35+
protected $template;
36+
37+
protected function setUp()
38+
{
39+
$this->di = Bootstrap::getObjectManager();
40+
$this->builder = $this->di->get(TransportBuilder::class);
41+
$this->template = $this->di->get(Template::class);
42+
}
43+
44+
/**
45+
* @magentoDataFixture Magento/Email/Model/_files/email_template.php
46+
* @magentoDbIsolation enabled
47+
*
48+
* @param string|array $email
49+
* @dataProvider emailDataProvider
50+
* @throws \Magento\Framework\Exception\LocalizedException
51+
*/
52+
public function testAddToEmail($email)
53+
{
54+
$templateId = $this->template->load('email_exception_fixture', 'template_code')->getId();
55+
56+
$this->builder->setTemplateModel(BackendTemplate::class);
57+
58+
$vars = ['reason' => 'Reason', 'customer' => 'Customer'];
59+
$options = ['area' => 'frontend', 'store' => 1];
60+
$this->builder->setTemplateIdentifier($templateId)->setTemplateVars($vars)->setTemplateOptions($options);
61+
62+
$this->builder->addTo($email);
63+
64+
/** @var EmailMessage $emailMessage */
65+
$emailMessage = $this->builder->getTransport();
66+
67+
$addresses = $emailMessage->getMessage()->getTo();
68+
69+
$emails = [];
70+
/** @var Address $toAddress */
71+
foreach ($addresses as $address) {
72+
$emails[] = $address->getEmail();
73+
}
74+
75+
if (is_string($email)) {
76+
$this->assertCount(1, $emails);
77+
$this->assertEquals($email, $emails[0]);
78+
} else {
79+
$this->assertEquals($email, $emails);
80+
}
81+
}
82+
83+
/**
84+
* @return array
85+
*/
86+
public function emailDataProvider(): array
87+
{
88+
return [
89+
[
90+
'billy.everything@someserver.com',
91+
],
92+
[
93+
[
94+
'billy.everything@someserver.com',
95+
'john.doe@someserver.com',
96+
]
97+
]
98+
];
99+
}
100+
}

lib/internal/Magento/Framework/Mail/Template/TransportBuilder.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,8 @@ private function addAddressByType(string $addressType, $email, ?string $name = n
432432
$this->messageData[$addressType],
433433
$convertedAddressArray
434434
);
435+
} else {
436+
$this->messageData[$addressType] = $convertedAddressArray;
435437
}
436438
}
437439
}

0 commit comments

Comments
 (0)