From e370e4b4c8523e18b1c2f2024b9d249e8644fed0 Mon Sep 17 00:00:00 2001 From: MrCasual Date: Thu, 8 Oct 2015 09:33:38 -0400 Subject: [PATCH] - Refactors mailer classes and tests - Updates Newsletter router to send to multiple recipients --- lib/Mailer/API/AmazonSES.php | 29 +++++----- lib/Mailer/API/ElasticEmail.php | 19 ++++--- lib/Mailer/API/MailGun.php | 19 ++++--- lib/Mailer/API/MailPoet.php | 24 ++++----- lib/Mailer/API/Mandrill.php | 31 ++++++----- lib/Mailer/API/SendGrid.php | 19 ++++--- tests/unit/Mailer/API/AmazonSESCest.php | 63 +++++++++++----------- tests/unit/Mailer/API/ElasticEmailCest.php | 51 +++++++----------- tests/unit/Mailer/API/MailGunCest.php | 49 +++++++---------- tests/unit/Mailer/API/MailPoetCest.php | 59 +++++++++----------- tests/unit/Mailer/API/MandrillCest.php | 59 ++++++++------------ tests/unit/Mailer/API/SendGridCest.php | 50 +++++++---------- tests/unit/Mailer/SMTP/SMTPCest.php | 17 +++--- 13 files changed, 212 insertions(+), 277 deletions(-) diff --git a/lib/Mailer/API/AmazonSES.php b/lib/Mailer/API/AmazonSES.php index 026c9ea530..b753f2a316 100644 --- a/lib/Mailer/API/AmazonSES.php +++ b/lib/Mailer/API/AmazonSES.php @@ -20,11 +20,9 @@ class AmazonSES { } function send($newsletter, $subscriber) { - $this->newsletter = $newsletter; - $this->subscriber = $subscriber; $result = wp_remote_post( $this->url, - $this->request() + $this->request($newsletter, $subscriber) ); return ( !is_wp_error($result) === true && @@ -32,37 +30,38 @@ class AmazonSES { ); } - function getBody() { + function getBody($newsletter, $subscriber) { return array( 'Action' => 'SendEmail', 'Version' => '2010-12-01', 'Source' => $this->from, - 'Destination.ToAddresses.member.1' => $this->subscriber, - 'Message.Subject.Data' => $this->newsletter['subject'], - 'Message.Body.Html.Data' => $this->newsletter['body']['html'], - 'Message.Body.Text.Data' => $this->newsletter['body']['text'], + 'Destination.ToAddresses.member.1' => $subscriber, + 'Message.Subject.Data' => $newsletter['subject'], + 'Message.Body.Html.Data' => $newsletter['body']['html'], + 'Message.Body.Text.Data' => $newsletter['body']['text'], 'ReturnPath' => $this->from ); } - function request() { + function request($newsletter, $subscriber) { + $body = $this->getBody($newsletter, $subscriber); return array( 'timeout' => 10, 'httpversion' => '1.1', 'method' => 'POST', 'headers' => array( 'Host' => $this->awsEndpoint, - 'Authorization' => $this->signRequest($this->getBody()), + 'Authorization' => $this->signRequest($body), 'X-Amz-Date' => $this->date ), - 'body' => urldecode(http_build_query($this->getBody())) + 'body' => urldecode(http_build_query($body)) ); } - function signRequest() { + function signRequest($body) { $stringToSign = $this->createStringToSign( $this->getCredentialScope(), - $this->getCanonicalRequest() + $this->getCanonicalRequest($body) ); $signature = hash_hmac($this->hashAlgorithm, $stringToSign, $this->getSigningKey()); @@ -78,7 +77,7 @@ class AmazonSES { return sprintf('%s/%s/%s/%s', $this->dateWithoutTime, $this->awsRegion, $this->awsService, $this->awsTerminationString); } - function getCanonicalRequest() { + function getCanonicalRequest($body) { return implode("\n", array( 'POST', '/', @@ -87,7 +86,7 @@ class AmazonSES { 'x-amz-date:' . $this->date, '', 'host;x-amz-date', - hash($this->hashAlgorithm, urldecode(http_build_query($this->getBody()))) + hash($this->hashAlgorithm, urldecode(http_build_query($body))) )); } diff --git a/lib/Mailer/API/ElasticEmail.php b/lib/Mailer/API/ElasticEmail.php index 2a13fb6ecb..f00849d268 100644 --- a/lib/Mailer/API/ElasticEmail.php +++ b/lib/Mailer/API/ElasticEmail.php @@ -12,35 +12,34 @@ class ElasticEmail { } function send($newsletter, $subscriber) { - $this->newsletter = $newsletter; - $this->subscriber = $subscriber; $result = wp_remote_post( $this->url, - $this->request()); + $this->request($newsletter, $subscriber)); return ( !is_wp_error($result) === true && !preg_match('/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/', $result['body']) === false ); } - function getBody() { + function getBody($newsletter, $subscriber) { return array( 'api_key' => $this->apiKey, 'from' => $this->fromEmail, 'from_name' => $this->fromName, - 'to' => $this->subscriber, - 'subject' => $this->newsletter['subject'], - 'body_html' => $this->newsletter['body']['html'], - 'body_text' => $this->newsletter['body']['text'] + 'to' => $subscriber, + 'subject' => $newsletter['subject'], + 'body_html' => $newsletter['body']['html'], + 'body_text' => $newsletter['body']['text'] ); } - function request() { + function request($newsletter, $subscriber) { + $body = $this->getBody($newsletter, $subscriber); return array( 'timeout' => 10, 'httpversion' => '1.0', 'method' => 'POST', - 'body' => urldecode(http_build_query($this->getBody())) + 'body' => urldecode(http_build_query($body)) ); } } \ No newline at end of file diff --git a/lib/Mailer/API/MailGun.php b/lib/Mailer/API/MailGun.php index 09dd10b35d..d8aee6783a 100644 --- a/lib/Mailer/API/MailGun.php +++ b/lib/Mailer/API/MailGun.php @@ -11,11 +11,9 @@ class MailGun { } function send($newsletter, $subscriber) { - $this->newsletter = $newsletter; - $this->subscriber = $subscriber; $result = wp_remote_post( $this->url, - $this->request() + $this->request($newsletter, $subscriber) ); return ( !is_wp_error($result) === true && @@ -23,13 +21,13 @@ class MailGun { ); } - function getBody() { + function getBody($newsletter, $subscriber) { return array( 'from' => $this->from, - 'to' => $this->subscriber, - 'subject' => $this->newsletter['subject'], - 'html' => $this->newsletter['body']['html'], - 'text' => $this->newsletter['body']['text'] + 'to' => $subscriber, + 'subject' => $newsletter['subject'], + 'html' => $newsletter['body']['html'], + 'text' => $newsletter['body']['text'] ); } @@ -37,7 +35,8 @@ class MailGun { return 'Basic ' . base64_encode('api:' . $this->apiKey); } - function request() { + function request($newsletter, $subscriber) { + $body = $this->getBody($newsletter, $subscriber); return array( 'timeout' => 10, 'httpversion' => '1.0', @@ -46,7 +45,7 @@ class MailGun { 'Content-Type' => 'application/x-www-form-urlencoded', 'Authorization' => $this->auth() ), - 'body' => urldecode(http_build_query($this->getBody())) + 'body' => urldecode(http_build_query($body)) ); } } \ No newline at end of file diff --git a/lib/Mailer/API/MailPoet.php b/lib/Mailer/API/MailPoet.php index 484d8ff569..2e6f29a6ca 100644 --- a/lib/Mailer/API/MailPoet.php +++ b/lib/Mailer/API/MailPoet.php @@ -12,11 +12,9 @@ class MailPoet { } function send($newsletter, $subscriber) { - $this->newsletter = $newsletter; - $this->subscriber = $this->processSubscriber($subscriber); $result = wp_remote_post( $this->url, - $this->request() + $this->request($newsletter, $this->processSubscriber($subscriber)) ); return ( !is_wp_error($result) === true && @@ -37,19 +35,19 @@ class MailPoet { ); } - function getBody() { + function getBody($newsletter, $subscriber) { return array( 'to' => (array( - 'address' => $this->subscriber['email'], - 'name' => $this->subscriber['name'] + 'address' => $subscriber['email'], + 'name' => $subscriber['name'] )), 'from' => (array( 'address' => $this->fromEmail, 'name' => $this->fromName )), - 'subject' => $this->newsletter['subject'], - 'html' => $this->newsletter['body']['html'], - 'text' => $this->newsletter['body']['text'] + 'subject' => $newsletter['subject'], + 'html' => $newsletter['body']['html'], + 'text' => $newsletter['body']['text'] ); } @@ -57,8 +55,9 @@ class MailPoet { return 'Basic ' . base64_encode('api:' . $this->apiKey); } - function request() { - $request = array( + function request($newsletter, $subscriber) { + $body = array($this->getBody($newsletter, $subscriber)); + return array( 'timeout' => 10, 'httpversion' => '1.0', 'method' => 'POST', @@ -66,8 +65,7 @@ class MailPoet { 'Content-Type' => 'application/json', 'Authorization' => $this->auth() ), - 'body' => json_encode(array($this->getBody())) + 'body' => json_encode($body) ); - return $request; } } \ No newline at end of file diff --git a/lib/Mailer/API/Mandrill.php b/lib/Mailer/API/Mandrill.php index 45700c08f1..0a30cea304 100644 --- a/lib/Mailer/API/Mandrill.php +++ b/lib/Mailer/API/Mandrill.php @@ -10,13 +10,11 @@ class Mandrill { $this->fromName = $fromName; $this->fromEmail = $fromEmail; } - + function send($newsletter, $subscriber) { - $this->newsletter = $newsletter; - $this->subscriber = $this->processSubscriber($subscriber); $result = wp_remote_post( $this->url, - $this->request() + $this->request($newsletter, $this->processSubscriber($subscriber)) ); return ( !is_wp_error($result) === true && @@ -24,7 +22,7 @@ class Mandrill { wp_remote_retrieve_response_code($result) === 200 ); } - + function processSubscriber($subscriber) { preg_match('!(?P.*?)\s<(?P.*?)>!', $subscriber, $subscriberData); if(!isset($subscriberData['email'])) { @@ -33,27 +31,28 @@ class Mandrill { ); } return array( - 'email' => $subscriberData['email'], - 'name' => (isset($subscriberData['name'])) ? $subscriberData['name'] : '' + 'email' => $subscriberData['email'], + 'name' => (isset($subscriberData['name'])) ? $subscriberData['name'] : '' ); } - - function getBody() { + + function getBody($newsletter, $subscriber) { return array( 'key' => $this->apiKey, 'message' => array( 'from_email' => $this->fromEmail, 'from_name' => $this->fromName, - 'to' => array($this->subscriber), - 'subject' => $this->newsletter['subject'], - 'html' => $this->newsletter['body']['html'], - 'text' => $this->newsletter['body']['text'] + 'to' => array($subscriber), + 'subject' => $newsletter['subject'], + 'html' => $newsletter['body']['html'], + 'text' => $newsletter['body']['text'] ), 'async' => false, ); } - - function request() { + + function request($newsletter, $subscriber) { + $body = $this->getBody($newsletter, $subscriber); return array( 'timeout' => 10, 'httpversion' => '1.0', @@ -61,7 +60,7 @@ class Mandrill { 'headers' => array( 'Content-Type' => 'application/json' ), - 'body' => json_encode($this->getBody()) + 'body' => json_encode($body) ); } } \ No newline at end of file diff --git a/lib/Mailer/API/SendGrid.php b/lib/Mailer/API/SendGrid.php index 23c753a80a..88adf6071c 100644 --- a/lib/Mailer/API/SendGrid.php +++ b/lib/Mailer/API/SendGrid.php @@ -12,11 +12,9 @@ class SendGrid { } function send($newsletter, $subscriber) { - $this->newsletter = $newsletter; - $this->subscriber = $subscriber; $result = wp_remote_post( $this->url, - $this->request() + $this->request($newsletter, $subscriber) ); return ( !is_wp_error($result) === true && @@ -26,14 +24,14 @@ class SendGrid { ); } - function getBody() { + function getBody($newsletter, $subscriber) { return array( - 'to' => $this->subscriber, + 'to' => $subscriber, 'from' => $this->fromEmail, 'fromname' => $this->fromName, - 'subject' => $this->newsletter['subject'], - 'html' => $this->newsletter['body']['html'], - 'text' => $this->newsletter['body']['text'] + 'subject' => $newsletter['subject'], + 'html' => $newsletter['body']['html'], + 'text' => $newsletter['body']['text'] ); } @@ -41,7 +39,8 @@ class SendGrid { return 'Bearer ' . $this->apiKey; } - function request() { + function request($newsletter, $subscriber) { + $body = $this->getBody($newsletter, $subscriber); return array( 'timeout' => 10, 'httpversion' => '1.1', @@ -49,7 +48,7 @@ class SendGrid { 'headers' => array( 'Authorization' => $this->auth() ), - 'body' => urldecode(http_build_query($this->getBody())) + 'body' => urldecode(http_build_query($body)) ); } } \ No newline at end of file diff --git a/tests/unit/Mailer/API/AmazonSESCest.php b/tests/unit/Mailer/API/AmazonSESCest.php index 4e05992039..920d8b14b5 100644 --- a/tests/unit/Mailer/API/AmazonSESCest.php +++ b/tests/unit/Mailer/API/AmazonSESCest.php @@ -17,9 +17,8 @@ class AmazonSESCest { $this->settings['access_key'], $this->settings['secret_key'], $this->from); - $this->mailer->subscriber = - 'Recipient '; - $this->mailer->newsletter = array( + $this->subscriber = 'Recipient '; + $this->newsletter = array( 'subject' => 'testing AmazonSES', 'body' => array( 'html' => 'HTML body', @@ -36,41 +35,40 @@ class AmazonSESCest { } function itCanGenerateBody() { - $body = $this->mailer->getBody(); + $body = $this->mailer->getBody($this->newsletter, $this->subscriber); expect($body['Action'])->equals('SendEmail'); expect($body['Version'])->equals('2010-12-01'); expect($body['Source'])->equals($this->from); expect($body['Destination.ToAddresses.member.1']) - ->contains($this->mailer->subscriber); + ->contains($this->subscriber); expect($body['Message.Subject.Data']) - ->equals($this->mailer->newsletter['subject']); + ->equals($this->newsletter['subject']); expect($body['Message.Body.Html.Data']) - ->equals($this->mailer->newsletter['body']['html']); + ->equals($this->newsletter['body']['html']); expect($body['Message.Body.Text.Data']) - ->equals($this->mailer->newsletter['body']['text']); + ->equals($this->newsletter['body']['text']); expect($body['ReturnPath'])->equals($this->from); } function itCanCreateRequest() { - $request = $this->mailer->request(); - expect($request['timeout']) - ->equals(10); - expect($request['httpversion']) - ->equals('1.1'); - expect($request['method']) - ->equals('POST'); - expect($request['headers']['Host']) - ->equals($this->mailer->awsEndpoint); + $request = $this->mailer->request($this->newsletter, $this->subscriber); + $body = $this->mailer->getBody($this->newsletter, $this->subscriber); + expect($request['timeout'])->equals(10); + expect($request['httpversion'])->equals('1.1'); + expect($request['method'])->equals('POST'); + expect($request['headers']['Host'])->equals($this->mailer->awsEndpoint); expect($request['headers']['Authorization']) - ->equals($this->mailer->signRequest($this->mailer->getBody())); - expect($request['headers']['X-Amz-Date']) - ->equals($this->mailer->date); - expect($request['body']) - ->equals(urldecode(http_build_query($this->mailer->getBody()))); + ->equals($this->mailer->signRequest($body)); + expect($request['headers']['X-Amz-Date'])->equals($this->mailer->date); + expect($request['body'])->equals(urldecode(http_build_query($body))); } function itCanCreateCanonicalRequest() { - $canonicalRequest = explode("\n", $this->mailer->getCanonicalRequest()); + $body = $this->mailer->getBody($this->newsletter, $this->subscriber); + $canonicalRequest = explode( + "\n", + $this->mailer->getCanonicalRequest($body) + ); expect($canonicalRequest) ->equals( array( @@ -82,7 +80,7 @@ class AmazonSESCest { '', 'host;x-amz-date', hash($this->mailer->hashAlgorithm, - urldecode(http_build_query($this->mailer->getBody())) + urldecode(http_build_query($body)) ) ) ); @@ -100,8 +98,9 @@ class AmazonSESCest { } function itCanCreateStringToSign() { + $body = $this->mailer->getBody($this->newsletter, $this->subscriber); $credentialScope = $this->mailer->getCredentialScope(); - $canonicalRequest = $this->mailer->getCanonicalRequest(); + $canonicalRequest = $this->mailer->getCanonicalRequest($body); $stringToSing = $this->mailer->createStringToSign( $credentialScope, $canonicalRequest @@ -119,7 +118,8 @@ class AmazonSESCest { } function itCanSignRequest() { - $signedRequest = $this->mailer->signRequest(); + $body = $this->mailer->getBody($this->newsletter, $this->subscriber); + $signedRequest = $this->mailer->signRequest($body); expect($signedRequest) ->contains( $this->mailer->awsSigningAlgorithm . ' Credential=' . @@ -127,22 +127,23 @@ class AmazonSESCest { $this->mailer->getCredentialScope() . ', ' . 'SignedHeaders=host;x-amz-date, Signature=' ); - expect(preg_match('!Signature=[A-Fa-f0-9]{64}$!', $signedRequest))->equals(1); + expect(preg_match('!Signature=[A-Fa-f0-9]{64}$!', $signedRequest)) + ->equals(1); } function itCannotSendWithoutProperAccessKey() { $this->mailer->awsAccessKey = 'somekey'; $result = $this->mailer->send( - $this->mailer->newsletter, - $this->mailer->subscriber + $this->newsletter, + $this->subscriber ); expect($result)->false(); } function itCanSend() { $result = $this->mailer->send( - $this->mailer->newsletter, - $this->mailer->subscriber + $this->newsletter, + $this->subscriber ); expect($result)->true(); } diff --git a/tests/unit/Mailer/API/ElasticEmailCest.php b/tests/unit/Mailer/API/ElasticEmailCest.php index 44e78642ea..112df03fce 100644 --- a/tests/unit/Mailer/API/ElasticEmailCest.php +++ b/tests/unit/Mailer/API/ElasticEmailCest.php @@ -16,9 +16,8 @@ class ElasticEmailCest { $this->fromEmail, $this->fromName ); - $this->mailer->subscriber = - 'Recipient '; - $this->mailer->newsletter = array( + $this->subscriber = 'Recipient '; + $this->newsletter = array( 'subject' => 'testing ElasticEmail', 'body' => array( 'html' => 'HTML body', @@ -28,48 +27,38 @@ class ElasticEmailCest { } function itCanGenerateBody() { - $body = $this->mailer->getBody(); - expect($body['api_key']) - ->equals($this->settings['api_key']); - expect($body['from']) - ->equals($this->fromEmail); - expect($body['from_name']) - ->equals($this->fromName); - expect($body['to']) - ->contains($this->mailer->subscriber); - expect($body['subject']) - ->equals($this->mailer->newsletter['subject']); - expect($body['body_html']) - ->equals($this->mailer->newsletter['body']['html']); - expect($body['body_text']) - ->equals($this->mailer->newsletter['body']['text']); + $body = $this->mailer->getBody($this->newsletter, $this->subscriber); + expect($body['api_key'])->equals($this->settings['api_key']); + expect($body['from'])->equals($this->fromEmail); + expect($body['from_name'])->equals($this->fromName); + expect($body['to'])->contains($this->subscriber); + expect($body['subject'])->equals($this->newsletter['subject']); + expect($body['body_html'])->equals($this->newsletter['body']['html']); + expect($body['body_text'])->equals($this->newsletter['body']['text']); } function itCanCreateRequest() { - $request = $this->mailer->request(); - expect($request['timeout']) - ->equals(10); - expect($request['httpversion']) - ->equals('1.0'); - expect($request['method']) - ->equals('POST'); - expect($request['body']) - ->equals(urldecode(http_build_query($this->mailer->getBody()))); + $request = $this->mailer->request($this->newsletter, $this->subscriber); + $body = $this->mailer->getBody($this->newsletter, $this->subscriber); + expect($request['timeout'])->equals(10); + expect($request['httpversion'])->equals('1.0'); + expect($request['method'])->equals('POST'); + expect($request['body'])->equals(urldecode(http_build_query($body))); } function itCannotSendWithoutProperAPIKey() { $this->mailer->apiKey = 'someapi'; $result = $this->mailer->send( - $this->mailer->newsletter, - $this->mailer->subscriber + $this->newsletter, + $this->subscriber ); expect($result)->false(); } function itCanSend() { $result = $this->mailer->send( - $this->mailer->newsletter, - $this->mailer->subscriber + $this->newsletter, + $this->subscriber ); expect($result)->true(); } diff --git a/tests/unit/Mailer/API/MailGunCest.php b/tests/unit/Mailer/API/MailGunCest.php index 29035a39e6..85df8e45d1 100644 --- a/tests/unit/Mailer/API/MailGunCest.php +++ b/tests/unit/Mailer/API/MailGunCest.php @@ -16,9 +16,8 @@ class MailGunCest { $this->settings['api_key'], $this->from ); - $this->mailer->subscriber = - 'Recipient '; - $this->mailer->newsletter = array( + $this->subscriber = 'Recipient '; + $this->newsletter = array( 'subject' => 'testing MailGun', 'body' => array( 'html' => 'HTML body', @@ -28,17 +27,12 @@ class MailGunCest { } function itCanGenerateBody() { - $body = $this->mailer->getBody(); - expect($body['from']) - ->equals($this->from); - expect($body['to']) - ->equals($this->mailer->subscriber); - expect($body['subject']) - ->equals($this->mailer->newsletter['subject']); - expect($body['html']) - ->equals($this->mailer->newsletter['body']['html']); - expect($body['text']) - ->equals($this->mailer->newsletter['body']['text']); + $body = $this->mailer->getBody($this->newsletter, $this->subscriber); + expect($body['from'])->equals($this->from); + expect($body['to'])->equals($this->subscriber); + expect($body['subject'])->equals($this->newsletter['subject']); + expect($body['html'])->equals($this->newsletter['body']['html']); + expect($body['text'])->equals($this->newsletter['body']['text']); } function itCanDoBasicAuth() { @@ -47,26 +41,23 @@ class MailGunCest { } function itCanCreateRequest() { - $request = $this->mailer->request(); - expect($request['timeout']) - ->equals(10); - expect($request['httpversion']) - ->equals('1.0'); - expect($request['method']) - ->equals('POST'); + $request = $this->mailer->request($this->newsletter, $this->subscriber); + $body = $this->mailer->getBody($this->newsletter, $this->subscriber); + expect($request['timeout'])->equals(10); + expect($request['httpversion'])->equals('1.0'); + expect($request['method'])->equals('POST'); expect($request['headers']['Content-Type']) ->equals('application/x-www-form-urlencoded'); expect($request['headers']['Authorization']) ->equals('Basic ' . base64_encode('api:' . $this->settings['api_key'])); - expect($request['body']) - ->equals(urldecode(http_build_query($this->mailer->getBody()))); + expect($request['body'])->equals(urldecode(http_build_query($body))); } function itCannotSendWithoutProperAPIKey() { $this->mailer->apiKey = 'someapi'; $result = $this->mailer->send( - $this->mailer->newsletter, - $this->mailer->subscriber + $this->newsletter, + $this->subscriber ); expect($result)->false(); } @@ -75,16 +66,16 @@ class MailGunCest { $this->mailer->url = str_replace($this->settings['domain'], 'somedomain', $this->mailer->url); $result = $this->mailer->send( - $this->mailer->newsletter, - $this->mailer->subscriber + $this->newsletter, + $this->subscriber ); expect($result)->false(); } function itCanSend() { $result = $this->mailer->send( - $this->mailer->newsletter, - $this->mailer->subscriber + $this->newsletter, + $this->subscriber ); expect($result)->true(); } diff --git a/tests/unit/Mailer/API/MailPoetCest.php b/tests/unit/Mailer/API/MailPoetCest.php index 1b06150432..a5c5909355 100644 --- a/tests/unit/Mailer/API/MailPoetCest.php +++ b/tests/unit/Mailer/API/MailPoetCest.php @@ -16,8 +16,8 @@ class MailPoetCest { $this->fromEmail, $this->fromName ); - $this->mailer->subscriber = 'Recipient '; - $this->mailer->newsletter = array( + $this->subscriber = 'Recipient '; + $this->newsletter = array( 'subject' => 'testing MailPoet', 'body' => array( 'html' => 'HTML body', @@ -27,37 +27,28 @@ class MailPoetCest { } function itCanGenerateBody() { - $this->mailer->subscriber = $this->mailer->processSubscriber($this->mailer->subscriber); - $body = $this->mailer->getBody(); - expect($body['to']['address']) - ->equals($this->mailer->subscriber['email']); - expect($body['to']['name']) - ->equals($this->mailer->subscriber['name']); - expect($body['from']['address']) - ->equals($this->fromEmail); - expect($body['subject']) - ->equals($this->mailer->newsletter['subject']); - expect($body['html']) - ->equals($this->mailer->newsletter['body']['html']); - expect($body['text']) - ->equals($this->mailer->newsletter['body']['text']); + $subscriber = $this->mailer->processSubscriber($this->subscriber); + $body = $this->mailer->getBody($this->newsletter, $subscriber); + expect($body['to']['address'])->equals($subscriber['email']); + expect($body['to']['name'])->equals($subscriber['name']); + expect($body['from']['address'])->equals($this->fromEmail); + expect($body['subject'])->equals($this->newsletter['subject']); + expect($body['html'])->equals($this->newsletter['body']['html']); + expect($body['text'])->equals($this->newsletter['body']['text']); } function itCanCreateRequest() { - $this->mailer->subscriber = $this->mailer->processSubscriber($this->mailer->subscriber); - $request = $this->mailer->request(); - expect($request['timeout']) - ->equals(10); - expect($request['httpversion']) - ->equals('1.0'); - expect($request['method']) - ->equals('POST'); - expect($request['headers']['Content-Type']) - ->equals('application/json'); - expect($request['headers']['Authorization']) - ->equals($this->mailer->auth()); - expect($request['body']) - ->equals(json_encode(array($this->mailer->getBody()))); + $subscriber = $this->mailer->processSubscriber( + 'Recipient ' + ); + $body = array($this->mailer->getBody($this->newsletter, $subscriber)); + $request = $this->mailer->request($this->newsletter, $subscriber); + expect($request['timeout'])->equals(10); + expect($request['httpversion'])->equals('1.0'); + expect($request['method'])->equals('POST'); + expect($request['headers']['Content-Type'])->equals('application/json'); + expect($request['headers']['Authorization'])->equals($this->mailer->auth()); + expect($request['body'])->equals(json_encode($body)); } function itCanProcessSubscriber() { @@ -89,16 +80,16 @@ class MailPoetCest { function itCannotSendWithoutProperAPIKey() { $this->mailer->apiKey = 'someapi'; $result = $this->mailer->send( - $this->mailer->newsletter, - $this->mailer->subscriber + $this->newsletter, + $this->subscriber ); expect($result)->false(); } function itCanSend() { $result = $this->mailer->send( - $this->mailer->newsletter, - $this->mailer->subscriber + $this->newsletter, + $this->subscriber ); expect($result)->true(); } diff --git a/tests/unit/Mailer/API/MandrillCest.php b/tests/unit/Mailer/API/MandrillCest.php index 6e4e9cb985..be3998d153 100644 --- a/tests/unit/Mailer/API/MandrillCest.php +++ b/tests/unit/Mailer/API/MandrillCest.php @@ -16,9 +16,8 @@ class MandrillCest { $this->fromEmail, $this->fromName ); - $this->mailer->subscriber = - 'Recipient '; - $this->mailer->newsletter = array( + $this->subscriber = 'Recipient '; + $this->newsletter = array( 'subject' => 'testing Mandrill', 'body' => array( 'html' => 'HTML body', @@ -28,41 +27,27 @@ class MandrillCest { } function itCanGenerateBody() { - $body = $this->mailer->getBody(); + $subscriber = $this->mailer->processSubscriber($this->subscriber); + $body = $this->mailer->getBody($this->newsletter, $subscriber); expect($body['key'])->equals($this->settings['api_key']); - expect($body['message']['from_email'])->equals( - $this->fromEmail - ); - expect($body['message']['from_name'])->equals( - $this->fromName - ); - expect($body['message']['to'])->equals( - array($this->mailer->subscriber) - ); - expect($body['message']['subject'])->equals( - $this->mailer->newsletter['subject'] - ); - expect($body['message']['html'])->equals( - $this->mailer->newsletter['body']['html'] - ); - expect($body['message']['text'])->equals( - $this->mailer->newsletter['body']['text'] - ); + expect($body['message']['from_email'])->equals($this->fromEmail); + expect($body['message']['from_name'])->equals($this->fromName); + expect($body['message']['to'])->equals(array($subscriber)); + expect($body['message']['subject'])->equals($this->newsletter['subject']); + expect($body['message']['html'])->equals($this->newsletter['body']['html']); + expect($body['message']['text'])->equals($this->newsletter['body']['text']); expect($body['async'])->false(); } function itCanCreateRequest() { - $request = $this->mailer->request(); - expect($request['timeout']) - ->equals(10); - expect($request['httpversion']) - ->equals('1.0'); - expect($request['method']) - ->equals('POST'); - expect($request['headers']['Content-Type']) - ->equals('application/json'); - expect($request['body']) - ->equals(json_encode($this->mailer->getBody())); + $subscriber = $this->mailer->processSubscriber($this->subscriber); + $body = $this->mailer->getBody($this->newsletter, $subscriber); + $request = $this->mailer->request($this->newsletter, $subscriber); + expect($request['timeout'])->equals(10); + expect($request['httpversion'])->equals('1.0'); + expect($request['method'])->equals('POST'); + expect($request['headers']['Content-Type'])->equals('application/json'); + expect($request['body'])->equals(json_encode($body)); } function itCanProcessSubscriber() { @@ -89,16 +74,16 @@ class MandrillCest { function itCannotSendWithoutProperAPIKey() { $this->mailer->apiKey = 'someapi'; $result = $this->mailer->send( - $this->mailer->newsletter, - $this->mailer->subscriber + $this->newsletter, + $this->subscriber ); expect($result)->false(); } function itCanSend() { $result = $this->mailer->send( - $this->mailer->newsletter, - $this->mailer->subscriber + $this->newsletter, + $this->subscriber ); expect($result)->true(); } diff --git a/tests/unit/Mailer/API/SendGridCest.php b/tests/unit/Mailer/API/SendGridCest.php index 6f4d105ca7..720dc8d632 100644 --- a/tests/unit/Mailer/API/SendGridCest.php +++ b/tests/unit/Mailer/API/SendGridCest.php @@ -16,9 +16,8 @@ class SendGridCest { $this->fromEmail, $this->fromName ); - $this->mailer->subscriber = - 'Recipient '; - $this->mailer->newsletter = array( + $this->subscriber = 'Recipient '; + $this->newsletter = array( 'subject' => 'testing SendGrid', 'body' => array( 'html' => 'HTML body', @@ -28,53 +27,44 @@ class SendGridCest { } function itCanGenerateBody() { - $body = $this->mailer->getBody(); - expect($body['to']) - ->contains($this->mailer->subscriber); - expect($body['from']) - ->equals($this->fromEmail); - expect($body['fromname']) - ->equals($this->fromName); - expect($body['subject']) - ->equals($this->mailer->newsletter['subject']); - expect($body['html']) - ->equals($this->mailer->newsletter['body']['html']); - expect($body['text']) - ->equals($this->mailer->newsletter['body']['text']); + $body = $this->mailer->getBody($this->newsletter, $this->subscriber); + expect($body['to'])->contains($this->subscriber); + expect($body['from'])->equals($this->fromEmail); + expect($body['fromname'])->equals($this->fromName); + expect($body['subject'])->equals($this->newsletter['subject']); + expect($body['html'])->equals($this->newsletter['body']['html']); + expect($body['text'])->equals($this->newsletter['body']['text']); } function itCanCreateRequest() { - $request = $this->mailer->request(); - expect($request['timeout']) - ->equals(10); - expect($request['httpversion']) - ->equals('1.1'); - expect($request['method']) - ->equals('POST'); + $body = $this->mailer->getBody($this->newsletter, $this->subscriber); + $request = $this->mailer->request($this->newsletter, $this->subscriber); + expect($request['timeout'])->equals(10); + expect($request['httpversion'])->equals('1.1'); + expect($request['method'])->equals('POST'); expect($request['headers']['Authorization']) ->equals('Bearer ' . $this->settings['api_key']); - expect($request['body']) - ->equals(urldecode(http_build_query($this->mailer->getBody()))); + expect($request['body'])->equals(urldecode(http_build_query($body))); } function itCanDoBasicAuth() { expect($this->mailer->auth()) ->equals('Bearer ' . $this->settings['api_key']); } - + function itCannotSendWithoutProperAPIKey() { $this->mailer->apiKey = 'someapi'; $result = $this->mailer->send( - $this->mailer->newsletter, - $this->mailer->subscriber + $this->newsletter, + $this->subscriber ); expect($result)->false(); } function itCanSend() { $result = $this->mailer->send( - $this->mailer->newsletter, - $this->mailer->subscriber + $this->newsletter, + $this->subscriber ); expect($result)->true(); } diff --git a/tests/unit/Mailer/SMTP/SMTPCest.php b/tests/unit/Mailer/SMTP/SMTPCest.php index 40b4cfb392..930eb02e9a 100644 --- a/tests/unit/Mailer/SMTP/SMTPCest.php +++ b/tests/unit/Mailer/SMTP/SMTPCest.php @@ -37,20 +37,15 @@ class SMTPCest { function itCanBuildMailer() { $mailer = $this->mailer->buildMailer(); - expect($mailer->getTransport() - ->getHost()) + expect($mailer->getTransport()->getHost()) ->equals($this->settings['host']); - expect($mailer->getTransport() - ->getPort()) + expect($mailer->getTransport()->getPort()) ->equals($this->settings['port']); - expect($mailer->getTransport() - ->getUsername()) + expect($mailer->getTransport()->getUsername()) ->equals($this->settings['authentication']['login']); - expect($mailer->getTransport() - ->getPassword()) + expect($mailer->getTransport()->getPassword()) ->equals($this->settings['authentication']['password']); - expect($mailer->getTransport() - ->getEncryption()) + expect($mailer->getTransport()->getEncryption()) ->equals($this->settings['encryption']); } @@ -94,4 +89,4 @@ class SMTPCest { ); expect($result)->true(); } -} +} \ No newline at end of file