Skip to content

Commit f582c75

Browse files
author
Roman Lytvynenko
committed
MC-21481: TransportBuilder doesn't add "to" email-addresses, if given in array
1 parent be5455a commit f582c75

File tree

4 files changed

+114
-6
lines changed

4 files changed

+114
-6
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,12 @@ public function getSentMessage()
3838
* Return transport mock.
3939
*
4040
* @return \Magento\TestFramework\Mail\TransportInterfaceMock
41+
* @throws \Magento\Framework\Exception\LocalizedException
4142
*/
4243
public function getTransport()
4344
{
4445
$this->prepareMessage();
4546
$this->reset();
46-
return new \Magento\TestFramework\Mail\TransportInterfaceMock();
47+
return new \Magento\TestFramework\Mail\TransportInterfaceMock($this->message);
4748
}
4849
}

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@
88

99
class TransportInterfaceMock implements \Magento\Framework\Mail\TransportInterface
1010
{
11+
private $message;
12+
13+
public function __construct($message = '')
14+
{
15+
$this->message = $message;
16+
}
17+
1118
/**
1219
* Mock of send a mail using transport
1320
*
@@ -21,10 +28,10 @@ public function sendMessage()
2128
/**
2229
* Get message
2330
*
24-
* @return string
31+
* @return mixed
2532
*/
2633
public function getMessage()
2734
{
28-
return '';
35+
return $this->message;
2936
}
3037
}

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+
}

0 commit comments

Comments
 (0)