diff --git a/lib/Entities/NewsletterEntity.php b/lib/Entities/NewsletterEntity.php index c346a32269..8b2d17e729 100644 --- a/lib/Entities/NewsletterEntity.php +++ b/lib/Entities/NewsletterEntity.php @@ -63,13 +63,13 @@ class NewsletterEntity { * @ORM\Column(type="string") * @var string */ - private $sender_address; + private $sender_address = ''; /** * @ORM\Column(type="string") * @var string */ - private $sender_name; + private $sender_name = ''; /** * @ORM\Column(type="string") @@ -81,19 +81,19 @@ class NewsletterEntity { * @ORM\Column(type="string") * @var string */ - private $reply_to_address; + private $reply_to_address = ''; /** * @ORM\Column(type="string") * @var string */ - private $reply_to_name; + private $reply_to_name = ''; /** * @ORM\Column(type="string") * @var string */ - private $preheader; + private $preheader = ''; /** * @ORM\Column(type="json") diff --git a/lib/WooCommerce/TransactionalEmails.php b/lib/WooCommerce/TransactionalEmails.php index 6f379d6498..4e4975b54a 100644 --- a/lib/WooCommerce/TransactionalEmails.php +++ b/lib/WooCommerce/TransactionalEmails.php @@ -2,7 +2,9 @@ namespace MailPoet\WooCommerce; +use MailPoet\Entities\NewsletterEntity; use MailPoet\Models\Newsletter; +use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Settings\SettingsController; use MailPoet\WooCommerce\TransactionalEmails\Renderer; use MailPoet\WooCommerce\TransactionalEmails\Template; @@ -26,11 +28,15 @@ class TransactionalEmails { /** @var array */ private $email_headings; - function __construct(WPFunctions $wp, SettingsController $settings, Template $template, Renderer $renderer) { + /** @var NewslettersRepository */ + private $newsletters_repository; + + function __construct(WPFunctions $wp, SettingsController $settings, Template $template, Renderer $renderer, NewslettersRepository $newsletters_repository) { $this->wp = $wp; $this->settings = $settings; $this->template = $template; $this->renderer = $renderer; + $this->newsletters_repository = $newsletters_repository; $this->email_headings = [ 'new_account' => [ 'option_name' => 'woocommerce_new_order_settings', @@ -94,12 +100,12 @@ class TransactionalEmails { private function createNewsletter() { $wc_email_settings = $this->getWCEmailSettings(); - return Newsletter::createOrUpdate([ - 'type' => Newsletter::TYPE_WC_TRANSACTIONAL_EMAIL, - 'subject' => 'WooCommerce Transactional Email', - 'preheader' => '', - 'body' => json_encode($this->template->create($wc_email_settings)), - ]); + $newsletter = new NewsletterEntity; + $newsletter->setType(NewsletterEntity::TYPE_WC_TRANSACTIONAL_EMAIL); + $newsletter->setSubject('WooCommerce Transactional Email'); + $newsletter->setBody(json_encode($this->template->create($wc_email_settings))); + $this->newsletters_repository->persist($newsletter); + $this->newsletters_repository->flush(); } private function getNewsletter() { diff --git a/tests/integration/WooCommerce/TransactionalEmailsTest.php b/tests/integration/WooCommerce/TransactionalEmailsTest.php index bd1d5b8417..cdd1a102a0 100644 --- a/tests/integration/WooCommerce/TransactionalEmailsTest.php +++ b/tests/integration/WooCommerce/TransactionalEmailsTest.php @@ -3,8 +3,10 @@ namespace MailPoet\WooCommerce; use Codeception\Stub; +use MailPoet\DI\ContainerWrapper; use MailPoet\Models\Newsletter; use MailPoet\Newsletter\Editor\LayoutHelper as L; +use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Settings\SettingsController; use MailPoet\WooCommerce\TransactionalEmails\Renderer; use MailPoet\WooCommerce\TransactionalEmails\Template; @@ -28,7 +30,13 @@ class TransactionalEmailsTest extends \MailPoetTest { $this->wp = new WPFunctions(); $this->settings = SettingsController::getInstance(); $this->original_wc_settings = $this->settings->get('woocommerce'); - $this->transactional_emails = new TransactionalEmails($this->wp, $this->settings, new Template, new Renderer); + $this->transactional_emails = new TransactionalEmails( + $this->wp, + $this->settings, + ContainerWrapper::getInstance()->get(Template::class), + ContainerWrapper::getInstance()->get(Renderer::class), + ContainerWrapper::getInstance()->get(NewslettersRepository::class) + ); } function testInitCreatesTransactionalEmailAndSavesItsId() { @@ -53,7 +61,13 @@ class TransactionalEmailsTest extends \MailPoetTest { return 'my-awesome-image-url'; } }]); - $transactional_emails = new TransactionalEmails($wp, $this->settings, new Template, new Renderer); + $transactional_emails = new TransactionalEmails( + $wp, + $this->settings, + ContainerWrapper::getInstance()->get(Template::class), + ContainerWrapper::getInstance()->get(Renderer::class), + ContainerWrapper::getInstance()->get(NewslettersRepository::class) + ); $transactional_emails->init(); $email = Newsletter::where('type', Newsletter::TYPE_WC_TRANSACTIONAL_EMAIL)->findOne(); expect($email)->notEmpty(); @@ -104,7 +118,13 @@ class TransactionalEmailsTest extends \MailPoetTest { }, ]); - $transactional_emails = new TransactionalEmails($wp, $this->settings, new Template, $renderer); + $transactional_emails = new TransactionalEmails( + $wp, + $this->settings, + ContainerWrapper::getInstance()->get(Template::class), + $renderer, + ContainerWrapper::getInstance()->get(NewslettersRepository::class) + ); $transactional_emails->useTemplateForWoocommerceEmails(); expect($added_actions)->count(1); expect($added_actions['woocommerce_init'])->isCallable(); diff --git a/tests/unit/WooCommerce/TransactionalEmailsTest.php b/tests/unit/WooCommerce/TransactionalEmailsTest.php index ef086a1432..68280a271a 100644 --- a/tests/unit/WooCommerce/TransactionalEmailsTest.php +++ b/tests/unit/WooCommerce/TransactionalEmailsTest.php @@ -3,6 +3,7 @@ namespace MailPoet\WooCommerce; use Codeception\Stub; +use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Settings\SettingsController; use MailPoet\WooCommerce\TransactionalEmails\Renderer; use MailPoet\WooCommerce\TransactionalEmails\Template; @@ -36,7 +37,8 @@ class TransactionalEmailsTest extends \MailPoetUnitTest { $settings = Stub::make(SettingsController::class); $template = Stub::make(Template::class); $renderer = Stub::make(Renderer::class); - $transactional_emails = new TransactionalEmails($wp, $settings, $template, $renderer); + $newsletters_repository = Stub::make(NewslettersRepository::class); + $transactional_emails = new TransactionalEmails($wp, $settings, $template, $renderer, $newsletters_repository); expect($transactional_emails->getEmailHeadings())->equals([ 'new_account' => 'Test: New Order: #0001', 'processing_order' => 'Thank you for your order',