Use Doctrine to create the newsletter

[MAILPOET-2286]
This commit is contained in:
Amine Ben hammou
2019-11-26 22:13:51 +01:00
committed by Jack Kitterhing
parent a178b5d1e8
commit a5dc30c4b6
4 changed files with 44 additions and 16 deletions

View File

@@ -63,13 +63,13 @@ class NewsletterEntity {
* @ORM\Column(type="string") * @ORM\Column(type="string")
* @var string * @var string
*/ */
private $sender_address; private $sender_address = '';
/** /**
* @ORM\Column(type="string") * @ORM\Column(type="string")
* @var string * @var string
*/ */
private $sender_name; private $sender_name = '';
/** /**
* @ORM\Column(type="string") * @ORM\Column(type="string")
@@ -81,19 +81,19 @@ class NewsletterEntity {
* @ORM\Column(type="string") * @ORM\Column(type="string")
* @var string * @var string
*/ */
private $reply_to_address; private $reply_to_address = '';
/** /**
* @ORM\Column(type="string") * @ORM\Column(type="string")
* @var string * @var string
*/ */
private $reply_to_name; private $reply_to_name = '';
/** /**
* @ORM\Column(type="string") * @ORM\Column(type="string")
* @var string * @var string
*/ */
private $preheader; private $preheader = '';
/** /**
* @ORM\Column(type="json") * @ORM\Column(type="json")

View File

@@ -2,7 +2,9 @@
namespace MailPoet\WooCommerce; namespace MailPoet\WooCommerce;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\WooCommerce\TransactionalEmails\Renderer; use MailPoet\WooCommerce\TransactionalEmails\Renderer;
use MailPoet\WooCommerce\TransactionalEmails\Template; use MailPoet\WooCommerce\TransactionalEmails\Template;
@@ -26,11 +28,15 @@ class TransactionalEmails {
/** @var array */ /** @var array */
private $email_headings; 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->wp = $wp;
$this->settings = $settings; $this->settings = $settings;
$this->template = $template; $this->template = $template;
$this->renderer = $renderer; $this->renderer = $renderer;
$this->newsletters_repository = $newsletters_repository;
$this->email_headings = [ $this->email_headings = [
'new_account' => [ 'new_account' => [
'option_name' => 'woocommerce_new_order_settings', 'option_name' => 'woocommerce_new_order_settings',
@@ -94,12 +100,12 @@ class TransactionalEmails {
private function createNewsletter() { private function createNewsletter() {
$wc_email_settings = $this->getWCEmailSettings(); $wc_email_settings = $this->getWCEmailSettings();
return Newsletter::createOrUpdate([ $newsletter = new NewsletterEntity;
'type' => Newsletter::TYPE_WC_TRANSACTIONAL_EMAIL, $newsletter->setType(NewsletterEntity::TYPE_WC_TRANSACTIONAL_EMAIL);
'subject' => 'WooCommerce Transactional Email', $newsletter->setSubject('WooCommerce Transactional Email');
'preheader' => '', $newsletter->setBody(json_encode($this->template->create($wc_email_settings)));
'body' => json_encode($this->template->create($wc_email_settings)), $this->newsletters_repository->persist($newsletter);
]); $this->newsletters_repository->flush();
} }
private function getNewsletter() { private function getNewsletter() {

View File

@@ -3,8 +3,10 @@
namespace MailPoet\WooCommerce; namespace MailPoet\WooCommerce;
use Codeception\Stub; use Codeception\Stub;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Newsletter\Editor\LayoutHelper as L; use MailPoet\Newsletter\Editor\LayoutHelper as L;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\WooCommerce\TransactionalEmails\Renderer; use MailPoet\WooCommerce\TransactionalEmails\Renderer;
use MailPoet\WooCommerce\TransactionalEmails\Template; use MailPoet\WooCommerce\TransactionalEmails\Template;
@@ -28,7 +30,13 @@ class TransactionalEmailsTest extends \MailPoetTest {
$this->wp = new WPFunctions(); $this->wp = new WPFunctions();
$this->settings = SettingsController::getInstance(); $this->settings = SettingsController::getInstance();
$this->original_wc_settings = $this->settings->get('woocommerce'); $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() { function testInitCreatesTransactionalEmailAndSavesItsId() {
@@ -53,7 +61,13 @@ class TransactionalEmailsTest extends \MailPoetTest {
return 'my-awesome-image-url'; 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(); $transactional_emails->init();
$email = Newsletter::where('type', Newsletter::TYPE_WC_TRANSACTIONAL_EMAIL)->findOne(); $email = Newsletter::where('type', Newsletter::TYPE_WC_TRANSACTIONAL_EMAIL)->findOne();
expect($email)->notEmpty(); 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(); $transactional_emails->useTemplateForWoocommerceEmails();
expect($added_actions)->count(1); expect($added_actions)->count(1);
expect($added_actions['woocommerce_init'])->isCallable(); expect($added_actions['woocommerce_init'])->isCallable();

View File

@@ -3,6 +3,7 @@
namespace MailPoet\WooCommerce; namespace MailPoet\WooCommerce;
use Codeception\Stub; use Codeception\Stub;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\WooCommerce\TransactionalEmails\Renderer; use MailPoet\WooCommerce\TransactionalEmails\Renderer;
use MailPoet\WooCommerce\TransactionalEmails\Template; use MailPoet\WooCommerce\TransactionalEmails\Template;
@@ -36,7 +37,8 @@ class TransactionalEmailsTest extends \MailPoetUnitTest {
$settings = Stub::make(SettingsController::class); $settings = Stub::make(SettingsController::class);
$template = Stub::make(Template::class); $template = Stub::make(Template::class);
$renderer = Stub::make(Renderer::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([ expect($transactional_emails->getEmailHeadings())->equals([
'new_account' => 'Test: New Order: #0001', 'new_account' => 'Test: New Order: #0001',
'processing_order' => 'Thank you for your order', 'processing_order' => 'Thank you for your order',