- Updates unit tests
This commit is contained in:
38
tests/unit/Config/ShortcodesTest.php
Normal file
38
tests/unit/Config/ShortcodesTest.php
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use MailPoet\Config\Shortcodes;
|
||||||
|
use MailPoet\Models\Newsletter;
|
||||||
|
use MailPoet\Models\SendingQueue;
|
||||||
|
use MailPoet\Newsletter\Url;
|
||||||
|
use MailPoet\Router\Router;
|
||||||
|
|
||||||
|
class ConfigShortcodesTest extends MailPoetTest {
|
||||||
|
function _before() {
|
||||||
|
$newsletter = Newsletter::create();
|
||||||
|
$newsletter->type = Newsletter::TYPE_STANDARD;
|
||||||
|
$newsletter->status = Newsletter::STATUS_SENT;
|
||||||
|
$this->newsletter = $newsletter->save();
|
||||||
|
$queue = SendingQueue::create();
|
||||||
|
$queue->newsletter_id = $newsletter->id;
|
||||||
|
$queue->status = SendingQueue::STATUS_COMPLETED;
|
||||||
|
$this->queue = $queue->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItGetsArchives() {
|
||||||
|
$shortcodes = new Shortcodes();
|
||||||
|
// result contains a link pointing to the "view in browser" router endpoint
|
||||||
|
$result = $shortcodes->getArchive($params = false);
|
||||||
|
$dom = pQuery::parseStr($result);
|
||||||
|
$link = $dom->query('a');
|
||||||
|
$link = $link->attr('href');
|
||||||
|
expect($link)->contains('endpoint=view_in_browser');
|
||||||
|
// request data object contains newsletter hash but not newsletter id
|
||||||
|
$parsed_link = parse_url($link);
|
||||||
|
parse_str(html_entity_decode($parsed_link['query']), $data);
|
||||||
|
$request_data = Url::transformUrlDataObject(
|
||||||
|
Router::decodeRequestData($data['data'])
|
||||||
|
);
|
||||||
|
expect($request_data['newsletter_id'])->isEmpty();
|
||||||
|
expect($request_data['newsletter_hash'])->equals($this->newsletter->hash);
|
||||||
|
}
|
||||||
|
}
|
@@ -245,6 +245,118 @@ class NewsletterTest extends MailPoetTest {
|
|||||||
expect($newsletter->Event)->equals($association->value);
|
expect($newsletter->Event)->equals($association->value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItGetsArchiveNewslettersForSegments() {
|
||||||
|
// clear the DB
|
||||||
|
$this->_after();
|
||||||
|
|
||||||
|
$types = array(
|
||||||
|
Newsletter::TYPE_STANDARD,
|
||||||
|
Newsletter::TYPE_NOTIFICATION_HISTORY
|
||||||
|
);
|
||||||
|
$newsletters = array();
|
||||||
|
$sending_queues[] = array();
|
||||||
|
for($i = 0; $i < count($types); $i++) {
|
||||||
|
$newsletters[$i] = Newsletter::createOrUpdate(
|
||||||
|
array(
|
||||||
|
'subject' => 'My Standard Newsletter',
|
||||||
|
'preheader' => 'Pre Header',
|
||||||
|
'type' => $types[$i]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$sending_queues[$i] = SendingQueue::create();
|
||||||
|
$sending_queues[$i]->newsletter_id = $newsletters[$i]->id;
|
||||||
|
$sending_queues[$i]->status = SendingQueue::STATUS_COMPLETED;
|
||||||
|
$sending_queues[$i]->save();
|
||||||
|
}
|
||||||
|
// set segment association for the last newsletter
|
||||||
|
$newsletter_segment = NewsletterSegment::create();
|
||||||
|
$newsletter_segment->newsletter_id = end($newsletters[1])->id;
|
||||||
|
$newsletter_segment->segment_id = 123;
|
||||||
|
$newsletter_segment->save();
|
||||||
|
|
||||||
|
expect(Newsletter::findMany())->count(2);
|
||||||
|
|
||||||
|
// return archives in segment 123
|
||||||
|
$results = Newsletter::getArchives(array(123));
|
||||||
|
expect($results)->count(1);
|
||||||
|
expect($results[0]->id)->equals($newsletters[1]->id);
|
||||||
|
expect($results[0]->type)->equals(Newsletter::TYPE_NOTIFICATION_HISTORY);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItGetsAllArchiveNewsletters() {
|
||||||
|
// clear the DB
|
||||||
|
$this->_after();
|
||||||
|
|
||||||
|
$types = array(
|
||||||
|
Newsletter::TYPE_STANDARD,
|
||||||
|
Newsletter::TYPE_STANDARD, // should be returned
|
||||||
|
Newsletter::TYPE_WELCOME,
|
||||||
|
Newsletter::TYPE_NOTIFICATION,
|
||||||
|
Newsletter::TYPE_NOTIFICATION_HISTORY, // should be returned
|
||||||
|
Newsletter::TYPE_NOTIFICATION_HISTORY
|
||||||
|
);
|
||||||
|
$newsletters = array();
|
||||||
|
$sending_queues[] = array();
|
||||||
|
for($i = 0; $i < count($types); $i++) {
|
||||||
|
$newsletters[$i] = Newsletter::createOrUpdate(
|
||||||
|
array(
|
||||||
|
'subject' => 'My Standard Newsletter',
|
||||||
|
'preheader' => 'Pre Header',
|
||||||
|
'type' => $types[$i]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$sending_queues[$i] = SendingQueue::create();
|
||||||
|
$sending_queues[$i]->newsletter_id = $newsletters[$i]->id;
|
||||||
|
$sending_queues[$i]->status = SendingQueue::STATUS_COMPLETED;
|
||||||
|
$sending_queues[$i]->save();
|
||||||
|
}
|
||||||
|
// set teh sending queue status of the first newsletter to null
|
||||||
|
$sending_queues[0]->status = null;
|
||||||
|
$sending_queues[0]->save();
|
||||||
|
|
||||||
|
// trash the last newsletter
|
||||||
|
end($newsletters)->trash();
|
||||||
|
|
||||||
|
expect(Newsletter::findMany())->count(6);
|
||||||
|
|
||||||
|
// archives return only:
|
||||||
|
// 1. STANDARD and NOTIFICATION HISTORY newsletters
|
||||||
|
// 2. active newsletters (i.e., not trashed)
|
||||||
|
// 3. with sending queue records that are COMPLETED
|
||||||
|
$results = Newsletter::getArchives();
|
||||||
|
expect($results)->count(2);
|
||||||
|
expect($results[0]->id)->equals($newsletters[1]->id);
|
||||||
|
expect($results[0]->type)->equals(Newsletter::TYPE_STANDARD);
|
||||||
|
expect($results[1]->id)->equals($newsletters[4]->id);
|
||||||
|
expect($results[1]->type)->equals(Newsletter::TYPE_NOTIFICATION_HISTORY);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItGeneratesHashOnNewsletterSave() {
|
||||||
|
expect(strlen($this->newsletter->hash))
|
||||||
|
->equals(Newsletter::NEWSLETTER_HASH_LENGTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItRegeneratesHashOnNewsletterDuplication() {
|
||||||
|
$duplicate_newsletter = $this->newsletter->duplicate();
|
||||||
|
expect($duplicate_newsletter->hash)->notEquals($this->newsletter->hash);
|
||||||
|
expect(strlen($duplicate_newsletter->hash))
|
||||||
|
->equals(Newsletter::NEWSLETTER_HASH_LENGTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItRegeneratesHashOnNotificationHistoryCreation() {
|
||||||
|
$notification_history = $this->newsletter->createNotificationHistory();
|
||||||
|
expect($notification_history->hash)->notEquals($this->newsletter->hash);
|
||||||
|
expect(strlen($notification_history->hash))
|
||||||
|
->equals(Newsletter::NEWSLETTER_HASH_LENGTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItGetsQueueFromNewsletter() {
|
||||||
|
$queue = SendingQueue::create();
|
||||||
|
$queue->newsletter_id = $this->newsletter->id;
|
||||||
|
$queue->save();
|
||||||
|
expect($this->newsletter->queue()->findOne()->id)->equals($queue->id);
|
||||||
|
}
|
||||||
|
|
||||||
function _after() {
|
function _after() {
|
||||||
ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table);
|
ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table);
|
||||||
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
||||||
|
@@ -9,7 +9,6 @@ use MailPoet\Models\SubscriberCustomField;
|
|||||||
use MailPoet\Models\SubscriberSegment;
|
use MailPoet\Models\SubscriberSegment;
|
||||||
|
|
||||||
class SubscriberTest extends MailPoetTest {
|
class SubscriberTest extends MailPoetTest {
|
||||||
|
|
||||||
function _before() {
|
function _before() {
|
||||||
$this->data = array(
|
$this->data = array(
|
||||||
'first_name' => 'John',
|
'first_name' => 'John',
|
||||||
@@ -555,6 +554,23 @@ class SubscriberTest extends MailPoetTest {
|
|||||||
expect($total)->equals(1);
|
expect($total)->equals(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItGeneratesSubscriberToken() {
|
||||||
|
$token = Subscriber::generateToken($this->data['email']);
|
||||||
|
expect(strlen($token))->equals(Subscriber::SUBSCRIBER_TOKEN_LENGTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItVerifiesSubscriberToken() {
|
||||||
|
$token = Subscriber::generateToken($this->data['email']);
|
||||||
|
expect(Subscriber::verifyToken($this->data['email'], $token))->true();
|
||||||
|
expect(Subscriber::verifyToken('fake@email.com', $token))->false();
|
||||||
|
}
|
||||||
|
|
||||||
|
function testVerifiedTokensOfDifferentLengths() {
|
||||||
|
$token = md5(AUTH_KEY . $this->data['email']);
|
||||||
|
expect(strlen($token))->notEquals(Subscriber::SUBSCRIBER_TOKEN_LENGTH);
|
||||||
|
expect(Subscriber::verifyToken($this->data['email'], $token))->true();
|
||||||
|
}
|
||||||
|
|
||||||
function _after() {
|
function _after() {
|
||||||
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
|
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
|
||||||
ORM::raw_execute('TRUNCATE ' . Segment::$_table);
|
ORM::raw_execute('TRUNCATE ' . Segment::$_table);
|
||||||
|
@@ -5,6 +5,7 @@ use MailPoet\Models\NewsletterLink;
|
|||||||
use MailPoet\Models\SendingQueue;
|
use MailPoet\Models\SendingQueue;
|
||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
use MailPoet\Newsletter\Links\Links;
|
use MailPoet\Newsletter\Links\Links;
|
||||||
|
use MailPoet\Newsletter\Shortcodes\Categories\Link;
|
||||||
use MailPoet\Router\Router;
|
use MailPoet\Router\Router;
|
||||||
|
|
||||||
class LinksTest extends MailPoetTest {
|
class LinksTest extends MailPoetTest {
|
||||||
@@ -46,6 +47,29 @@ class LinksTest extends MailPoetTest {
|
|||||||
expect($updated_content)->notContains('link');
|
expect($updated_content)->notContains('link');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItCreatesAndTransformsUrlDataObject() {
|
||||||
|
$subscriber_email = 'test@example.com';
|
||||||
|
$data = array(
|
||||||
|
'subscriber_id' => 1,
|
||||||
|
'subscriber_token' => Subscriber::generateToken($subscriber_email),
|
||||||
|
'queue_id' => 2,
|
||||||
|
'link_hash' => 'hash',
|
||||||
|
'preview' => false
|
||||||
|
);
|
||||||
|
$url_data_object = Links::createUrlDataObject(
|
||||||
|
$data['subscriber_id'],
|
||||||
|
$subscriber_email,
|
||||||
|
$data['queue_id'],
|
||||||
|
$data['link_hash'],
|
||||||
|
$data['preview']
|
||||||
|
);
|
||||||
|
// URL data object should be an indexed array
|
||||||
|
expect($url_data_object)->equals(array_values($data));
|
||||||
|
// transformed URL object should be an associative array
|
||||||
|
$transformed_url_data_object = Links::transformUrlDataObject($url_data_object);
|
||||||
|
expect($transformed_url_data_object)->equals($data);
|
||||||
|
}
|
||||||
|
|
||||||
function testItReplacesHashedLinksWithSubscriberData() {
|
function testItReplacesHashedLinksWithSubscriberData() {
|
||||||
$subscriber = Subscriber::create();
|
$subscriber = Subscriber::create();
|
||||||
$subscriber->hydrate(Fixtures::get('subscriber_template'));
|
$subscriber->hydrate(Fixtures::get('subscriber_template'));
|
||||||
@@ -70,6 +94,7 @@ class LinksTest extends MailPoetTest {
|
|||||||
preg_match_all('/data=(?P<data>.*?)"/', $result, $result);
|
preg_match_all('/data=(?P<data>.*?)"/', $result, $result);
|
||||||
foreach($result['data'] as $data) {
|
foreach($result['data'] as $data) {
|
||||||
$data = Router::decodeRequestData($data);
|
$data = Router::decodeRequestData($data);
|
||||||
|
$data = Links::transformUrlDataObject($data);
|
||||||
expect($data['subscriber_id'])->equals($subscriber->id);
|
expect($data['subscriber_id'])->equals($subscriber->id);
|
||||||
expect($data['queue_id'])->equals($queue->id);
|
expect($data['queue_id'])->equals($queue->id);
|
||||||
expect(isset($data['subscriber_token']))->true();
|
expect(isset($data['subscriber_token']))->true();
|
||||||
@@ -97,6 +122,52 @@ class LinksTest extends MailPoetTest {
|
|||||||
expect($newsltter_link->url)->equals('http://example.com');
|
expect($newsltter_link->url)->equals('http://example.com');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItMatchesHashedLinks() {
|
||||||
|
$regex = Links::getLinkRegex();
|
||||||
|
expect((boolean)preg_match($regex, '[some_tag]-123'))->false();
|
||||||
|
expect((boolean)preg_match($regex, '[some_tag]'))->false();
|
||||||
|
expect((boolean)preg_match($regex, '[mailpoet_click_data]-123'))->true();
|
||||||
|
expect((boolean)preg_match($regex, '[mailpoet_open_data]'))->true();
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItCanConvertOnlyHashedLinkShortcodes() {
|
||||||
|
// create newsletter link association
|
||||||
|
$newsletter_link = NewsletterLink::create();
|
||||||
|
$newsletter_link->newsletter_id = 1;
|
||||||
|
$newsletter_link->queue_id = 1;
|
||||||
|
$newsletter_link->hash = '90e56';
|
||||||
|
$newsletter_link->url = '[link:newsletter_view_in_browser_url]';
|
||||||
|
$newsletter_link = $newsletter_link->save();
|
||||||
|
$content = '
|
||||||
|
<a href="[mailpoet_click_data]-90e56">View in browser</a>
|
||||||
|
<a href="[mailpoet_click_data]-123">Some link</a>';
|
||||||
|
$result = Links::convertHashedLinksToShortcodesAndUrls($content);
|
||||||
|
expect($result)->contains($newsletter_link->url);
|
||||||
|
expect($result)->contains('[mailpoet_click_data]-123');
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItCanConvertAllHashedLinksToUrls() {
|
||||||
|
// create newsletter link associations
|
||||||
|
$newsletter_link_1 = NewsletterLink::create();
|
||||||
|
$newsletter_link_1->newsletter_id = 1;
|
||||||
|
$newsletter_link_1->queue_id = 1;
|
||||||
|
$newsletter_link_1->hash = '90e56';
|
||||||
|
$newsletter_link_1->url = '[link:newsletter_view_in_browser_url]';
|
||||||
|
$newsletter_link_1 = $newsletter_link_1->save();
|
||||||
|
$newsletter_link_2 = NewsletterLink::create();
|
||||||
|
$newsletter_link_2->newsletter_id = 1;
|
||||||
|
$newsletter_link_2->queue_id = 1;
|
||||||
|
$newsletter_link_2->hash = '123';
|
||||||
|
$newsletter_link_2->url = 'http://google.com';
|
||||||
|
$newsletter_link_2 = $newsletter_link_2->save();
|
||||||
|
$content = '
|
||||||
|
<a href="[mailpoet_click_data]-90e56">View in browser</a>
|
||||||
|
<a href="[mailpoet_click_data]-123">Some link</a>';
|
||||||
|
$result = Links::convertHashedLinksToShortcodesAndUrls($content, $convert_all = true);
|
||||||
|
expect($result)->contains($newsletter_link_1->url);
|
||||||
|
expect($result)->contains($newsletter_link_2->url);
|
||||||
|
}
|
||||||
|
|
||||||
function _after() {
|
function _after() {
|
||||||
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
|
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
|
||||||
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
|
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
|
||||||
|
@@ -94,13 +94,13 @@ class ShortcodesTest extends MailPoetTest {
|
|||||||
'<a data-post-id="10" href="#">another post</a>' .
|
'<a data-post-id="10" href="#">another post</a>' .
|
||||||
'<a href="#">not post</a>';
|
'<a href="#">not post</a>';
|
||||||
$result =
|
$result =
|
||||||
$shortcodes_object->process(array('[newsletter:subject]'));
|
$shortcodes_object->process(array('[newsletter:subject]'), $content);
|
||||||
expect($result[0])->equals($this->newsletter->subject);
|
expect($result[0])->equals($this->newsletter->subject);
|
||||||
$result =
|
$result =
|
||||||
$shortcodes_object->process(array('[newsletter:total]'), $content);
|
$shortcodes_object->process(array('[newsletter:total]'), $content);
|
||||||
expect($result[0])->equals(2);
|
expect($result[0])->equals(2);
|
||||||
$result =
|
$result =
|
||||||
$shortcodes_object->process(array('[newsletter:post_title]'));
|
$shortcodes_object->process(array('[newsletter:post_title]'), $content);
|
||||||
$wp_post = get_post($this->WP_post);
|
$wp_post = get_post($this->WP_post);
|
||||||
expect($result['0'])->equals($wp_post->post_title);
|
expect($result['0'])->equals($wp_post->post_title);
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use MailPoet\Models\Newsletter;
|
use MailPoet\Models\Newsletter;
|
||||||
|
use MailPoet\Models\NewsletterLink;
|
||||||
use MailPoet\Models\SendingQueue;
|
use MailPoet\Models\SendingQueue;
|
||||||
use MailPoet\Models\Setting;
|
use MailPoet\Models\Setting;
|
||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
@@ -9,7 +10,8 @@ use MailPoet\Router\Router;
|
|||||||
|
|
||||||
class ViewInBrowserTest extends MailPoetTest {
|
class ViewInBrowserTest extends MailPoetTest {
|
||||||
function __construct() {
|
function __construct() {
|
||||||
$this->newsletter = array(
|
$this->newsletter =
|
||||||
|
array(
|
||||||
'body' => json_decode(
|
'body' => json_decode(
|
||||||
'{
|
'{
|
||||||
"content": {
|
"content": {
|
||||||
@@ -41,7 +43,7 @@ class ViewInBrowserTest extends MailPoetTest {
|
|||||||
"blocks": [
|
"blocks": [
|
||||||
{
|
{
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"text": "<p>Rendered newsletter. Hello, [subscriber:firstname | default:reader] & [link:newsletter_view_in_browser_url]</p>"
|
"text": "<p>Rendered newsletter. Hello, [subscriber:firstname | default:reader]. <a href=\"[link:newsletter_view_in_browser_url]\">Unsubscribe</a> or visit <a href=\"http://google.com\">Google</a></p>"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -57,15 +59,11 @@ class ViewInBrowserTest extends MailPoetTest {
|
|||||||
'status' => 'active'
|
'status' => 'active'
|
||||||
);
|
);
|
||||||
$this->queue_rendered_newsletter_without_tracking = array(
|
$this->queue_rendered_newsletter_without_tracking = array(
|
||||||
'html' => 'Newsletter from queue. Hello, [subscriber:firstname] &
|
'html' => '<p>Newsletter from queue. Hello, [subscriber:firstname | default:reader]. <a href="[link:newsletter_view_in_browser_url]">Unsubscribe</a> or visit <a href="http://google.com">Google</a></p>'
|
||||||
[link:newsletter_view_in_browser_url]'
|
|
||||||
);
|
);
|
||||||
$this->queue_rendered_newsletter_with_tracking = array(
|
$this->queue_rendered_newsletter_with_tracking = array(
|
||||||
'html' => 'Newsletter from queue. Hello, [subscriber:firstname] &
|
'html' => '<p>Newsletter from queue. Hello, [subscriber:firstname | default:reader]. <a href="[mailpoet_click_data]-90e56">Unsubscribe</a> or visit <a href="[mailpoet_click_data]-i1893">Google</a></p>'
|
||||||
[mailpoet_click_data]-90e56'
|
|
||||||
);
|
);
|
||||||
// instantiate class
|
|
||||||
$this->view_in_browser = new ViewInBrowser();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function _before() {
|
function _before() {
|
||||||
@@ -85,6 +83,20 @@ class ViewInBrowserTest extends MailPoetTest {
|
|||||||
$queue->newsletter_rendered_body = $this->queue_rendered_newsletter_without_tracking;
|
$queue->newsletter_rendered_body = $this->queue_rendered_newsletter_without_tracking;
|
||||||
$queue->subscribers = array('processed' => array($subscriber->id));
|
$queue->subscribers = array('processed' => array($subscriber->id));
|
||||||
$this->queue = $queue->save();
|
$this->queue = $queue->save();
|
||||||
|
// create newsletter link associations
|
||||||
|
$newsletter_link_1 = NewsletterLink::create();
|
||||||
|
$newsletter_link_1->hash = '90e56';
|
||||||
|
$newsletter_link_1->url = '[link:newsletter_view_in_browser_url]';
|
||||||
|
$newsletter_link_1->newsletter_id = $this->newsletter->id;
|
||||||
|
$newsletter_link_1->queue_id = $this->queue->id;
|
||||||
|
$this->newsletter_link_1 = $newsletter_link_1->save();
|
||||||
|
$newsletter_link_2 = NewsletterLink::create();
|
||||||
|
$newsletter_link_2->hash = 'i1893';
|
||||||
|
$newsletter_link_2->url = 'http://google.com';
|
||||||
|
$newsletter_link_2->newsletter_id = $this->newsletter->id;
|
||||||
|
$newsletter_link_2->queue_id = $this->queue->id;
|
||||||
|
$this->newsletter_link_2 = $newsletter_link_2->save();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItRendersNewsletter() {
|
function testItRendersNewsletter() {
|
||||||
@@ -119,7 +131,7 @@ class ViewInBrowserTest extends MailPoetTest {
|
|||||||
expect($rendered_body)->contains(Router::NAME . '&endpoint=view_in_browser');
|
expect($rendered_body)->contains(Router::NAME . '&endpoint=view_in_browser');
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItProcessesLinksWhenTrackingIsEnabled() {
|
function testItRewritesLinksToRouterEndpointWhenTrackingIsEnabled() {
|
||||||
Setting::setValue('tracking.enabled', true);
|
Setting::setValue('tracking.enabled', true);
|
||||||
$queue = $this->queue;
|
$queue = $this->queue;
|
||||||
$queue->newsletter_rendered_body = $this->queue_rendered_newsletter_with_tracking;
|
$queue->newsletter_rendered_body = $this->queue_rendered_newsletter_with_tracking;
|
||||||
@@ -132,8 +144,38 @@ class ViewInBrowserTest extends MailPoetTest {
|
|||||||
expect($rendered_body)->contains(Router::NAME . '&endpoint=track');
|
expect($rendered_body)->contains(Router::NAME . '&endpoint=track');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItConvertsHashedLinksToUrlsWhenPreviewIsEnabledAndNewsletterWasSent() {
|
||||||
|
$queue = $this->queue;
|
||||||
|
$queue->newsletter_rendered_body = $this->queue_rendered_newsletter_with_tracking;
|
||||||
|
$rendered_body = ViewInBrowser::renderNewsletter(
|
||||||
|
$this->newsletter,
|
||||||
|
$this->subscriber,
|
||||||
|
$queue,
|
||||||
|
$preview = true
|
||||||
|
);
|
||||||
|
// hashed link should be replaced with a URL
|
||||||
|
expect($rendered_body)->notContains('[mailpoet_click_data]');
|
||||||
|
expect($rendered_body)->contains('<a href="http://google.com">');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function testReplacesLinkShortcodesWithUrlHashWhenPreviewIsEnabledAndNewsletterWasSent() {
|
||||||
|
$queue = $this->queue;
|
||||||
|
$queue->newsletter_rendered_body = $this->queue_rendered_newsletter_with_tracking;
|
||||||
|
$rendered_body = ViewInBrowser::renderNewsletter(
|
||||||
|
$this->newsletter,
|
||||||
|
$this->subscriber,
|
||||||
|
$queue,
|
||||||
|
$preview = true
|
||||||
|
);
|
||||||
|
// link shortcodes should be replaced with a hash (#)
|
||||||
|
expect($rendered_body)->notContains('[mailpoet_click_data]');
|
||||||
|
expect($rendered_body)->contains('<a href="#">');
|
||||||
|
}
|
||||||
|
|
||||||
function _after() {
|
function _after() {
|
||||||
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
||||||
|
ORM::raw_execute('TRUNCATE ' . NewsletterLink::$_table);
|
||||||
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
|
ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
|
||||||
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
|
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
|
||||||
}
|
}
|
||||||
|
@@ -37,17 +37,13 @@ class ViewInBrowserRouterTest extends MailPoetTest {
|
|||||||
|
|
||||||
function testItAbortsWhenBrowserPreviewDataIsMissing() {
|
function testItAbortsWhenBrowserPreviewDataIsMissing() {
|
||||||
$view_in_browser = Stub::make($this->view_in_browser, array(
|
$view_in_browser = Stub::make($this->view_in_browser, array(
|
||||||
'_abort' => Stub::exactly(3, function() { })
|
'_abort' => Stub::exactly(2, function () { })
|
||||||
), $this);
|
), $this);
|
||||||
// newsletter ID is required
|
// newsletter ID is required
|
||||||
$data = $this->browser_preview_data;
|
$data = $this->browser_preview_data;
|
||||||
unset($data['newsletter_id']);
|
unset($data['newsletter_id']);
|
||||||
$view_in_browser->_processBrowserPreviewData($data);
|
$view_in_browser->_processBrowserPreviewData($data);
|
||||||
// subscriber ID is required
|
// subscriber token is required if subscriber is provided
|
||||||
$data = $this->browser_preview_data;
|
|
||||||
unset($data['subscriber_id']);
|
|
||||||
$view_in_browser->_processBrowserPreviewData($data);
|
|
||||||
// subscriber token is required
|
|
||||||
$data = $this->browser_preview_data;
|
$data = $this->browser_preview_data;
|
||||||
unset($data['subscriber_token']);
|
unset($data['subscriber_token']);
|
||||||
$view_in_browser->_processBrowserPreviewData($data);
|
$view_in_browser->_processBrowserPreviewData($data);
|
||||||
@@ -55,50 +51,51 @@ class ViewInBrowserRouterTest extends MailPoetTest {
|
|||||||
|
|
||||||
function testItAbortsWhenBrowserPreviewDataIsInvalid() {
|
function testItAbortsWhenBrowserPreviewDataIsInvalid() {
|
||||||
$view_in_browser = Stub::make($this->view_in_browser, array(
|
$view_in_browser = Stub::make($this->view_in_browser, array(
|
||||||
'_abort' => Stub::exactly(3, function() { })
|
'_abort' => Stub::exactly(3, function () { })
|
||||||
), $this);
|
), $this);
|
||||||
// newsletter ID is invalid
|
// newsletter ID is invalid
|
||||||
$data = $this->browser_preview_data;
|
$data = $this->browser_preview_data;
|
||||||
$data['newsletter_id'] = 99;
|
$data['newsletter_id'] = 99;
|
||||||
$view_in_browser->_processBrowserPreviewData($data);
|
$view_in_browser->_processBrowserPreviewData($data);
|
||||||
// subscriber ID is invalid
|
// subscriber token is invalid
|
||||||
$data = $this->browser_preview_data;
|
$data = $this->browser_preview_data;
|
||||||
$data['subscriber_id'] = 99;
|
$data['subscriber_token'] = false;
|
||||||
$view_in_browser->_processBrowserPreviewData($data);
|
$view_in_browser->_processBrowserPreviewData($data);
|
||||||
// subscriber token is invalid
|
// subscriber token is invalid
|
||||||
$data = $this->browser_preview_data;
|
$data = $this->browser_preview_data;
|
||||||
$data['subscriber_token'] = 'invalid';
|
$data['subscriber_token'] = 'invalid';
|
||||||
$view_in_browser->_processBrowserPreviewData($data);
|
$view_in_browser->_processBrowserPreviewData($data);
|
||||||
|
// subscriber has not received the newsletter
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItFailsValidationWhenSubscriberTokenDoesNotMatch() {
|
function testItFailsValidationWhenSubscriberTokenDoesNotMatch() {
|
||||||
$data = (object)array_merge(
|
$subscriber = $this->subscriber;
|
||||||
|
$subscriber->email = 'random@email.com';
|
||||||
|
$subscriber->save();
|
||||||
|
$data = (object) array_merge(
|
||||||
$this->browser_preview_data,
|
$this->browser_preview_data,
|
||||||
array(
|
array(
|
||||||
'queue' => $this->queue,
|
'queue' => $this->queue,
|
||||||
'subscriber' => $this->subscriber,
|
'subscriber' => $subscriber,
|
||||||
'newsletter' => $this->newsletter
|
'newsletter' => $this->newsletter
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
$data->subscriber->email = 'random@email.com';
|
|
||||||
expect($this->view_in_browser->_validateBrowserPreviewData($data))->false();
|
expect($this->view_in_browser->_validateBrowserPreviewData($data))->false();
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItFailsValidationWhenSubscriberIsNotOnProcessedList() {
|
function testItFailsValidationWhenSubscriberIsNotOnProcessedList() {
|
||||||
$data = (object)array_merge(
|
$data = (object) $this->browser_preview_data;
|
||||||
$this->browser_preview_data,
|
$result = $this->view_in_browser->_validateBrowserPreviewData($data);
|
||||||
array(
|
expect($result)->notEmpty();
|
||||||
'queue' => $this->queue,
|
$queue = $this->queue;
|
||||||
'subscriber' => $this->subscriber,
|
$queue->subscribers = array('processed' => array());
|
||||||
'newsletter' => $this->newsletter
|
$queue->save();
|
||||||
)
|
$result = $this->view_in_browser->_validateBrowserPreviewData($data);
|
||||||
);
|
expect($result)->false();
|
||||||
$data->subscriber->id = 99;
|
|
||||||
expect($this->view_in_browser->_validateBrowserPreviewData($data))->false();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItDoesNotRequireWpUsersToBeOnProcessedListWhenPreviewIsEnabled() {
|
function testItDoesNotRequireWpUsersToBeOnProcessedListWhenPreviewIsEnabled() {
|
||||||
$data = (object)array_merge(
|
$data = (object) array_merge(
|
||||||
$this->browser_preview_data,
|
$this->browser_preview_data,
|
||||||
array(
|
array(
|
||||||
'queue' => $this->queue,
|
'queue' => $this->queue,
|
||||||
@@ -120,7 +117,7 @@ class ViewInBrowserRouterTest extends MailPoetTest {
|
|||||||
|
|
||||||
function testItReturnsViewActionResult() {
|
function testItReturnsViewActionResult() {
|
||||||
$view_in_browser = Stub::make($this->view_in_browser, array(
|
$view_in_browser = Stub::make($this->view_in_browser, array(
|
||||||
'_displayNewsletter' => Stub::exactly(1, function() { })
|
'_displayNewsletter' => Stub::exactly(1, function () { })
|
||||||
), $this);
|
), $this);
|
||||||
$view_in_browser->data = $view_in_browser->_processBrowserPreviewData($this->browser_preview_data);
|
$view_in_browser->data = $view_in_browser->_processBrowserPreviewData($this->browser_preview_data);
|
||||||
$view_in_browser->view();
|
$view_in_browser->view();
|
||||||
|
Reference in New Issue
Block a user