Replace Subscriber model with Subscriber entity in WPTest

[MAILPOET-5066]
This commit is contained in:
Rodrigo Primo
2023-02-15 16:44:28 -03:00
committed by Brezo Cordero
parent 95568e770b
commit 05a8d698d2

View File

@@ -5,15 +5,17 @@ namespace MailPoet\Test\Segments;
require_once(ABSPATH . 'wp-admin/includes/user.php'); require_once(ABSPATH . 'wp-admin/includes/user.php');
use Codeception\Stub; use Codeception\Stub;
use MailPoet\Entities\SegmentEntity;
use MailPoet\Entities\SubscriberEntity; use MailPoet\Entities\SubscriberEntity;
use MailPoet\Entities\SubscriberSegmentEntity;
use MailPoet\Models\Segment; use MailPoet\Models\Segment;
use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberSegment; use MailPoet\Models\SubscriberSegment;
use MailPoet\Segments\WP; use MailPoet\Segments\WP;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\ConfirmationEmailMailer; use MailPoet\Subscribers\ConfirmationEmailMailer;
use MailPoet\Subscribers\SubscribersRepository; use MailPoet\Subscribers\SubscribersRepository;
use MailPoet\Subscription\Registration; use MailPoet\Subscription\Registration;
use MailPoet\Test\DataFactories\Subscriber as SubscriberFactory;
use MailPoet\WooCommerce\Helper; use MailPoet\WooCommerce\Helper;
use MailPoet\WooCommerce\Subscription; use MailPoet\WooCommerce\Subscription;
use MailPoet\WP\Functions; use MailPoet\WP\Functions;
@@ -30,6 +32,12 @@ class WPTest extends \MailPoetTest {
/** @var WP */ /** @var WP */
private $wpSegment; private $wpSegment;
/** @var SubscriberFactory */
private $subscriberFactory;
/** @var SubscribersRepository */
private $subscribersRepository;
public function _before(): void { public function _before(): void {
parent::_before(); parent::_before();
$this->settings = $this->diContainer->get(SettingsController::class); $this->settings = $this->diContainer->get(SettingsController::class);
@@ -37,32 +45,36 @@ class WPTest extends \MailPoetTest {
$currentTime = Carbon::now(); $currentTime = Carbon::now();
Carbon::setTestNow($currentTime); Carbon::setTestNow($currentTime);
$this->cleanData(); $this->cleanData();
$this->subscriberFactory = new SubscriberFactory();
$this->subscribersRepository = $this->diContainer->get(SubscribersRepository::class);
} }
public function testSynchronizeUserKeepsStatusOfOldUser(): void { public function testSynchronizeUserKeepsStatusOfOldUser(): void {
$randomNumber = rand(); $randomNumber = rand();
$id = $this->insertUser($randomNumber); $id = $this->insertUser($randomNumber);
$subscriber = Subscriber::createOrUpdate([ $subscriber = $this->subscriberFactory
'email' => 'user-sync-test' . $randomNumber . '@example.com', ->withEmail('user-sync-test' . $randomNumber . '@example.com')
'status' => Subscriber::STATUS_SUBSCRIBED, ->withStatus(SubscriberEntity::STATUS_SUBSCRIBED)
'wp_user_id' => $id, ->withWpUserId($id)
]); ->create();
$this->wpSegment->synchronizeUser($id); $this->wpSegment->synchronizeUser($id);
$dbSubscriber = Subscriber::findOne($subscriber->id); $dbSubscriber = $this->subscribersRepository->findOneById($subscriber->getId());
verify($dbSubscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED); $this->assertInstanceOf(SubscriberEntity::class, $dbSubscriber);
verify($dbSubscriber->getStatus())->equals(SubscriberEntity::STATUS_SUBSCRIBED);
} }
public function testSynchronizeUserKeepsStatusOfOldSubscriber(): void { public function testSynchronizeUserKeepsStatusOfOldSubscriber(): void {
$randomNumber = rand(); $randomNumber = rand();
$subscriber = Subscriber::createOrUpdate([ $subscriber = $this->subscriberFactory
'email' => 'user-sync-test' . $randomNumber . '@example.com', ->withEmail('user-sync-test' . $randomNumber . '@example.com')
'status' => Subscriber::STATUS_SUBSCRIBED, ->withStatus(SubscriberEntity::STATUS_SUBSCRIBED)
'wp_user_id' => null, ->create();
]);
$id = $this->insertUser($randomNumber); $id = $this->insertUser($randomNumber);
$this->wpSegment->synchronizeUser($id); $this->wpSegment->synchronizeUser($id);
$dbSubscriber = Subscriber::where('wp_user_id', $id)->findOne(); $dbSubscriber = $this->subscribersRepository->findOneBy(['wpUserId' => $id]);
verify($dbSubscriber->status)->equals($subscriber->status); $this->assertInstanceOf(SubscriberEntity::class, $dbSubscriber);
verify($dbSubscriber->getStatus())->equals($subscriber->getStatus());
} }
public function testSynchronizeUserStatusIsSubscribedForNewUserWithSignUpConfirmationDisabled(): void { public function testSynchronizeUserStatusIsSubscribedForNewUserWithSignUpConfirmationDisabled(): void {
@@ -71,7 +83,7 @@ class WPTest extends \MailPoetTest {
$id = $this->insertUser($randomNumber); $id = $this->insertUser($randomNumber);
$this->wpSegment->synchronizeUser($id); $this->wpSegment->synchronizeUser($id);
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne(); $wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
verify($wpSubscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED); verify($wpSubscriber->status)->equals(SubscriberEntity::STATUS_SUBSCRIBED);
} }
public function testSynchronizeUserStatusIsUnconfirmedForNewUserWithSignUpConfirmationEnabled(): void { public function testSynchronizeUserStatusIsUnconfirmedForNewUserWithSignUpConfirmationEnabled(): void {
@@ -80,7 +92,7 @@ class WPTest extends \MailPoetTest {
$id = $this->insertUser($randomNumber); $id = $this->insertUser($randomNumber);
$this->wpSegment->synchronizeUser($id); $this->wpSegment->synchronizeUser($id);
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne(); $wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
verify($wpSubscriber->status)->equals(Subscriber::STATUS_UNCONFIRMED); verify($wpSubscriber->status)->equals(SubscriberEntity::STATUS_UNCONFIRMED);
} }
public function testSynchronizeUsersStatusIsSubscribedForNewUsersWithSignUpConfirmationDisabled(): void { public function testSynchronizeUsersStatusIsSubscribedForNewUsersWithSignUpConfirmationDisabled(): void {
@@ -88,10 +100,16 @@ class WPTest extends \MailPoetTest {
$this->insertUser(); $this->insertUser();
$this->insertUser(); $this->insertUser();
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$subscribers = Subscriber::whereLike("email", "user-sync-test%")->findMany(); $subscribers = $this->entityManager
->getRepository(SubscriberEntity::class)
->createQueryBuilder('s')
->where('s.email LIKE :email')
->setParameter('email', 'user-sync-test%')
->getQuery()
->getResult();
verify(count($subscribers))->equals(2); verify(count($subscribers))->equals(2);
verify($subscribers[0]->status)->equals(Subscriber::STATUS_SUBSCRIBED); verify($subscribers[0]->getStatus())->equals(SubscriberEntity::STATUS_SUBSCRIBED);
verify($subscribers[1]->status)->equals(Subscriber::STATUS_SUBSCRIBED); verify($subscribers[1]->getStatus())->equals(SubscriberEntity::STATUS_SUBSCRIBED);
} }
public function testSynchronizeUsersStatusIsUnconfirmedForNewUsersWithSignUpConfirmationEnabled(): void { public function testSynchronizeUsersStatusIsUnconfirmedForNewUsersWithSignUpConfirmationEnabled(): void {
@@ -99,10 +117,17 @@ class WPTest extends \MailPoetTest {
$this->insertUser(); $this->insertUser();
$this->insertUser(); $this->insertUser();
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$subscribers = Subscriber::whereLike("email", "user-sync-test%")->findMany(); $subscribers = $this->entityManager
->getRepository(SubscriberEntity::class)
->createQueryBuilder('s')
->where('s.email LIKE :email')
->setParameter('email', 'user-sync-test%')
->getQuery()
->getResult();
verify(count($subscribers))->equals(2); verify(count($subscribers))->equals(2);
verify($subscribers[0]->status)->equals(Subscriber::STATUS_UNCONFIRMED); verify($subscribers[0]->getStatus())->equals(SubscriberEntity::STATUS_UNCONFIRMED);
verify($subscribers[1]->status)->equals(Subscriber::STATUS_UNCONFIRMED); verify($subscribers[1]->getStatus())->equals(SubscriberEntity::STATUS_UNCONFIRMED);
} }
public function testItSendsConfirmationEmailWhenSignupConfirmationAndSubscribeOnRegisterEnabled(): void { public function testItSendsConfirmationEmailWhenSignupConfirmationAndSubscribeOnRegisterEnabled(): void {
@@ -153,7 +178,7 @@ class WPTest extends \MailPoetTest {
$registration->onRegister([], $user['user_login'], $user['user_email']); $registration->onRegister([], $user['user_login'], $user['user_email']);
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne(); $wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
verify($wpSubscriber->countConfirmations)->equals(0); verify($wpSubscriber->countConfirmations)->equals(0);
verify($wpSubscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED); verify($wpSubscriber->status)->equals(SubscriberEntity::STATUS_SUBSCRIBED);
// signup confirmation enabled, subscribe on-register disabled // signup confirmation enabled, subscribe on-register disabled
$this->settings->set('signup_confirmation.enabled', '1'); $this->settings->set('signup_confirmation.enabled', '1');
@@ -163,7 +188,7 @@ class WPTest extends \MailPoetTest {
$this->wpSegment->synchronizeUser($id); $this->wpSegment->synchronizeUser($id);
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne(); $wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
verify($wpSubscriber->countConfirmations)->equals(0); verify($wpSubscriber->countConfirmations)->equals(0);
verify($wpSubscriber->status)->equals(Subscriber::STATUS_UNCONFIRMED); verify($wpSubscriber->status)->equals(SubscriberEntity::STATUS_UNCONFIRMED);
} }
public function testItSynchronizeNewUsers(): void { public function testItSynchronizeNewUsers(): void {
@@ -178,16 +203,16 @@ class WPTest extends \MailPoetTest {
public function testItSynchronizesPresubscribedUsers(): void { public function testItSynchronizesPresubscribedUsers(): void {
$randomNumber = 12345; $randomNumber = 12345;
$subscriber = Subscriber::createOrUpdate([ $subscriber = $this->subscriberFactory
'email' => 'user-sync-test' . $randomNumber . '@example.com', ->withEmail('user-sync-test' . $randomNumber . '@example.com')
'status' => Subscriber::STATUS_SUBSCRIBED, ->withStatus(SubscriberEntity::STATUS_SUBSCRIBED)
]); ->create();
$id = $this->insertUser($randomNumber); $id = $this->insertUser($randomNumber);
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne(); $wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
verify($wpSubscriber)->notEmpty(); verify($wpSubscriber)->notEmpty();
verify($wpSubscriber->id)->equals($subscriber->id); verify($wpSubscriber->id)->equals($subscriber->getId());
verify($wpSubscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED); verify($wpSubscriber->status)->equals(SubscriberEntity::STATUS_SUBSCRIBED);
} }
public function testItSynchronizeEmails(): void { public function testItSynchronizeEmails(): void {
@@ -195,8 +220,9 @@ class WPTest extends \MailPoetTest {
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$this->updateWPUserEmail($id, 'user-sync-test-xx@email.com'); $this->updateWPUserEmail($id, 'user-sync-test-xx@email.com');
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne(); $subscriber = $this->subscribersRepository->findOneBy(['wpUserId' => $id]);
verify($subscriber->email)->equals('user-sync-test-xx@email.com'); $this->assertInstanceOf(SubscriberEntity::class, $subscriber);
verify($subscriber->getEmail())->equals('user-sync-test-xx@email.com');
} }
public function testRemovesUsersWithEmptyEmailsFromSunscribersDuringSynchronization(): void { public function testRemovesUsersWithEmptyEmailsFromSunscribersDuringSynchronization(): void {
@@ -204,7 +230,7 @@ class WPTest extends \MailPoetTest {
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$this->updateWPUserEmail($id, ''); $this->updateWPUserEmail($id, '');
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
verify(Subscriber::where('wp_user_id', $id)->count())->equals(0); verify($this->subscribersRepository->findOneBy(['wpUserId' => $id]))->null();
$this->deleteWPUser($id); $this->deleteWPUser($id);
} }
@@ -213,7 +239,7 @@ class WPTest extends \MailPoetTest {
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$this->updateWPUserEmail($id, 'ivalid.@email.com'); $this->updateWPUserEmail($id, 'ivalid.@email.com');
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
verify(Subscriber::where('wp_user_id', $id)->count())->equals(0); verify($this->subscribersRepository->findOneBy(['wpUserId' => $id]))->null();
$this->deleteWPUser($id); $this->deleteWPUser($id);
} }
@@ -221,8 +247,7 @@ class WPTest extends \MailPoetTest {
$id = $this->insertUser(); $id = $this->insertUser();
$this->updateWPUserEmail($id, ''); $this->updateWPUserEmail($id, '');
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne(); verify($this->subscribersRepository->findOneBy(['wpUserId' => $id]))->null();
verify($subscriber)->empty();
$this->deleteWPUser($id); $this->deleteWPUser($id);
} }
@@ -234,8 +259,9 @@ class WPTest extends \MailPoetTest {
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
update_user_meta((int)$id, 'first_name', $firstName); update_user_meta((int)$id, 'first_name', $firstName);
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne(); $subscriber = $this->subscribersRepository->findOneBy(['wpUserId' => $id]);
verify($subscriber->firstName)->equals($trucantedFirstName); $this->assertInstanceOf(SubscriberEntity::class, $subscriber);
verify($subscriber->getFirstName())->equals($trucantedFirstName);
} }
public function testItSynchronizeLastNames(): void { public function testItSynchronizeLastNames(): void {
@@ -246,8 +272,9 @@ class WPTest extends \MailPoetTest {
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
update_user_meta((int)$id, 'last_name', $lastName); update_user_meta((int)$id, 'last_name', $lastName);
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne(); $subscriber = $this->subscribersRepository->findOneBy(['wpUserId' => $id]);
verify($subscriber->lastName)->equals($trucantedLastName); $this->assertInstanceOf(SubscriberEntity::class, $subscriber);
verify($subscriber->getLastName())->equals($trucantedLastName);
} }
public function testItSynchronizeFirstNamesUsingDisplayName(): void { public function testItSynchronizeFirstNamesUsingDisplayName(): void {
@@ -255,8 +282,9 @@ class WPTest extends \MailPoetTest {
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$this->updateWPUserDisplayName($id, 'First name'); $this->updateWPUserDisplayName($id, 'First name');
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne(); $subscriber = $this->subscribersRepository->findOneBy(['wpUserId' => $id]);
verify($subscriber->firstName)->equals('First name'); $this->assertInstanceOf(SubscriberEntity::class, $subscriber);
verify($subscriber->getFirstName())->equals('First name');
} }
public function testItSynchronizeFirstNamesFromMetaNotDisplayName(): void { public function testItSynchronizeFirstNamesFromMetaNotDisplayName(): void {
@@ -264,8 +292,9 @@ class WPTest extends \MailPoetTest {
update_user_meta((int)$id, 'first_name', 'First name'); update_user_meta((int)$id, 'first_name', 'First name');
$this->updateWPUserDisplayName($id, 'display_name'); $this->updateWPUserDisplayName($id, 'display_name');
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne(); $subscriber = $this->subscribersRepository->findOneBy(['wpUserId' => $id]);
verify($subscriber->firstName)->equals('First name'); $this->assertInstanceOf(SubscriberEntity::class, $subscriber);
verify($subscriber->getFirstName())->equals('First name');
} }
public function testItSynchronizeSegment(): void { public function testItSynchronizeSegment(): void {
@@ -280,12 +309,15 @@ class WPTest extends \MailPoetTest {
public function testItDoesntRemoveUsersFromTrash(): void { public function testItDoesntRemoveUsersFromTrash(): void {
$id = $this->insertUser(); $id = $this->insertUser();
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where("wp_user_id", $id)->findOne(); $subscriber = $this->subscribersRepository->findOneBy(['wpUserId' => $id]);
$subscriber->deletedAt = Carbon::now(); $this->assertInstanceOf(SubscriberEntity::class, $subscriber);
$subscriber->save(); $subscriber->setDeletedAt(Carbon::now());
$this->subscribersRepository->persist($subscriber);
$this->subscribersRepository->flush();
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where("wp_user_id", $id)->findOne(); $subscriber = $this->subscribersRepository->findOneBy(['wpUserId' => $id]);
verify($subscriber->deletedAt)->notNull(); $this->assertInstanceOf(SubscriberEntity::class, $subscriber);
verify($subscriber->getDeletedAt())->notNull();
} }
public function testItSynchronizesDeletedWPUsersUsingHooks(): void { public function testItSynchronizesDeletedWPUsersUsingHooks(): void {
@@ -307,16 +339,18 @@ class WPTest extends \MailPoetTest {
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$subscribersCount = $this->getSubscribersCount(); $subscribersCount = $this->getSubscribersCount();
verify($subscribersCount)->equals(2); verify($subscribersCount)->equals(2);
$subscriber1 = Subscriber::where("wp_user_id", $id)->findOne(); $subscriber1 = $this->subscribersRepository->findOneBy(['wpUserId' => $id]);
$deletedAt1 = Carbon::createFromFormat('Y-m-d H:i:s', $subscriber1->deletedAt); $this->assertInstanceOf(SubscriberEntity::class, $subscriber1);
$this->assertInstanceOf(Carbon::class, $deletedAt1); $deletedAt1 = $subscriber1->getDeletedAt();
verify($subscriber1->status)->equals(SubscriberEntity::STATUS_UNCONFIRMED); $this->assertInstanceOf(\DateTimeInterface::class, $deletedAt1);
verify($deletedAt1->timestamp)->equalsWithDelta(Carbon::now()->timestamp, 1); verify($subscriber1->getStatus())->equals(SubscriberEntity::STATUS_UNCONFIRMED);
$subscriber2 = Subscriber::where("wp_user_id", $id2)->findOne(); verify($deletedAt1->getTimestamp())->equalsWithDelta(Carbon::now()->timestamp, 1);
$deletedAt2 = Carbon::createFromFormat('Y-m-d H:i:s', $subscriber2->deletedAt); $subscriber2 = $this->subscribersRepository->findOneBy(['wpUserId' => $id2]);
$this->assertInstanceOf(Carbon::class, $deletedAt2); $this->assertInstanceOf(SubscriberEntity::class, $subscriber2);
verify($subscriber2->status)->equals(SubscriberEntity::STATUS_UNCONFIRMED); $deletedAt2 = $subscriber2->getDeletedAt();
verify($deletedAt2->timestamp)->equalsWithDelta(Carbon::now()->timestamp, 1); $this->assertInstanceOf(\DateTimeInterface::class, $deletedAt2);
verify($subscriber2->getStatus())->equals(SubscriberEntity::STATUS_UNCONFIRMED);
verify($deletedAt2->getTimestamp())->equalsWithDelta(Carbon::now()->timestamp, 1);
} }
public function testItRemovesOrphanedSubscribers(): void { public function testItRemovesOrphanedSubscribers(): void {
@@ -332,55 +366,49 @@ class WPTest extends \MailPoetTest {
public function testItDoesntDeleteNonWPData(): void { public function testItDoesntDeleteNonWPData(): void {
$this->insertUser(); $this->insertUser();
// wp_user_id is null // wp_user_id is null
$subscriber = Subscriber::create(); $this->subscriberFactory
$subscriber->hydrate([ ->withFirstName('John')
'first_name' => 'John', ->withLastName('John')
'last_name' => 'John', ->withEmail('user-sync-test' . rand() . '@example.com')
'email' => 'user-sync-test' . rand() . '@example.com', ->withStatus(SubscriberEntity::STATUS_UNCONFIRMED)
]); ->create();
$subscriber->status = Subscriber::STATUS_UNCONFIRMED;
$subscriber->save();
// wp_user_id is zero // wp_user_id is zero
$subscriber2 = Subscriber::create(); $this->subscriberFactory
$subscriber2->hydrate([ ->withFirstName('Mike')
'first_name' => 'Mike', ->withLastName('Mike')
'last_name' => 'Mike', ->withEmail('user-sync-test2' . rand() . '@example.com')
'email' => 'user-sync-test2' . rand() . '@example.com', ->withWpUserId(0)
'wp_user_id' => 0, ->withStatus(SubscriberEntity::STATUS_SUBSCRIBED)
]); ->create();
$subscriber2->status = Subscriber::STATUS_SUBSCRIBED;
$subscriber2->save();
// email is empty // email is empty
$subscriber3 = Subscriber::create(); $subscriber3 = $this->subscriberFactory
$subscriber3->hydrate([ ->withFirstName('Dave')
'first_name' => 'Dave', ->withLastName('Dave')
'last_name' => 'Dave', ->withEmail('user-sync-test3' . rand() . '@example.com')
'email' => 'user-sync-test3' . rand() . '@example.com', // need to pass validation ->withStatus(SubscriberEntity::STATUS_SUBSCRIBED)
]); ->create();
$subscriber3->status = Subscriber::STATUS_SUBSCRIBED;
$subscriber3->save();
$this->clearEmail($subscriber3); $this->clearEmail($subscriber3);
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$subscribersCount = $this->getSubscribersCount(); $subscribersCount = $this->getSubscribersCount();
verify($subscribersCount)->equals(3); verify($subscribersCount)->equals(3);
$dbSubscriber = Subscriber::findOne($subscriber3->id); $dbSubscriber = $this->subscribersRepository->findOneById($subscriber3->getId());
verify($dbSubscriber)->notEmpty(); verify($dbSubscriber)->notEmpty();
$subscriber3->delete();
} }
public function testItRemovesSubscribersInWPSegmentWithoutWPId(): void { public function testItRemovesSubscribersInWPSegmentWithoutWPId(): void {
$subscriber = Subscriber::create(); $subscriber = $this->subscriberFactory
$subscriber->hydrate([ ->withFirstName('Mike')
'first_name' => 'Mike', ->withLastName('Mike')
'last_name' => 'Mike', ->withEmail('user-sync-test' . rand() . '@example.com')
'email' => 'user-sync-test' . rand() . '@example.com', ->withStatus(SubscriberEntity::STATUS_SUBSCRIBED)
'wp_user_id' => null, ->create();
]);
$subscriber->status = Subscriber::STATUS_SUBSCRIBED;
$subscriber->save();
$wpSegment = Segment::getWPSegment(); $wpSegment = Segment::getWPSegment();
$association = SubscriberSegment::create(); $association = SubscriberSegment::create();
$association->subscriberId = $subscriber->id; $association->subscriberId = (int)$subscriber->getId();
$association->segmentId = $wpSegment->id; $association->segmentId = $wpSegment->id;
$association->save(); $association->save();
$subscribersCount = $this->getSubscribersCount(); $subscribersCount = $this->getSubscribersCount();
@@ -393,25 +421,26 @@ class WPTest extends \MailPoetTest {
public function testItRemovesSubscribersInWPSegmentWithoutEmail(): void { public function testItRemovesSubscribersInWPSegmentWithoutEmail(): void {
$id = $this->insertUser(); $id = $this->insertUser();
$this->updateWPUserEmail($id, ''); $this->updateWPUserEmail($id, '');
$subscriber = Subscriber::create();
$subscriber->hydrate([ $subscriber = $this->subscriberFactory
'first_name' => 'Mike', ->withFirstName('Mike')
'last_name' => 'Mike', ->withLastName('Mike')
'email' => 'user-sync-test' . rand() . '@example.com', // need to pass validation ->withEmail('user-sync-test' . rand() . '@example.com')
'wp_user_id' => $id, ->withWpUserId($id)
]); ->withStatus(SubscriberEntity::STATUS_SUBSCRIBED)
$subscriber->status = Subscriber::STATUS_SUBSCRIBED; ->create();
$subscriber->save();
$this->clearEmail($subscriber); $this->clearEmail($subscriber);
$wpSegment = Segment::getWPSegment(); $wpSegment = Segment::getWPSegment();
$association = SubscriberSegment::create(); $association = SubscriberSegment::create();
$association->subscriberId = $subscriber->id; $association->subscriberId = (int)$subscriber->getId();
$association->segmentId = $wpSegment->id; $association->segmentId = $wpSegment->id;
$association->save(); $association->save();
$dbSubscriber = Subscriber::findOne($subscriber->id); $dbSubscriber = $this->subscribersRepository->findOneById($subscriber->getId());
verify($dbSubscriber)->notEmpty(); verify($dbSubscriber)->notEmpty();
$this->wpSegment->synchronizeUsers(); $this->wpSegment->synchronizeUsers();
$dbSubscriber = Subscriber::findOne($subscriber->id); $this->entityManager->clear();
$dbSubscriber = $this->subscribersRepository->findOneById($subscriber->getId());
verify($dbSubscriber)->empty(); verify($dbSubscriber)->empty();
} }
@@ -427,11 +456,12 @@ class WPTest extends \MailPoetTest {
); );
$wpSegment = $this->getServiceWithOverrides(WP::class, ['wp' => $wp]); $wpSegment = $this->getServiceWithOverrides(WP::class, ['wp' => $wp]);
$wpSegment->synchronizeUser($id); $wpSegment->synchronizeUser($id);
$subscriber = Subscriber::where("wp_user_id", $id)->findOne(); $subscriber = $this->subscribersRepository->findOneBy(['wpUserId' => $id]);
$deletedAt = Carbon::createFromFormat('Y-m-d H:i:s', $subscriber->deletedAt); $this->assertInstanceOf(SubscriberEntity::class, $subscriber);
$this->assertInstanceOf(Carbon::class, $deletedAt); $deletedAt = $subscriber->getDeletedAt();
verify($subscriber->status)->equals(SubscriberEntity::STATUS_UNCONFIRMED); $this->assertInstanceOf(\DateTimeInterface::class, $deletedAt);
verify($deletedAt->timestamp)->equalsWithDelta(Carbon::now()->timestamp, 1); verify($subscriber->getStatus())->equals(SubscriberEntity::STATUS_UNCONFIRMED);
verify($deletedAt->getTimestamp())->equalsWithDelta(Carbon::now()->timestamp, 1);
} }
public function testItAddsNewUserWhoUncheckedOptInOnCheckoutPageAsUnconfirmed(): void { public function testItAddsNewUserWhoUncheckedOptInOnCheckoutPageAsUnconfirmed(): void {
@@ -446,8 +476,9 @@ class WPTest extends \MailPoetTest {
$wpSegment = $this->getServiceWithOverrides(WP::class, ['wp' => $wp]); $wpSegment = $this->getServiceWithOverrides(WP::class, ['wp' => $wp]);
$_POST[Subscription::CHECKOUT_OPTIN_PRESENCE_CHECK_INPUT_NAME] = 1; $_POST[Subscription::CHECKOUT_OPTIN_PRESENCE_CHECK_INPUT_NAME] = 1;
$wpSegment->synchronizeUser($id); $wpSegment->synchronizeUser($id);
$subscriber = Subscriber::where("wp_user_id", $id)->findOne(); $subscriber = $this->subscribersRepository->findOneBy(['wpUserId' => $id]);
verify($subscriber->status)->equals(SubscriberEntity::STATUS_UNCONFIRMED); $this->assertInstanceOf(SubscriberEntity::class, $subscriber);
verify($subscriber->getStatus())->equals(SubscriberEntity::STATUS_UNCONFIRMED);
} }
public function testItDoesNotSendConfirmationEmailForNewUserWhenWPSegmentIsDisabledOnRegisterEnabled(): void { public function testItDoesNotSendConfirmationEmailForNewUserWhenWPSegmentIsDisabledOnRegisterEnabled(): void {
@@ -485,8 +516,7 @@ class WPTest extends \MailPoetTest {
]; ];
$userId = wp_insert_user($args); $userId = wp_insert_user($args);
$this->assertIsNumeric($userId); $this->assertIsNumeric($userId);
$subscriberRepository = $this->diContainer->get(SubscribersRepository::class); $subscriber = $this->subscribersRepository->findOneBy(['email' => 'user-sync-test-html-entities@example.com']);
$subscriber = $subscriberRepository->findOneBy(['email' => 'user-sync-test-html-entities@example.com']);
/** /**
* @var SubscriberEntity $subscriber * @var SubscriberEntity $subscriber
*/ */
@@ -509,8 +539,7 @@ class WPTest extends \MailPoetTest {
$userId = wp_insert_user($args); $userId = wp_insert_user($args);
$this->assertIsNumeric($userId); $this->assertIsNumeric($userId);
$subscriberRepository = $this->diContainer->get(SubscribersRepository::class); $subscriber = $this->subscribersRepository->findOneBy(['email' => 'user-sync-test-html-entities-display-name@example.com']);
$subscriber = $subscriberRepository->findOneBy(['email' => 'user-sync-test-html-entities-display-name@example.com']);
/** /**
* @var SubscriberEntity $subscriber * @var SubscriberEntity $subscriber
*/ */
@@ -522,14 +551,13 @@ class WPTest extends \MailPoetTest {
$this->disableWpSegment(); $this->disableWpSegment();
$randomNumber = rand(); $randomNumber = rand();
$id = $this->insertUser($randomNumber); $id = $this->insertUser($randomNumber);
$subscriber = Subscriber::createOrUpdate([ $subscriber = $this->subscriberFactory
'email' => 'user-sync-test' . $randomNumber . '@example.com', ->withEmail('user-sync-test' . $randomNumber . '@example.com')
'status' => Subscriber::STATUS_SUBSCRIBED, ->withStatus(SubscriberEntity::STATUS_SUBSCRIBED)
'wp_user_id' => null, ->create();
]);
$segment = Segment::createOrUpdate(['name' => 'Test Segment', 'description' => '']); $segment = Segment::createOrUpdate(['name' => 'Test Segment', 'description' => '']);
$subscriberSegment = SubscriberSegment::create(); $subscriberSegment = SubscriberSegment::create();
$subscriberSegment->subscriberId = $subscriber->id; $subscriberSegment->subscriberId = (int)$subscriber->getId();
$subscriberSegment->segmentId = $segment->id; $subscriberSegment->segmentId = $segment->id;
$subscriberSegment->save(); $subscriberSegment->save();
@@ -542,9 +570,10 @@ class WPTest extends \MailPoetTest {
); );
$wpSegment = $this->getServiceWithOverrides(WP::class, ['wp' => $wp]); $wpSegment = $this->getServiceWithOverrides(WP::class, ['wp' => $wp]);
$wpSegment->synchronizeUser($id); $wpSegment->synchronizeUser($id);
$subscriber1 = Subscriber::where("wp_user_id", $id)->findOne(); $subscriber1 = $this->subscribersRepository->findOneBy(['wpUserId' => $id]);
verify($subscriber1->status)->equals(SubscriberEntity::STATUS_SUBSCRIBED); $this->assertInstanceOf(SubscriberEntity::class, $subscriber1);
verify($subscriber1->deletedAt)->null(); verify($subscriber1->getStatus())->equals(SubscriberEntity::STATUS_SUBSCRIBED);
verify($subscriber1->getDeletedAt())->null();
} }
public function testItDoesNotTrashNewUsersWhoIsWooCustomerToDisabledWPSegment(): void { public function testItDoesNotTrashNewUsersWhoIsWooCustomerToDisabledWPSegment(): void {
@@ -575,9 +604,10 @@ class WPTest extends \MailPoetTest {
'wooHelper' => $wooHelper, 'wooHelper' => $wooHelper,
]); ]);
$wpSegment->synchronizeUser($id); $wpSegment->synchronizeUser($id);
$subscriber1 = Subscriber::where("wp_user_id", $id)->findOne(); $subscriber1 = $this->subscribersRepository->findOneBy(['wpUserId' => $id]);
verify($subscriber1->status)->equals(SubscriberEntity::STATUS_UNCONFIRMED); $this->assertInstanceOf(SubscriberEntity::class, $subscriber1);
verify($subscriber1->deletedAt)->null(); verify($subscriber1->getStatus())->equals(SubscriberEntity::STATUS_UNCONFIRMED);
verify($subscriber1->getDeletedAt())->null();
remove_role('customer'); remove_role('customer');
} }
@@ -587,16 +617,11 @@ class WPTest extends \MailPoetTest {
} }
private function cleanData(): void { private function cleanData(): void {
ORM::raw_execute('TRUNCATE ' . Segment::$_table); $this->truncateEntity(SegmentEntity::class);
ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table); $this->truncateEntity(SubscriberEntity::class);
$this->truncateEntity(SubscriberSegmentEntity::class);
global $wpdb; global $wpdb;
$db = ORM::getDb(); $db = ORM::getDb();
$db->exec(sprintf('
DELETE FROM
%s
WHERE
subscriber_id IN (select id from %s WHERE email LIKE "user-sync-test%%")
', SubscriberSegment::$_table, Subscriber::$_table));
$db->exec(sprintf(' $db->exec(sprintf('
DELETE FROM DELETE FROM
%s %s
@@ -610,16 +635,16 @@ class WPTest extends \MailPoetTest {
user_email LIKE "user-sync-test%%" user_email LIKE "user-sync-test%%"
OR user_login LIKE "user-sync-test%%" OR user_login LIKE "user-sync-test%%"
', $wpdb->users)); ', $wpdb->users));
$db->exec(sprintf('
DELETE FROM
%s
WHERE
email LIKE "user-sync-test%%"
', Subscriber::$_table));
} }
private function getSubscribersCount(): int { private function getSubscribersCount(): int {
return Subscriber::whereLike("email", "user-sync-test%")->count(); return count($this->entityManager
->getRepository(SubscriberEntity::class)
->createQueryBuilder('s')
->where('s.email LIKE :email')
->setParameter('email', 'user-sync-test%')
->getQuery()
->getResult());
} }
/** /**
@@ -698,10 +723,10 @@ class WPTest extends \MailPoetTest {
', $wpdb->users, $id)); ', $wpdb->users, $id));
} }
private function clearEmail(Subscriber $subscriber): void { private function clearEmail(SubscriberEntity $subscriber): void {
ORM::raw_execute(' $this->connection->executeStatement(
UPDATE ' . MP_SUBSCRIBERS_TABLE . ' 'UPDATE ' . MP_SUBSCRIBERS_TABLE . '
SET `email` = "" WHERE `id` = ' . $subscriber->id SET `email` = "" WHERE `id` = ' . $subscriber->getId()
); );
} }