Skip to content

Commit 066ad89

Browse files
committed
Merge branch 'MC-37493' into 2.4-develop-sidecar-pr3
2 parents 3b213b4 + 4208e84 commit 066ad89

File tree

4 files changed

+220
-142
lines changed

4 files changed

+220
-142
lines changed

dev/tests/integration/testsuite/Magento/Sales/Model/InvoiceEmailSenderHandlerTest.php

Lines changed: 80 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -7,97 +7,107 @@
77

88
namespace Magento\Sales\Model;
99

10-
use Magento\Config\Model\Config;
11-
use Magento\Framework\App\Config\ScopeConfigInterface;
12-
use Magento\Store\Model\ScopeInterface;
10+
use Magento\Framework\ObjectManagerInterface;
11+
use Magento\Sales\Api\Data\InvoiceInterface;
12+
use Magento\Sales\Api\Data\InvoiceSearchResultInterface;
13+
use Magento\Sales\Model\Order\Email\Container\InvoiceIdentity;
14+
use Magento\Sales\Model\Order\Email\Sender\InvoiceSender;
15+
use Magento\Sales\Model\Spi\InvoiceResourceInterface;
16+
use Magento\TestFramework\Helper\Bootstrap;
17+
use Magento\TestFramework\Mail\Template\TransportBuilderMock;
18+
use PHPUnit\Framework\TestCase;
1319

14-
class InvoiceEmailSenderHandlerTest extends \PHPUnit\Framework\TestCase
20+
/**
21+
* Checks sending emails to customers after creation/modification of invoice.
22+
*
23+
* @see \Magento\Sales\Model\EmailSenderHandler
24+
*/
25+
class InvoiceEmailSenderHandlerTest extends TestCase
1526
{
16-
/**
17-
* @var \Magento\Sales\Model\ResourceModel\Order\Invoice\Collection
18-
*/
27+
/** @var ObjectManagerInterface */
28+
private $objectManager;
29+
30+
/** @var InvoiceSearchResultInterface */
1931
private $entityCollection;
2032

33+
/** @var EmailSenderHandler */
34+
private $emailSenderHandler;
35+
36+
/** @var InvoiceIdentity */
37+
private $invoiceIdentity;
38+
39+
/** @var InvoiceSender */
40+
private $invoiceSender;
41+
42+
/** @var InvoiceResourceInterface */
43+
private $entityResource;
44+
45+
/** @var TransportBuilderMock */
46+
private $transportBuilderMock;
47+
2148
/**
22-
* @var \Magento\Sales\Model\EmailSenderHandler
49+
* @inheritdoc
2350
*/
24-
private $emailSender;
25-
2651
protected function setUp(): void
2752
{
28-
/** @var \Magento\Sales\Model\Order\Email\Container\InvoiceIdentity $invoiceIdentity */
29-
$invoiceIdentity = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
30-
\Magento\Sales\Model\Order\Email\Container\InvoiceIdentity::class
31-
);
32-
/** @var \Magento\Sales\Model\Order\Email\Sender\InvoiceSender $invoiceSender */
33-
$invoiceSender = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
34-
->create(
35-
\Magento\Sales\Model\Order\Email\Sender\InvoiceSender::class,
36-
[
37-
'identityContainer' => $invoiceIdentity,
38-
]
39-
);
40-
$entityResource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
41-
->create(\Magento\Sales\Model\ResourceModel\Order\Invoice::class);
42-
$this->entityCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
43-
\Magento\Sales\Model\ResourceModel\Order\Invoice\Collection::class
44-
);
45-
$this->emailSender = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
46-
\Magento\Sales\Model\EmailSenderHandler::class,
53+
parent::setUp();
54+
$this->objectManager = Bootstrap::getObjectManager();
55+
$this->invoiceIdentity = $this->objectManager->get(InvoiceIdentity::class);
56+
$this->invoiceSender = $this->objectManager->get(InvoiceSender::class);
57+
$this->entityResource = $this->objectManager->get(InvoiceResourceInterface::class);
58+
$this->entityCollection = $this->objectManager->create(InvoiceSearchResultInterface::class);
59+
$this->emailSenderHandler = $this->objectManager->create(
60+
EmailSenderHandler::class,
4761
[
48-
'emailSender' => $invoiceSender,
49-
'entityResource' => $entityResource,
62+
'emailSender' => $this->invoiceSender,
63+
'entityResource' => $this->entityResource,
5064
'entityCollection' => $this->entityCollection,
51-
'identityContainer' => $invoiceIdentity,
65+
'identityContainer' => $this->invoiceIdentity,
5266
]
5367
);
68+
$this->transportBuilderMock = $this->objectManager->get(TransportBuilderMock::class);
5469
}
5570

5671
/**
57-
* @magentoAppIsolation enabled
58-
* @magentoDbIsolation disabled
59-
* @magentoDataFixture Magento/Sales/_files/invoice_list_different_stores.php
72+
* @magentoDbIsolation disabled
73+
* @magentoDataFixture Magento/Sales/_files/invoice_list_different_stores.php
74+
* @magentoConfigFixture default/sales_email/general/async_sending 1
75+
* @magentoConfigFixture fixture_second_store_store sales_email/invoice/enabled 0
76+
* @return void
6077
*/
61-
public function testInvoiceEmailSenderExecute()
78+
public function testInvoiceEmailSenderExecute(): void
6279
{
63-
$expectedResult = 1;
64-
65-
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
66-
67-
/** @var Config $defConfig */
68-
$defConfig = $objectManager->create(Config::class);
69-
$defConfig->setScope(ScopeConfigInterface::SCOPE_TYPE_DEFAULT);
70-
$defConfig->setDataByPath('sales_email/general/async_sending', 1);
71-
$defConfig->save();
72-
73-
/** @var Config $storeConfig */
74-
$storeConfig = $objectManager->create(Config::class);
75-
$storeConfig->setScope(ScopeInterface::SCOPE_STORES);
76-
$storeConfig->setStore('fixture_second_store');
77-
$storeConfig->setDataByPath('sales_email/invoice/enabled', 0);
78-
$storeConfig->save();
79-
80-
$sendCollection = clone $this->entityCollection;
81-
$sendCollection->addFieldToFilter('send_email', ['eq' => 1]);
82-
$sendCollection->addFieldToFilter('email_sent', ['null' => true]);
83-
84-
$this->emailSender->sendEmails();
85-
86-
$this->assertCount($expectedResult, $sendCollection->getItems());
80+
$invoiceCollection = clone $this->entityCollection;
81+
$invoiceCollection->addFieldToFilter('send_email', ['eq' => 1]);
82+
$invoiceCollection->addFieldToFilter(InvoiceInterface::EMAIL_SENT, ['null' => true]);
83+
$this->emailSenderHandler->sendEmails();
84+
$this->assertEquals(1, $invoiceCollection->getTotalCount());
8785
}
8886

8987
/**
90-
* @inheritdoc
91-
* @throws \Magento\Framework\Exception\LocalizedException
92-
* @throws \Exception
88+
* @magentoDbIsolation disabled
89+
* @magentoDataFixture Magento/Sales/_files/invoice_with_send_email_flag.php
90+
* @magentoConfigFixture default/sales_email/general/async_sending 1
91+
* @return void
9392
*/
94-
protected function tearDown(): void
93+
public function testSendEmailsCheckEmailReceived(): void
9594
{
96-
/** @var \Magento\Config\Model\Config $defConfig */
97-
$defConfig = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
98-
->create(\Magento\Config\Model\Config::class);
99-
$defConfig->setScope(\Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT);
100-
$defConfig->setDataByPath('sales_email/general/async_sending', 0);
101-
$defConfig->save();
95+
$invoiceCollection = clone $this->entityCollection;
96+
$this->emailSenderHandler->sendEmails();
97+
/** @var InvoiceInterface $invoice */
98+
$invoice = $invoiceCollection->getFirstItem();
99+
$this->assertNotNull($invoice->getId());
100+
$message = $this->transportBuilderMock->getSentMessage();
101+
$this->assertNotNull($message, 'The message is expected to be received');
102+
$subject = __('Invoice for your %1 order', $invoice->getStore()->getFrontendName())->render();
103+
$this->assertEquals($message->getSubject(), $subject);
104+
$this->assertStringContainsString(
105+
sprintf(
106+
"Your Invoice #%s for Order #%s",
107+
$invoice->getIncrementId(),
108+
$invoice->getOrder()->getIncrementId()
109+
),
110+
$message->getBody()->getParts()[0]->getRawContent()
111+
);
102112
}
103113
}

0 commit comments

Comments
 (0)