Rename subscriber cookie, keep support for the legacy name

[MAILPOET-3924]
This commit is contained in:
Jan Jakes
2021-12-10 10:40:59 +01:00
committed by Veljko V
parent 58fdfd6be1
commit 55ed81c68d
3 changed files with 50 additions and 7 deletions

View File

@@ -5,7 +5,8 @@ namespace MailPoet\Statistics\Track;
use MailPoet\Util\Cookies;
class SubscriberCookie {
const COOKIE_NAME = 'mailpoet_abandoned_cart_tracking';
const COOKIE_NAME = 'mailpoet_subscriber';
const COOKIE_NAME_LEGACY = 'mailpoet_abandoned_cart_tracking';
const COOKIE_EXPIRY = 10 * 365 * 24 * 60 * 60; // 10 years (~ no expiry)
/** @var Cookies */
@@ -18,10 +19,18 @@ class SubscriberCookie {
}
public function getSubscriberId(): ?int {
$data = $this->cookies->get(self::COOKIE_NAME);
return is_array($data) && $data['subscriber_id']
? (int)$data['subscriber_id']
: null;
$subscriberId = $this->getSubscriberIdFromCookie(self::COOKIE_NAME);
if ($subscriberId) {
return $subscriberId;
}
$subscriberId = $this->getSubscriberIdFromCookie(self::COOKIE_NAME_LEGACY);
if ($subscriberId) {
$this->setSubscriberId($subscriberId);
$this->cookies->delete(self::COOKIE_NAME_LEGACY);
return $subscriberId;
}
return null;
}
public function setSubscriberId(int $subscriberId): void {
@@ -34,4 +43,11 @@ class SubscriberCookie {
]
);
}
private function getSubscriberIdFromCookie(string $cookieName): ?int {
$data = $this->cookies->get($cookieName);
return is_array($data) && $data['subscriber_id']
? (int)$data['subscriber_id']
: null;
}
}

View File

@@ -2,6 +2,7 @@
namespace MailPoet\AutomaticEmails\WooCommerce\Events;
use Codeception\Stub;
use MailPoet\Statistics\Track\SubscriberCookie;
use MailPoet\Util\Cookies;
use MailPoet\WooCommerce\Helper as WooCommerceHelper;
@@ -78,7 +79,7 @@ class AbandonedCartPageVisitTrackerTest extends \MailPoetTest {
$this->wp->method('wpGetCurrentUser')->willReturn(
$this->makeEmpty(WP_User::class, ['exists' => false])
);
$_COOKIE['mailpoet_abandoned_cart_tracking'] = json_encode(['subscriber_id' => '123']);
$_COOKIE['mailpoet_subscriber'] = json_encode(['subscriber_id' => '123']);
$hourAgoTimestamp = $this->currentTime->getTimestamp() - 60 * 60;
$this->sessionStore['mailpoet_last_visit_timestamp'] = $hourAgoTimestamp;
@@ -86,6 +87,32 @@ class AbandonedCartPageVisitTrackerTest extends \MailPoetTest {
expect($this->sessionStore['mailpoet_last_visit_timestamp'])->same($this->currentTime->getTimestamp());
}
public function testItTracksByLegacyCookie() {
$this->wp->method('isAdmin')->willReturn(false);
$this->wp->method('wpGetCurrentUser')->willReturn(
$this->makeEmpty(WP_User::class, ['exists' => false])
);
$cookiesMock = $this->createMock(Cookies::class);
$cookiesMock->method('get')->willReturnCallback(function (string $name) {
if ($name === 'mailpoet_abandoned_cart_tracking') {
return ['subscriber_id' => '123'];
}
return null;
});
$cookiesMock->expects($this->once())->method('set')->with('mailpoet_subscriber', ['subscriber_id' => '123']);
$cookiesMock->expects($this->once())->method('delete')->with('mailpoet_abandoned_cart_tracking');
$pageVisitTracker = Stub::copy($this->pageVisitTracker, [
'subscriberCookie' => new SubscriberCookie($cookiesMock),
]);
$hourAgoTimestamp = $this->currentTime->getTimestamp() - 60 * 60;
$this->sessionStore['mailpoet_last_visit_timestamp'] = $hourAgoTimestamp;
$pageVisitTracker->trackVisit();
expect($this->sessionStore['mailpoet_last_visit_timestamp'])->same($this->currentTime->getTimestamp());
}
public function testItDoesNotTrackWhenUserNotFound() {
$this->wp->method('isAdmin')->willReturn(false);
$this->wp->method('wpGetCurrentUser')->willReturn(

View File

@@ -144,7 +144,7 @@ class AbandonedCartTest extends \MailPoetTest {
])
);
$_COOKIE['mailpoet_abandoned_cart_tracking'] = json_encode([
$_COOKIE['mailpoet_subscriber'] = json_encode([
'subscriber_id' => $subscriber->id,
]);