newsletter = [ 'body' => json_decode( '{ "content": { "type": "container", "orientation": "vertical", "styles": { "block": { "backgroundColor": "transparent" } }, "blocks": [ { "type": "container", "orientation": "horizontal", "styles": { "block": { "backgroundColor": "transparent" } }, "blocks": [ { "type": "container", "orientation": "vertical", "styles": { "block": { "backgroundColor": "transparent" } }, "blocks": [ { "type": "text", "text": "

Rendered newsletter. Hello, [subscriber:firstname | default:reader]. Unsubscribe or visit Google

" } ] } ] } ] } }', true), 'id' => 1, 'subject' => 'Some subject', 'preheader' => 'Some preheader', 'type' => 'standard', 'status' => 'active', ]; $this->queueRenderedNewsletterWithoutTracking = [ 'html' => '

Newsletter from queue. Hello, [subscriber:firstname | default:reader]. Unsubscribe or visit Google

', 'text' => 'test', ]; $this->queueRenderedNewsletterWithTracking = [ 'html' => '

Newsletter from queue. Hello, [subscriber:firstname | default:reader]. Unsubscribe or visit Google

', 'text' => 'test', ]; $this->emoji = new Emoji(); $this->viewInBrowser = new ViewInBrowserRenderer($this->emoji, false); // create newsletter $newsletter = Newsletter::create(); $newsletter->hydrate($this->newsletter); $this->newsletter = $newsletter->save(); // create subscriber $subscriber = Subscriber::create(); $subscriber->email = 'test@example.com'; $subscriber->firstName = 'First'; $subscriber->lastName = 'Last'; $this->subscriber = $subscriber->save(); // create queue $queue = SendingTask::create(); $queue->newsletterId = $newsletter->id; $queue->newsletterRenderedBody = $this->queueRenderedNewsletterWithoutTracking; $queue->setSubscribers([$subscriber->id]); $this->queue = $queue->save(); // create newsletter link associations $newsletterLink1 = NewsletterLink::create(); $newsletterLink1->hash = '90e56'; $newsletterLink1->url = '[link:newsletter_view_in_browser_url]'; $newsletterLink1->newsletterId = $this->newsletter->id; $newsletterLink1->queueId = $this->queue->id; $this->newsletterLink1 = $newsletterLink1->save(); $newsletterLink2 = NewsletterLink::create(); $newsletterLink2->hash = 'i1893'; $newsletterLink2->url = 'http://google.com'; $newsletterLink2->newsletterId = $this->newsletter->id; $newsletterLink2->queueId = $this->queue->id; $this->newsletterLink2 = $newsletterLink2->save(); } public function testItRendersNewsletter() { $renderedBody = $this->viewInBrowser->renderNewsletter( $this->newsletter, $this->subscriber, $queue = false, $preview = false ); expect($renderedBody)->regExp('/Rendered newsletter/'); } public function testItReusesRenderedNewsletterBodyWhenQueueExists() { $emoji = $this->make( Emoji::class, ['decodeEmojisInBody' => Expected::once(function ($params) { return $params; })] ); $viewInBrowser = new ViewInBrowserRenderer($emoji, false); $renderedBody = $viewInBrowser->renderNewsletter( $this->newsletter, $this->subscriber, $this->queue, $preview = false ); expect($renderedBody)->regExp('/Newsletter from queue/'); } public function testItConvertsShortcodes() { $settings = SettingsController::getInstance(); $settings->set('tracking.enabled', false); $renderedBody = $this->viewInBrowser->renderNewsletter( $this->newsletter, $this->subscriber, $this->queue, $preview = false ); expect($renderedBody)->contains('Hello, First'); expect($renderedBody)->contains(Router::NAME . '&endpoint=view_in_browser'); } public function testItRewritesLinksToRouterEndpointWhenTrackingIsEnabled() { $settings = SettingsController::getInstance(); $settings->set('tracking.enabled', true); $viewInBrowser = new ViewInBrowserRenderer($this->emoji, true); $queue = $this->queue; $queue->newsletterRenderedBody = $this->queueRenderedNewsletterWithTracking; $renderedBody = $viewInBrowser->renderNewsletter( $this->newsletter, $this->subscriber, $queue, $preview = false ); expect($renderedBody)->contains(Router::NAME . '&endpoint=track'); } public function testItConvertsHashedLinksToUrlsWhenPreviewIsEnabledAndNewsletterWasSent() { $queue = $this->queue; $queue->newsletterRenderedBody = $this->queueRenderedNewsletterWithTracking; $renderedBody = $this->viewInBrowser->renderNewsletter( $this->newsletter, $this->subscriber, $queue, $preview = true ); // hashed link should be replaced with a URL expect($renderedBody)->notContains('[mailpoet_click_data]'); expect($renderedBody)->contains(''); } public function testRemovesOpenTrackingTagWhenPreviewIsEnabledAndNewsletterWasSent() { $queue = $this->queue; $queue->newsletterRenderedBody = $this->queueRenderedNewsletterWithTracking; $renderedBody = $this->viewInBrowser->renderNewsletter( $this->newsletter, $this->subscriber, $queue, $preview = true ); // open tracking data tag should be removed expect($renderedBody)->notContains('[mailpoet_open_data]'); expect($renderedBody)->contains(''); } public function _after() { ORM::raw_execute('TRUNCATE ' . Newsletter::$_table); ORM::raw_execute('TRUNCATE ' . NewsletterLink::$_table); ORM::raw_execute('TRUNCATE ' . Subscriber::$_table); ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table); ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table); } }