Skip to content

Commit 284bacd

Browse files
committed
MC-37493: Create automated test for "Create Invoice for Offline Payment Methods with Async Notification"
1 parent 51b53be commit 284bacd

File tree

4 files changed

+219
-140
lines changed

4 files changed

+219
-140
lines changed

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

Lines changed: 77 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -7,97 +7,104 @@
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\Order\Invoice;
16+
use Magento\Sales\Model\Spi\InvoiceResourceInterface;
17+
use Magento\TestFramework\Helper\Bootstrap;
18+
use Magento\TestFramework\Mail\Template\TransportBuilderMock;
19+
use PHPUnit\Framework\TestCase;
1320

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

34+
/** @var EmailSenderHandler */
35+
private $emailSenderHandler;
36+
37+
/** @var InvoiceIdentity */
38+
private $invoiceIdentity;
39+
40+
/** @var InvoiceSender */
41+
private $invoiceSender;
42+
43+
/** @var InvoiceResourceInterface */
44+
private $entityResource;
45+
46+
/** @var TransportBuilderMock */
47+
private $transportBuilderMock;
48+
2149
/**
22-
* @var \Magento\Sales\Model\EmailSenderHandler
50+
* @inheritdoc
2351
*/
24-
private $emailSender;
25-
2652
protected function setUp(): void
2753
{
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,
54+
parent::setUp();
55+
$this->objectManager = Bootstrap::getObjectManager();
56+
$this->invoiceIdentity = $this->objectManager->get(InvoiceIdentity::class);
57+
$this->invoiceSender = $this->objectManager->get(InvoiceSender::class);
58+
$this->entityResource = $this->objectManager->get(InvoiceResourceInterface::class);
59+
$this->entityCollection = $this->objectManager->create(InvoiceSearchResultInterface::class);
60+
$this->emailSenderHandler = $this->objectManager->create(
61+
EmailSenderHandler::class,
4762
[
48-
'emailSender' => $invoiceSender,
49-
'entityResource' => $entityResource,
63+
'emailSender' => $this->invoiceSender,
64+
'entityResource' => $this->entityResource,
5065
'entityCollection' => $this->entityCollection,
51-
'identityContainer' => $invoiceIdentity,
66+
'identityContainer' => $this->invoiceIdentity,
5267
]
5368
);
69+
$this->transportBuilderMock = $this->objectManager->get(TransportBuilderMock::class);
5470
}
5571

5672
/**
57-
* @magentoAppIsolation enabled
58-
* @magentoDbIsolation disabled
59-
* @magentoDataFixture Magento/Sales/_files/invoice_list_different_stores.php
73+
* @magentoDbIsolation disabled
74+
* @magentoDataFixture Magento/Sales/_files/invoice_list_different_stores.php
75+
* @magentoConfigFixture default/sales_email/general/async_sending 1
76+
* @magentoConfigFixture fixture_second_store_store sales_email/invoice/enabled 0
77+
* @return void
6078
*/
61-
public function testInvoiceEmailSenderExecute()
79+
public function testInvoiceEmailSenderExecute(): void
6280
{
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());
81+
$invoiceCollection = clone $this->entityCollection;
82+
$invoiceCollection->addFieldToFilter('send_email', ['eq' => 1]);
83+
$invoiceCollection->addFieldToFilter(InvoiceInterface::EMAIL_SENT, ['null' => true]);
84+
$this->emailSenderHandler->sendEmails();
85+
$this->assertEquals(1, $invoiceCollection->getTotalCount());
8786
}
8887

8988
/**
90-
* @inheritdoc
91-
* @throws \Magento\Framework\Exception\LocalizedException
92-
* @throws \Exception
89+
* @magentoDbIsolation disabled
90+
* @magentoDataFixture Magento/Sales/_files/invoice_in_email_send_queue.php
91+
* @magentoConfigFixture default/sales_email/general/async_sending 1
92+
* @return void
9393
*/
94-
protected function tearDown(): void
94+
public function testSendEmailsCheckEmailReceived(): void
9595
{
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();
96+
$invoiceCollection = clone $this->entityCollection;
97+
$this->emailSenderHandler->sendEmails();
98+
/** @var Invoice $invoice */
99+
$invoice = $invoiceCollection->getFirstItem();
100+
$this->assertNotNull($invoice->getId());
101+
$message = $this->transportBuilderMock->getSentMessage();
102+
$this->assertNotNull($message, 'The message is expected to be received');
103+
$subject = __('Invoice for your %1 order', $invoice->getStore()->getFrontendName())->render();
104+
$this->assertEquals($message->getSubject(), $subject);
105+
$this->assertStringContainsString(
106+
"Your Invoice #{$invoice->getIncrementId()} for Order #{$invoice->getOrder()->getIncrementId()}",
107+
$message->getBody()->getParts()[0]->getRawContent()
108+
);
102109
}
103110
}

0 commit comments

Comments
 (0)