From 79ac0195b307ac43c03455d615d960401db5ba1f Mon Sep 17 00:00:00 2001 From: Santiago Date: Thu, 31 May 2018 17:22:24 -0300 Subject: [PATCH 1/5] Clearing after sending mail via Mandrill. closes #719 --- .../MailChimp/Model/Email/Template.php | 72 ++++++++++++++--- .../MailChimp/Model/Email/TemplateTest.php | 79 +++++++++++++++++++ 2 files changed, 141 insertions(+), 10 deletions(-) create mode 100644 dev/tests/mailchimp/tests/app/Ebizmarts/MailChimp/Model/Email/TemplateTest.php diff --git a/app/code/community/Ebizmarts/MailChimp/Model/Email/Template.php b/app/code/community/Ebizmarts/MailChimp/Model/Email/Template.php index f281a673a..97b20fb85 100644 --- a/app/code/community/Ebizmarts/MailChimp/Model/Email/Template.php +++ b/app/code/community/Ebizmarts/MailChimp/Model/Email/Template.php @@ -16,16 +16,18 @@ class Ebizmarts_MailChimp_Model_Email_Template extends Ebizmarts_MailChimp_Model /** * @param array|string $email - * @param null $name - * @param array $variables + * @param null $name + * @param array $variables * @return bool + * @throws Exception */ public function send($email, $name = null, array $variables = array()) { $email_config = $this->getDesignConfig(); - $store = (integer) $email_config->getStore(); - if (!Mage::getStoreConfig(Ebizmarts_MailChimp_Model_Config::MANDRILL_ACTIVE, $store)) { - return parent::send($email, $name, $variables); + $storeId = (integer) $email_config->getStore(); + $mandrillHelper = $this->makeMandrillHelper(); + if (!$mandrillHelper->isMandrillEnabled($storeId)) { + return $this->parentSend($email, $name, $variables); } if (!$this->isValidForSend()) { @@ -50,7 +52,7 @@ public function send($email, $name = null, array $variables = array()) $subject = $this->getProcessedTemplateSubject($variables); $email = array('subject' => $subject, 'to' => array()); - $setReturnPath = Mage::getStoreConfig(self::XML_PATH_SENDING_SET_RETURN_PATH); + $setReturnPath = $this->getSendingReturnPath(); switch ($setReturnPath) { case 1: $returnPathEmail = $this->getSenderEmail(); @@ -88,7 +90,7 @@ public function send($email, $name = null, array $variables = array()) $email['from_name'] = $this->getSenderName(); $email['from_email'] = $this->getSenderEmail(); - $mandrillSenders = $mail->senders->domains(); + $mandrillSenders = $this->getSendersDomains($mail); $senderExists = false; foreach ($mandrillSenders as $sender) { @@ -105,7 +107,7 @@ public function send($email, $name = null, array $variables = array()) } $headers = $mail->getHeaders(); - $headers[] = Mage::helper('mailchimp/mandrill')->getUserAgent(); + $headers[] = $mandrillHelper->getUserAgent(); $email['headers'] = $headers; if (isset($variables['tags']) && count($variables['tags'])) { $email ['tags'] = $variables['tags']; @@ -161,8 +163,10 @@ public function send($email, $name = null, array $variables = array()) } try { - $result = $mail->messages->send($email); + $result = $this->sendMail($email, $mail); + $this->_mail = null; } catch (Exception $e) { + $this->_mail = null; Mage::logException($e); return false; } @@ -172,7 +176,9 @@ public function send($email, $name = null, array $variables = array()) } /** - * @return Mandrill_Message|Zend_Mail + * @return Mandrill_Message|null|Zend_Mail + * @throws Mage_Core_Model_Store_Exception + * @throws Mandrill_Error */ public function getMail() { @@ -190,4 +196,50 @@ public function getMail() return $this->_mail; } } + + /** + * @return Ebizmarts_MailChimp_Helper_Mandrill + */ + protected function makeMandrillHelper() + { + return Mage::helper('mailchimp/mandrill'); + } + + /** + * @param $email + * @param $name + * @param array $variables + * @return bool + */ + protected function parentSend($email, $name, array $variables) + { + return parent::send($email, $name, $variables); + } + + /** + * @return mixed + */ + protected function getSendingReturnPath() + { + return Mage::getStoreConfig(self::XML_PATH_SENDING_SET_RETURN_PATH); + } + + /** + * @param $mail + * @return mixed + */ + protected function getSendersDomains($mail) + { + return $mail->senders->domains(); + } + + /** + * @param $email + * @param $mail + * @return mixed + */ + protected function sendMail($email, $mail) + { + return $mail->messages->send($email); + } } diff --git a/dev/tests/mailchimp/tests/app/Ebizmarts/MailChimp/Model/Email/TemplateTest.php b/dev/tests/mailchimp/tests/app/Ebizmarts/MailChimp/Model/Email/TemplateTest.php new file mode 100644 index 000000000..e2ad6d19d --- /dev/null +++ b/dev/tests/mailchimp/tests/app/Ebizmarts/MailChimp/Model/Email/TemplateTest.php @@ -0,0 +1,79 @@ + $email, 'name' => $name); + $message = 'message'; + $subject = 'subject'; + $returnPath = 1; + $senderEmail = 'sender@email.com'; + $bcc = array('bcc@email.com'); + $emailArray = array ('subject' => 'subject', 'to' => array(array('email' => $email, 'name' => $name), array('email' => 'bcc@email.com', 'type' => 'bcc')), 'from_name' => 'name', + 'from_email' => $senderEmail, 'headers' => array('Ebizmarts_Mandrill1.1.12/MageCE1.9.3.7'), 'tags' => array('default_tag'), 'text' => 'message'); + $mandrillSenders = array(array('domain' => 'email.com')); + + /** + * @var \Ebizmarts_MailChimp_Model_Email_Template $templateMock + */ + $templateMock = $this->getMockBuilder(Ebizmarts_MailChimp_Model_Email_Template::class) + ->disableOriginalConstructor() + ->setMethods(array('getDesignConfig', 'isValidForSend', 'setUseAbsoluteLinks', 'getProcessedTemplate', + 'getProcessedTemplateSubject', 'getSenderEmail', 'getMail', 'getSenderName', 'isPlain', 'makeMandrillHelper', + 'hasQueue', 'getQueue', 'makeHelper', 'getSendingReturnPath', 'getSendersDomains', 'sendMail')) + ->getMock(); + + $varienObjectMock = $this->getMockBuilder(Varien_Object::class) + ->disableOriginalConstructor() + ->setMethods(array('getStore')) + ->getMock(); + + $mandrillHelperMock = $this->getMockBuilder(Ebizmarts_MailChimp_Helper_Mandrill::class) + ->disableOriginalConstructor() + ->setMethods(array('isMandrillEnabled')) + ->getMock(); + + $mailObjectMock = $this->getMockBuilder(Mandrill_Message::class) + ->disableOriginalConstructor() + ->setMethods(array()) + ->getMock(); + + $templateMock->expects($this->once())->method('getDesignConfig')->willReturn($varienObjectMock); + + $varienObjectMock->expects($this->once())->method('getStore')->willReturn($storeId); + + $templateMock->expects($this->once())->method('makeMandrillHelper')->willReturn($mandrillHelperMock); + + $mandrillHelperMock->expects($this->once())->method('isMandrillEnabled')->with($storeId)->willReturn($enabled); + + $templateMock->expects($this->once())->method('isValidForSend')->willReturn(true); + $templateMock->expects($this->once())->method('setUseAbsoluteLinks')->willReturn(true); + $templateMock->expects($this->once())->method('getProcessedTemplate')->with($variables, true)->willReturn($message); + $templateMock->expects($this->once())->method('getProcessedTemplateSubject')->with($variables)->willReturn($subject); + $templateMock->expects($this->once())->method('getSendingReturnPath')->willReturn($returnPath); + $templateMock->expects($this->exactly(2))->method('getSenderEmail')->willReturnOnConsecutiveCalls($senderEmail, $senderEmail); + $templateMock->expects($this->once())->method('getMail')->willReturn($mailObjectMock); + + $mailObjectMock->expects($this->once())->method('getBcc')->willReturn($bcc); + + $templateMock->expects($this->once())->method('getSenderName')->willReturn($name); + $templateMock->expects($this->once())->method('getSendersDomains')->with($mailObjectMock)->willReturn($mandrillSenders); + + $templateMock->expects($this->once())->method('isPlain')->willReturn(true); + $templateMock->expects($this->once())->method('hasQueue')->willReturn(true); + $templateMock->expects($this->once())->method('getQueue')->willReturn(true); + $templateMock->expects($this->once())->method('sendMail')->with($emailArray, $mailObjectMock); + + $templateMock->send($email, $name, $variables); + } +} From 82588a624cb2bd71d63bd9e686597cfe674dfb79 Mon Sep 17 00:00:00 2001 From: Santiago Date: Fri, 1 Jun 2018 10:57:42 -0300 Subject: [PATCH 2/5] Fix test. --- .../Ebizmarts/MailChimp/Model/Email/TemplateTest.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/dev/tests/mailchimp/tests/app/Ebizmarts/MailChimp/Model/Email/TemplateTest.php b/dev/tests/mailchimp/tests/app/Ebizmarts/MailChimp/Model/Email/TemplateTest.php index e2ad6d19d..fd858649a 100644 --- a/dev/tests/mailchimp/tests/app/Ebizmarts/MailChimp/Model/Email/TemplateTest.php +++ b/dev/tests/mailchimp/tests/app/Ebizmarts/MailChimp/Model/Email/TemplateTest.php @@ -19,8 +19,9 @@ public function testSend() $returnPath = 1; $senderEmail = 'sender@email.com'; $bcc = array('bcc@email.com'); + $userAgent = 'Ebizmarts_Mandrill1.1.12/MageCE1.9.3.7'; $emailArray = array ('subject' => 'subject', 'to' => array(array('email' => $email, 'name' => $name), array('email' => 'bcc@email.com', 'type' => 'bcc')), 'from_name' => 'name', - 'from_email' => $senderEmail, 'headers' => array('Ebizmarts_Mandrill1.1.12/MageCE1.9.3.7'), 'tags' => array('default_tag'), 'text' => 'message'); + 'from_email' => $senderEmail, 'headers' => array($userAgent), 'tags' => array('default_tag'), 'text' => 'message'); $mandrillSenders = array(array('domain' => 'email.com')); /** @@ -40,12 +41,12 @@ public function testSend() $mandrillHelperMock = $this->getMockBuilder(Ebizmarts_MailChimp_Helper_Mandrill::class) ->disableOriginalConstructor() - ->setMethods(array('isMandrillEnabled')) + ->setMethods(array('isMandrillEnabled', 'getUserAgent')) ->getMock(); $mailObjectMock = $this->getMockBuilder(Mandrill_Message::class) ->disableOriginalConstructor() - ->setMethods(array()) + ->setMethods(array('getBcc', 'getHeaders')) ->getMock(); $templateMock->expects($this->once())->method('getDesignConfig')->willReturn($varienObjectMock); @@ -69,6 +70,10 @@ public function testSend() $templateMock->expects($this->once())->method('getSenderName')->willReturn($name); $templateMock->expects($this->once())->method('getSendersDomains')->with($mailObjectMock)->willReturn($mandrillSenders); + $mailObjectMock->expects($this->once())->method('getHeaders')->willReturn(array()); + + $mandrillHelperMock->expects($this->once())->method('getUserAgent')->willReturn($userAgent); + $templateMock->expects($this->once())->method('isPlain')->willReturn(true); $templateMock->expects($this->once())->method('hasQueue')->willReturn(true); $templateMock->expects($this->once())->method('getQueue')->willReturn(true); From af76ddaf235969e14a076f1f026e68b10a45fa2e Mon Sep 17 00:00:00 2001 From: Santiago Date: Fri, 1 Jun 2018 11:07:38 -0300 Subject: [PATCH 3/5] Refactor code. --- .../MailChimp/Model/Email/Template.php | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/app/code/community/Ebizmarts/MailChimp/Model/Email/Template.php b/app/code/community/Ebizmarts/MailChimp/Model/Email/Template.php index 97b20fb85..0432cc89c 100644 --- a/app/code/community/Ebizmarts/MailChimp/Model/Email/Template.php +++ b/app/code/community/Ebizmarts/MailChimp/Model/Email/Template.php @@ -52,13 +52,13 @@ public function send($email, $name = null, array $variables = array()) $subject = $this->getProcessedTemplateSubject($variables); $email = array('subject' => $subject, 'to' => array()); - $setReturnPath = $this->getSendingReturnPath(); + $setReturnPath = $this->getSendingSetReturnPath(); switch ($setReturnPath) { case 1: $returnPathEmail = $this->getSenderEmail(); break; case 2: - $returnPathEmail = Mage::getStoreConfig(self::XML_PATH_SENDING_RETURN_PATH_EMAIL); + $returnPathEmail = $this->getSendingReturnPathEmail(); break; default: $returnPathEmail = null; @@ -103,7 +103,7 @@ public function send($email, $name = null, array $variables = array()) } if(!$senderExists) { - $email['from_email'] = Mage::getStoreConfig('trans_email/ident_general/email'); + $email['from_email'] = $this->getGeneralEmail(); } $headers = $mail->getHeaders(); @@ -219,7 +219,7 @@ protected function parentSend($email, $name, array $variables) /** * @return mixed */ - protected function getSendingReturnPath() + protected function getSendingSetReturnPath() { return Mage::getStoreConfig(self::XML_PATH_SENDING_SET_RETURN_PATH); } @@ -242,4 +242,20 @@ protected function sendMail($email, $mail) { return $mail->messages->send($email); } + + /** + * @return mixed + */ + protected function getSendingReturnPathEmail() + { + return Mage::getStoreConfig(self::XML_PATH_SENDING_RETURN_PATH_EMAIL); + } + + /** + * @return mixed + */ + protected function getGeneralEmail() + { + return Mage::getStoreConfig('trans_email/ident_general/email'); + } } From ff928312f86d3cfac39fb059233ac124c8b34570 Mon Sep 17 00:00:00 2001 From: Santiago Date: Fri, 1 Jun 2018 11:15:15 -0300 Subject: [PATCH 4/5] Fix test. --- .../app/Ebizmarts/MailChimp/Model/Email/TemplateTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/tests/mailchimp/tests/app/Ebizmarts/MailChimp/Model/Email/TemplateTest.php b/dev/tests/mailchimp/tests/app/Ebizmarts/MailChimp/Model/Email/TemplateTest.php index fd858649a..490546fbb 100644 --- a/dev/tests/mailchimp/tests/app/Ebizmarts/MailChimp/Model/Email/TemplateTest.php +++ b/dev/tests/mailchimp/tests/app/Ebizmarts/MailChimp/Model/Email/TemplateTest.php @@ -31,7 +31,7 @@ public function testSend() ->disableOriginalConstructor() ->setMethods(array('getDesignConfig', 'isValidForSend', 'setUseAbsoluteLinks', 'getProcessedTemplate', 'getProcessedTemplateSubject', 'getSenderEmail', 'getMail', 'getSenderName', 'isPlain', 'makeMandrillHelper', - 'hasQueue', 'getQueue', 'makeHelper', 'getSendingReturnPath', 'getSendersDomains', 'sendMail')) + 'hasQueue', 'getQueue', 'makeHelper', 'getSendingSetReturnPath', 'getSendersDomains', 'sendMail')) ->getMock(); $varienObjectMock = $this->getMockBuilder(Varien_Object::class) @@ -61,7 +61,7 @@ public function testSend() $templateMock->expects($this->once())->method('setUseAbsoluteLinks')->willReturn(true); $templateMock->expects($this->once())->method('getProcessedTemplate')->with($variables, true)->willReturn($message); $templateMock->expects($this->once())->method('getProcessedTemplateSubject')->with($variables)->willReturn($subject); - $templateMock->expects($this->once())->method('getSendingReturnPath')->willReturn($returnPath); + $templateMock->expects($this->once())->method('getSendingSetReturnPath')->willReturn($returnPath); $templateMock->expects($this->exactly(2))->method('getSenderEmail')->willReturnOnConsecutiveCalls($senderEmail, $senderEmail); $templateMock->expects($this->once())->method('getMail')->willReturn($mailObjectMock); From fed5b341019288a0c8fdfea99570bd554b64a199 Mon Sep 17 00:00:00 2001 From: Santiago Date: Fri, 1 Jun 2018 11:53:49 -0300 Subject: [PATCH 5/5] Bump version. --- app/code/community/Ebizmarts/MailChimp/etc/config.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/community/Ebizmarts/MailChimp/etc/config.xml b/app/code/community/Ebizmarts/MailChimp/etc/config.xml index bd56a19c8..ddb196f69 100755 --- a/app/code/community/Ebizmarts/MailChimp/etc/config.xml +++ b/app/code/community/Ebizmarts/MailChimp/etc/config.xml @@ -3,10 +3,10 @@ - 1.1.12 + 1.1.12.1 - 1.1.12 + 1.1.12.1