114 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace Magento\Sales\Model;
 | 
						|
 | 
						|
use Magento\Framework\ObjectManagerInterface;
 | 
						|
use Magento\Sales\Api\Data\InvoiceInterface;
 | 
						|
use Magento\Sales\Api\Data\InvoiceSearchResultInterface;
 | 
						|
use Magento\Sales\Model\Order\Email\Container\InvoiceIdentity;
 | 
						|
use Magento\Sales\Model\Order\Email\Sender\InvoiceSender;
 | 
						|
use Magento\Sales\Model\Spi\InvoiceResourceInterface;
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
use Magento\TestFramework\Mail\Template\TransportBuilderMock;
 | 
						|
use PHPUnit\Framework\TestCase;
 | 
						|
 | 
						|
/**
 | 
						|
 * Checks sending emails to customers after creation/modification of invoice.
 | 
						|
 *
 | 
						|
 * @see \Magento\Sales\Model\EmailSenderHandler
 | 
						|
 */
 | 
						|
class InvoiceEmailSenderHandlerTest extends TestCase
 | 
						|
{
 | 
						|
    /** @var ObjectManagerInterface */
 | 
						|
    private $objectManager;
 | 
						|
 | 
						|
    /** @var InvoiceSearchResultInterface */
 | 
						|
    private $entityCollection;
 | 
						|
 | 
						|
    /** @var EmailSenderHandler */
 | 
						|
    private $emailSenderHandler;
 | 
						|
 | 
						|
    /** @var InvoiceIdentity */
 | 
						|
    private $invoiceIdentity;
 | 
						|
 | 
						|
    /** @var InvoiceSender */
 | 
						|
    private $invoiceSender;
 | 
						|
 | 
						|
    /** @var InvoiceResourceInterface */
 | 
						|
    private $entityResource;
 | 
						|
 | 
						|
    /** @var TransportBuilderMock */
 | 
						|
    private $transportBuilderMock;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @inheritdoc
 | 
						|
     */
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        parent::setUp();
 | 
						|
        $this->objectManager = Bootstrap::getObjectManager();
 | 
						|
        $this->invoiceIdentity = $this->objectManager->get(InvoiceIdentity::class);
 | 
						|
        $this->invoiceSender = $this->objectManager->get(InvoiceSender::class);
 | 
						|
        $this->entityResource = $this->objectManager->get(InvoiceResourceInterface::class);
 | 
						|
        $this->entityCollection = $this->objectManager->create(InvoiceSearchResultInterface::class);
 | 
						|
        $this->emailSenderHandler = $this->objectManager->create(
 | 
						|
            EmailSenderHandler::class,
 | 
						|
            [
 | 
						|
                'emailSender'       => $this->invoiceSender,
 | 
						|
                'entityResource'    => $this->entityResource,
 | 
						|
                'entityCollection'  => $this->entityCollection,
 | 
						|
                'identityContainer' => $this->invoiceIdentity,
 | 
						|
            ]
 | 
						|
        );
 | 
						|
        $this->transportBuilderMock = $this->objectManager->get(TransportBuilderMock::class);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDbIsolation disabled
 | 
						|
     * @magentoDataFixture Magento/Sales/_files/invoice_list_different_stores.php
 | 
						|
     * @magentoConfigFixture default/sales_email/general/async_sending 1
 | 
						|
     * @magentoConfigFixture fixture_second_store_store sales_email/invoice/enabled 0
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function testInvoiceEmailSenderExecute(): void
 | 
						|
    {
 | 
						|
        $invoiceCollection = clone $this->entityCollection;
 | 
						|
        $invoiceCollection->addFieldToFilter('send_email', ['eq' => 1]);
 | 
						|
        $invoiceCollection->addFieldToFilter(InvoiceInterface::EMAIL_SENT, ['null' => true]);
 | 
						|
        $this->emailSenderHandler->sendEmails();
 | 
						|
        $this->assertEquals(1, $invoiceCollection->getTotalCount());
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDbIsolation disabled
 | 
						|
     * @magentoDataFixture Magento/Sales/_files/invoice_with_send_email_flag.php
 | 
						|
     * @magentoConfigFixture default/sales_email/general/async_sending 1
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function testSendEmailsCheckEmailReceived(): void
 | 
						|
    {
 | 
						|
        $invoiceCollection = clone $this->entityCollection;
 | 
						|
        $this->emailSenderHandler->sendEmails();
 | 
						|
        /** @var InvoiceInterface $invoice */
 | 
						|
        $invoice = $invoiceCollection->getFirstItem();
 | 
						|
        $this->assertNotNull($invoice->getId());
 | 
						|
        $message = $this->transportBuilderMock->getSentMessage();
 | 
						|
        $this->assertNotNull($message, 'The message is expected to be received');
 | 
						|
        $subject = __('Invoice for your %1 order', $invoice->getStore()->getFrontendName())->render();
 | 
						|
        $this->assertEquals($message->getSubject(), $subject);
 | 
						|
        $this->assertStringContainsString(
 | 
						|
            sprintf(
 | 
						|
                "Your Invoice #%s for Order #%s",
 | 
						|
                $invoice->getIncrementId(),
 | 
						|
                $invoice->getOrder()->getIncrementId()
 | 
						|
            ),
 | 
						|
            $message->getBody()->getParts()[0]->getRawContent()
 | 
						|
        );
 | 
						|
    }
 | 
						|
}
 |