tracking = $this->diContainer->get(GATracking::class); $this->internalHost = 'newsletters.mailpoet.com'; $this->gaCampaign = 'Spring email'; $this->link = add_query_arg(['foo' => 'bar', 'baz' => 'xyz'], 'http://www.mailpoet.com/'); $this->renderedNewsletter = [ 'html' => '
Click here. Do not process this [link:some_link_shortcode]
', 'text' => '[Click here](' . $this->link . '). [Do not process this](http://somehost.com/fff/?abc=123&email=[subscriber:email]) [link:some_link_shortcode]', ]; $this->newsletter = (new NewsletterFactory())->withGaCampaign($this->gaCampaign)->create(); } public function testItConditionallyAppliesGATracking() { // No process (empty GA campaign) $newsletter = (new NewsletterFactory())->create(); $result = $this->tracking->applyGATracking($this->renderedNewsletter, $newsletter, $this->internalHost); expect($result)->equals($this->renderedNewsletter); // Process (filled GA campaign) $result = $this->tracking->applyGATracking($this->renderedNewsletter, $this->newsletter, $this->internalHost); expect($result)->notEquals($this->renderedNewsletter); } public function testItGetsGACampaignFromParentNewsletterForPostNotifications() { $notificationHistory = (new NewsletterFactory()) ->withType(NewsletterEntity::TYPE_NOTIFICATION_HISTORY) ->withParent($this->newsletter) ->create(); $result = $this->tracking->applyGATracking($this->renderedNewsletter, $notificationHistory, $this->internalHost); expect($result)->notEquals($this->renderedNewsletter); } public function testItCanAddGAParamsToLinks() { $result = $this->tracking->applyGATracking($this->renderedNewsletter, $this->newsletter, $this->internalHost); expect($result['text'])->stringContainsString('utm_campaign=' . urlencode($this->gaCampaign)); expect($result['html'])->stringContainsString('utm_campaign=' . urlencode($this->gaCampaign)); } public function testItKeepsShorcodes() { $result = $this->tracking->applyGATracking($this->renderedNewsletter, $this->newsletter, $this->internalHost); expect($result['text'])->stringContainsString('email=[subscriber:email]'); expect($result['html'])->stringContainsString('email=[subscriber:email]'); } public function _after() { $this->truncateEntity(NewsletterEntity::class); } }