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', ]; // create newsletter $newsletter = Newsletter::create(); $newsletter->hydrate($newsletterData); $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->sendingTask = $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->sendingTask->id; $newsletterLink1->save(); $newsletterLink2 = NewsletterLink::create(); $newsletterLink2->hash = 'i1893'; $newsletterLink2->url = 'http://google.com'; $newsletterLink2->newsletterId = $this->newsletter->id; $newsletterLink2->queueId = $this->sendingTask->id; $newsletterLink2->save(); $this->settings = $this->diContainer->get(SettingsController::class); $this->viewInBrowserRenderer = $this->diContainer->get(ViewInBrowserRenderer::class); } public function testItRendersNewsletter() { $renderedBody = $this->viewInBrowserRenderer->render( $preview = false, $this->newsletter, $this->subscriber, $queue = null ); expect($renderedBody)->regExp('/Rendered newsletter/'); } public function testItReusesRenderedNewsletterBodyWhenQueueExists() { $emoji = $this->make(Emoji::class, [ 'decodeEmojisInBody' => Expected::once(function ($params) { return $params; }), ]); $this->settings->set('tracking.enabled', false); $viewInBrowser = new ViewInBrowserRenderer( $emoji, $this->diContainer->get(SettingsController::class), $this->diContainer->get(Renderer::class) ); $renderedBody = $viewInBrowser->render( $preview = false, $this->newsletter, $this->subscriber, $this->sendingTask->queue() ); expect($renderedBody)->regExp('/Newsletter from queue/'); } public function testItConvertsShortcodes() { $this->settings->set('tracking.enabled', false); $renderedBody = $this->viewInBrowserRenderer->render( $preview = false, $this->newsletter, $this->subscriber, $this->sendingTask->queue() ); expect($renderedBody)->contains('Hello, First'); expect($renderedBody)->contains(Router::NAME . '&endpoint=view_in_browser'); } public function testItRewritesLinksToRouterEndpointWhenTrackingIsEnabled() { $this->settings->set('tracking.enabled', true); $queue = $this->sendingTask->queue(); $queue->newsletterRenderedBody = $this->queueRenderedNewsletterWithTracking; $renderedBody = $this->viewInBrowserRenderer->render( $preview = false, $this->newsletter, $this->subscriber, $queue ); expect($renderedBody)->contains(Router::NAME . '&endpoint=track'); } public function testItConvertsHashedLinksToUrlsWhenPreviewIsEnabledAndNewsletterWasSent() { $queue = $this->sendingTask->queue(); $queue->newsletterRenderedBody = $this->queueRenderedNewsletterWithTracking; $renderedBody = $this->viewInBrowserRenderer->render( $preview = true, $this->newsletter, $this->subscriber, $queue ); // hashed link should be replaced with a URL expect($renderedBody)->notContains('[mailpoet_click_data]'); expect($renderedBody)->contains(''); } public function testRemovesOpenTrackingTagWhenPreviewIsEnabledAndNewsletterWasSent() { $queue = $this->sendingTask->queue(); $queue->newsletterRenderedBody = $this->queueRenderedNewsletterWithTracking; $renderedBody = $this->viewInBrowserRenderer->render( $preview = true, $this->newsletter, $this->subscriber, $queue ); // 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); } }