Refactor WP Users segment controller to injectable service

[MAILPOET-3141]
This commit is contained in:
Rostislav Wolny
2020-10-29 13:50:49 +01:00
committed by Veljko V
parent 75e7012fb6
commit 645f888186
13 changed files with 131 additions and 139 deletions

View File

@@ -34,18 +34,23 @@ class Segments extends APIEndpoint {
/** @var WooCommerce */
private $wooCommerceSync;
/** @var WP */
private $wpSegment;
public function __construct(
Listing\BulkActionController $bulkAction,
Listing\Handler $listingHandler,
SegmentsRepository $segmentsRepository,
SegmentsResponseBuilder $segmentsResponseBuilder,
WooCommerce $wooCommerce
WooCommerce $wooCommerce,
WP $wpSegment
) {
$this->bulkAction = $bulkAction;
$this->listingHandler = $listingHandler;
$this->wooCommerceSync = $wooCommerce;
$this->segmentsRepository = $segmentsRepository;
$this->segmentsResponseBuilder = $segmentsResponseBuilder;
$this->wpSegment = $wpSegment;
}
public function get($data = []) {
@@ -179,7 +184,7 @@ class Segments extends APIEndpoint {
if ($data['type'] === Segment::TYPE_WC_USERS) {
$this->wooCommerceSync->synchronizeCustomers();
} else {
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
}
} catch (\Exception $e) {
return $this->errorResponse([

View File

@@ -6,6 +6,7 @@ use MailPoet\Form\DisplayFormInWPContent;
use MailPoet\Mailer\WordPress\WordpressMailerReplacer;
use MailPoet\Newsletter\Scheduler\PostNotificationScheduler;
use MailPoet\Segments\WooCommerce as WooCommerceSegment;
use MailPoet\Segments\WP;
use MailPoet\Settings\SettingsController;
use MailPoet\Statistics\Track\WooCommercePurchases;
use MailPoet\Subscription\Comment;
@@ -57,6 +58,9 @@ class Hooks {
/** @var DisplayFormInWPContent */
private $displayFormInWPContent;
/** @var WP */
private $wpSegment;
public function __construct(
Form $subscriptionForm,
Comment $subscriptionComment,
@@ -70,7 +74,8 @@ class Hooks {
WooCommercePurchases $woocommercePurchases,
PostNotificationScheduler $postNotificationScheduler,
WordpressMailerReplacer $wordpressMailerReplacer,
DisplayFormInWPContent $displayFormInWPContent
DisplayFormInWPContent $displayFormInWPContent,
WP $wpSegment
) {
$this->subscriptionForm = $subscriptionForm;
$this->subscriptionComment = $subscriptionComment;
@@ -85,6 +90,7 @@ class Hooks {
$this->postNotificationScheduler = $postNotificationScheduler;
$this->wordpressMailerReplacer = $wordpressMailerReplacer;
$this->displayFormInWPContent = $displayFormInWPContent;
$this->wpSegment = $wpSegment;
}
public function init() {
@@ -237,33 +243,33 @@ class Hooks {
// WP Users synchronization
$this->wp->addAction(
'user_register',
'\MailPoet\Segments\WP::synchronizeUser',
[$this->wpSegment, 'synchronizeUser'],
6
);
$this->wp->addAction(
'added_existing_user',
'\MailPoet\Segments\WP::synchronizeUser',
[$this->wpSegment, 'synchronizeUser'],
6
);
$this->wp->addAction(
'profile_update',
'\MailPoet\Segments\WP::synchronizeUser',
[$this->wpSegment, 'synchronizeUser'],
6, 2
);
$this->wp->addAction(
'delete_user',
'\MailPoet\Segments\WP::synchronizeUser',
[$this->wpSegment, 'synchronizeUser'],
1
);
// multisite
$this->wp->addAction(
'deleted_user',
'\MailPoet\Segments\WP::synchronizeUser',
[$this->wpSegment, 'synchronizeUser'],
1
);
$this->wp->addAction(
'remove_user_from_blog',
'\MailPoet\Segments\WP::synchronizeUser',
[$this->wpSegment, 'synchronizeUser'],
1
);
}

View File

@@ -49,17 +49,21 @@ class Populator {
const TEMPLATES_NAMESPACE = '\MailPoet\Config\PopulatorData\Templates\\';
/** @var FormsRepository */
private $formsRepository;
/** @var WP */
private $wpSegment;
public function __construct(
SettingsController $settings,
WPFunctions $wp,
Captcha $captcha,
ReferralDetector $referralDetector,
FormsRepository $formsRepository
FormsRepository $formsRepository,
WP $wpSegment
) {
$this->settings = $settings;
$this->wp = $wp;
$this->captcha = $captcha;
$this->wpSegment = $wpSegment;
$this->referralDetector = $referralDetector;
$this->prefix = Env::$dbPrefix;
$this->models = [
@@ -337,7 +341,7 @@ class Populator {
Segment::getWooCommerceSegment();
// Synchronize WP Users
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
// Default segment
$defaultSegment = Segment::where('type', 'default')->orderByAsc('id')->limit(1)->findOne();

View File

@@ -90,7 +90,7 @@ class ContainerConfigurator implements IContainerConfigurator {
// Config
$container->autowire(\MailPoet\Config\AccessControl::class)->setPublic(true);
$container->autowire(\MailPoet\Config\Activator::class)->setPublic(true);
$container->autowire(\MailPoet\Config\Populator::class);
$container->autowire(\MailPoet\Config\Populator::class)->setPublic(true);
$container->autowire(\MailPoet\Config\Changelog::class)->setPublic(true);
$container->autowire(\MailPoet\Config\DatabaseInitializer::class);
$container->autowire(\MailPoet\Config\Hooks::class)->setPublic(true);
@@ -249,6 +249,7 @@ class ContainerConfigurator implements IContainerConfigurator {
$container->autowire(\MailPoet\Subscribers\Statistics\SubscriberStatisticsRepository::class);
// Segments
$container->autowire(\MailPoet\Segments\WooCommerce::class)->setPublic(true);
$container->autowire(\MailPoet\Segments\WP::class)->setPublic(true);
$container->autowire(\MailPoet\Segments\SubscribersFinder::class)->setPublic(true);
$container->autowire(\MailPoet\Segments\SegmentsRepository::class)->setPublic(true);
$container->autowire(\MailPoet\Segments\SegmentSubscribersRepository::class)->setPublic(true);

View File

@@ -16,7 +16,7 @@ use MailPoet\Subscribers\Source;
use MailPoetVendor\Idiorm\ORM;
class WP {
public static function synchronizeUser($wpUserId, $oldWpUserData = false) {
public function synchronizeUser($wpUserId, $oldWpUserData = false) {
$wpUser = \get_userdata($wpUserId);
if ($wpUser === false) return;
@@ -25,13 +25,13 @@ class WP {
$currentFilter = current_filter();
if (in_array($currentFilter, ['delete_user', 'deleted_user', 'remove_user_from_blog'])) {
self::deleteSubscriber($subscriber);
$this->deleteSubscriber($subscriber);
} else {
self::updateSubscriber($currentFilter, $wpUser, $subscriber, $oldWpUserData);
$this->updateSubscriber($currentFilter, $wpUser, $subscriber, $oldWpUserData);
}
}
private static function deleteSubscriber($subscriber) {
private function deleteSubscriber($subscriber) {
if ($subscriber !== false) {
// unlink subscriber from wp user and delete
$subscriber->set('wp_user_id', null);
@@ -39,7 +39,7 @@ class WP {
}
}
private static function updateSubscriber($currentFilter, $wpUser, $subscriber = false, $oldWpUserData = false) {
private function updateSubscriber($currentFilter, $wpUser, $subscriber = false, $oldWpUserData = false) {
$wpSegment = Segment::getWPSegment();
if (!$wpSegment) return;
@@ -60,13 +60,14 @@ class WP {
$firstName = $wpUser->display_name; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps
}
$signupConfirmationEnabled = SettingsController::getInstance()->get('signup_confirmation.enabled');
$status = $signupConfirmationEnabled ? Subscriber::STATUS_UNCONFIRMED : Subscriber::STATUS_SUBSCRIBED;
// subscriber data
$data = [
'wp_user_id' => $wpUser->ID,
'email' => $wpUser->user_email, // phpcs:ignore Squiz.NamingConventions.ValidVariableName.NotCamelCaps
'first_name' => $firstName,
'last_name' => $lastName,
'status' => $signupConfirmationEnabled ? Subscriber::STATUS_UNCONFIRMED : Subscriber::STATUS_SUBSCRIBED,
'status' => $status,
'source' => Source::WORDPRESS_USER,
];
@@ -104,22 +105,21 @@ class WP {
}
}
public static function synchronizeUsers() {
$updatedUsersEmails = self::updateSubscribersEmails();
$insertedUsersEmails = self::insertSubscribers();
self::removeUpdatedSubscribersWithInvalidEmail(array_merge($updatedUsersEmails, $insertedUsersEmails));
self::updateFirstNames();
self::updateLastNames();
self::updateFirstNameIfMissing();
self::insertUsersToSegment();
self::removeOrphanedSubscribers();
self::markSpammyWordpressUsersAsUnconfirmed();
public function synchronizeUsers() {
$updatedUsersEmails = $this->updateSubscribersEmails();
$insertedUsersEmails = $this->insertSubscribers();
$this->removeUpdatedSubscribersWithInvalidEmail(array_merge($updatedUsersEmails, $insertedUsersEmails));
$this->updateFirstNames();
$this->updateLastNames();
$this->updateFirstNameIfMissing();
$this->insertUsersToSegment();
$this->removeOrphanedSubscribers();
$this->markSpammyWordpressUsersAsUnconfirmed();
return true;
}
private static function removeUpdatedSubscribersWithInvalidEmail($updatedEmails) {
private function removeUpdatedSubscribersWithInvalidEmail($updatedEmails) {
$validator = new ModelValidator();
$invalidWpUserIds = array_map(function($item) {
return $item['id'];
@@ -133,7 +133,7 @@ class WP {
ORM::for_table(Subscriber::$_table)->whereIn('wp_user_id', $invalidWpUserIds)->delete_many();
}
private static function updateSubscribersEmails() {
private function updateSubscribersEmails() {
global $wpdb;
Subscriber::rawExecute('SELECT NOW();');
$startTime = Subscriber::getLastStatement()->fetch(\PDO::FETCH_COLUMN);
@@ -151,7 +151,7 @@ class WP {
', $subscribersTable, $startTime))->findArray();
}
private static function insertSubscribers() {
private function insertSubscribers() {
global $wpdb;
$subscribersTable = Subscriber::$_table;
$signupConfirmationEnabled = SettingsController::getInstance()->get('signup_confirmation.enabled');
@@ -179,7 +179,7 @@ class WP {
return $inserterdUserIds;
}
private static function updateFirstNames() {
private function updateFirstNames() {
global $wpdb;
$subscribersTable = Subscriber::$_table;
Subscriber::rawExecute(sprintf('
@@ -192,7 +192,7 @@ class WP {
', $subscribersTable, $wpdb->usermeta));
}
private static function updateLastNames() {
private function updateLastNames() {
global $wpdb;
$subscribersTable = Subscriber::$_table;
Subscriber::rawExecute(sprintf('
@@ -205,7 +205,7 @@ class WP {
', $subscribersTable, $wpdb->usermeta));
}
private static function updateFirstNameIfMissing() {
private function updateFirstNameIfMissing() {
global $wpdb;
$subscribersTable = Subscriber::$_table;
Subscriber::rawExecute(sprintf('
@@ -217,7 +217,7 @@ class WP {
', $subscribersTable, $wpdb->users));
}
private static function insertUsersToSegment() {
private function insertUsersToSegment() {
$wpSegment = Segment::getWPSegment();
$subscribersTable = Subscriber::$_table;
$wpMailpoetSubscriberSegmentTable = SubscriberSegment::$_table;
@@ -228,7 +228,7 @@ class WP {
', $wpMailpoetSubscriberSegmentTable, $wpSegment->id, $subscribersTable));
}
private static function removeOrphanedSubscribers() {
private function removeOrphanedSubscribers() {
// remove orphaned wp segment subscribers (not having a matching wp user id),
// e.g. if wp users were deleted directly from the database
global $wpdb;
@@ -243,7 +243,7 @@ class WP {
->delete();
}
private static function markSpammyWordpressUsersAsUnconfirmed() {
private function markSpammyWordpressUsersAsUnconfirmed() {
global $wpdb;
$query = '
UPDATE %s as subscribers

View File

@@ -19,12 +19,20 @@ class WooCommerce {
/** @var WPFunctions */
private $wp;
/** @var WP */
private $wpSegment;
private $mailpoetEmailCollation;
private $wpPostmetaValueCollation;
public function __construct(SettingsController $settings, WPFunctions $wp) {
public function __construct(
SettingsController $settings,
WPFunctions $wp,
WP $wpSegment
) {
$this->settings = $settings;
$this->wp = $wp;
$this->wpSegment = $wpSegment;
}
public function synchronizeRegisteredCustomer($wpUserId, $currentFilter = null) {
@@ -105,7 +113,7 @@ class WooCommerce {
public function synchronizeCustomers() {
$this->getColumnCollation();
WP::synchronizeUsers(); // synchronize registered users
$this->wpSegment->synchronizeUsers(); // synchronize registered users
$this->markRegisteredCustomers();
$insertedUsersEmails = $this->insertSubscribersFromOrders();

View File

@@ -10,6 +10,7 @@ use MailPoet\Config\Activator;
use MailPoet\Config\Populator;
use MailPoet\Form\FormsRepository;
use MailPoet\Referrals\ReferralDetector;
use MailPoet\Segments\WP;
use MailPoet\Settings\SettingsController;
use MailPoet\Settings\SettingsRepository;
use MailPoet\Subscription\Captcha;
@@ -23,20 +24,21 @@ class SetupTest extends \MailPoetTest {
}
public function testItCanReinstall() {
$wp = Stub::make(new WPFunctions, [
$wpStub = Stub::make(new WPFunctions, [
'doAction' => asCallable([WPHooksHelper::class, 'doAction']),
]);
$settings = SettingsController::getInstance();
$referralDetector = new ReferralDetector($wp, $settings);
$referralDetector = new ReferralDetector($wpStub, $settings);
$populator = new Populator(
$settings,
$wp,
$wpStub,
new Captcha(),
$referralDetector,
$this->diContainer->get(FormsRepository::class)
$this->diContainer->get(FormsRepository::class),
$this->diContainer->get(WP::class)
);
$router = new Setup($wp, new Activator($settings, $populator));
$router = new Setup($wpStub, new Activator($settings, $populator));
$response = $router->reset();
expect($response->status)->equals(APIResponse::STATUS_OK);

View File

@@ -14,7 +14,6 @@ use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterTask;
use MailPoet\Cron\Workers\StatsNotifications\Scheduler as StatsNotificationsScheduler;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Form\FormsRepository;
use MailPoet\Logging\LoggerFactory;
use MailPoet\Mailer\MailerLog;
use MailPoet\Models\Newsletter;
@@ -30,14 +29,12 @@ use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberSegment;
use MailPoet\Newsletter\Links\Links;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Referrals\ReferralDetector;
use MailPoet\Router\Endpoints\Track;
use MailPoet\Router\Router;
use MailPoet\Segments\SubscribersFinder;
use MailPoet\Settings\SettingsController;
use MailPoet\Settings\SettingsRepository;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\Subscription\Captcha;
use MailPoet\Subscription\SubscriptionUrlFactory;
use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\WP\Functions as WPFunctions;
@@ -72,15 +69,8 @@ class SendingQueueTest extends \MailPoetTest {
parent::_before();
$wpUsers = get_users();
wp_set_current_user($wpUsers[0]->ID);
$this->settings = SettingsController::getInstance();
$referralDetector = new ReferralDetector(WPFunctions::get(), $this->settings);
$populator = new Populator(
$this->settings,
WPFunctions::get(),
new Captcha,
$referralDetector,
$this->diContainer->get(FormsRepository::class)
);
$this->settings = $this->diContainer->get(SettingsController::class);
$populator = $this->diContainer->get(Populator::class);
$populator->up();
$this->subscriber = Subscriber::create();
$this->subscriber->email = 'john@doe.com';

View File

@@ -6,14 +6,10 @@ use Codeception\Stub;
use Codeception\Stub\Expected;
use MailPoet\Config\Populator;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Mailer as MailerTask;
use MailPoet\Form\FormsRepository;
use MailPoet\Mailer\Mailer;
use MailPoet\Models\Subscriber;
use MailPoet\Referrals\ReferralDetector;
use MailPoet\Settings\SettingsController;
use MailPoet\Settings\SettingsRepository;
use MailPoet\Subscription\Captcha;
use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Idiorm\ORM;
class MailerTest extends \MailPoetTest {
@@ -27,15 +23,8 @@ class MailerTest extends \MailPoetTest {
parent::_before();
$wpUsers = get_users();
wp_set_current_user($wpUsers[0]->ID);
$this->settings = SettingsController::getInstance();
$referralDetector = new ReferralDetector(WPFunctions::get(), $this->settings);
$populator = new Populator(
$this->settings,
WPFunctions::get(),
new Captcha,
$referralDetector,
$this->diContainer->get(FormsRepository::class)
);
$this->settings = $this->diContainer->get(SettingsController::class);
$populator = $this->diContainer->get(Populator::class);
$populator->up();
$this->mailerTask = new MailerTask();
$this->sender = $this->settings->get('sender');

View File

@@ -3,7 +3,6 @@
namespace MailPoet\Test\Newsletter;
use MailPoet\Config\Populator;
use MailPoet\Form\FormsRepository;
use MailPoet\Models\CustomField;
use MailPoet\Models\Newsletter;
use MailPoet\Models\SendingQueue;
@@ -12,10 +11,8 @@ use MailPoet\Models\SubscriberCustomField;
use MailPoet\Newsletter\Shortcodes\Categories\Date;
use MailPoet\Newsletter\Shortcodes\Shortcodes;
use MailPoet\Newsletter\Url as NewsletterUrl;
use MailPoet\Referrals\ReferralDetector;
use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\Subscription\Captcha;
use MailPoet\Subscription\SubscriptionUrlFactory;
use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Idiorm\ORM;
@@ -39,14 +36,7 @@ class ShortcodesTest extends \MailPoetTest {
public function _before() {
parent::_before();
$this->settings = SettingsController::getInstance();
$referralDetector = new ReferralDetector(WPFunctions::get(), $this->settings);
$populator = new Populator(
$this->settings,
WPFunctions::get(),
new Captcha,
$referralDetector,
$this->diContainer->get(FormsRepository::class)
);
$populator = $this->diContainer->get(Populator::class);
$populator->up();
$this->wPUser = $this->_createWPUser();
$this->wPPost = $this->_createWPPost();

View File

@@ -4,7 +4,6 @@ namespace MailPoet\Test\Segments;
require_once(ABSPATH . 'wp-admin/includes/user.php');
use MailPoet\DI\ContainerWrapper;
use MailPoet\Models\Segment;
use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberSegment;
@@ -19,6 +18,16 @@ class WPTest extends \MailPoetTest {
/** @var SettingsController */
private $settings;
/** @var WP */
private $wpSegment;
public function _before() {
parent::_before();
$this->settings = $this->diContainer->get(SettingsController::class);
$this->wpSegment = $this->diContainer->get(WP::class);
$this->cleanData();
}
public function testSynchronizeUserKeepsStatusOfOldUser() {
$randomNumber = rand();
$id = $this->insertUser($randomNumber);
@@ -27,7 +36,7 @@ class WPTest extends \MailPoetTest {
'status' => Subscriber::STATUS_SUBSCRIBED,
'wp_user_id' => $id,
]);
WP::synchronizeUser($id);
$this->wpSegment->synchronizeUser($id);
$dbSubscriber = Subscriber::findOne($subscriber->id);
expect($dbSubscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED);
}
@@ -40,7 +49,7 @@ class WPTest extends \MailPoetTest {
'wp_user_id' => null,
]);
$id = $this->insertUser($randomNumber);
WP::synchronizeUser($id);
$this->wpSegment->synchronizeUser($id);
$dbSubscriber = Subscriber::where('wp_user_id', $id)->findOne();
expect($dbSubscriber->status)->equals($subscriber->status);
}
@@ -49,7 +58,7 @@ class WPTest extends \MailPoetTest {
$this->settings->set('signup_confirmation', ['enabled' => '0']);
$randomNumber = rand();
$id = $this->insertUser($randomNumber);
WP::synchronizeUser($id);
$this->wpSegment->synchronizeUser($id);
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
expect($wpSubscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED);
}
@@ -58,7 +67,7 @@ class WPTest extends \MailPoetTest {
$this->settings->set('signup_confirmation', ['enabled' => '1']);
$randomNumber = rand();
$id = $this->insertUser($randomNumber);
WP::synchronizeUser($id);
$this->wpSegment->synchronizeUser($id);
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
expect($wpSubscriber->status)->equals(Subscriber::STATUS_UNCONFIRMED);
}
@@ -67,7 +76,7 @@ class WPTest extends \MailPoetTest {
$this->settings->set('signup_confirmation', ['enabled' => '0']);
$this->insertUser();
$this->insertUser();
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$subscribers = Subscriber::whereLike("email", "user-sync-test%")->findMany();
expect(count($subscribers))->equals(2);
expect($subscribers[0]->status)->equals(Subscriber::STATUS_SUBSCRIBED);
@@ -78,7 +87,7 @@ class WPTest extends \MailPoetTest {
$this->settings->set('signup_confirmation', ['enabled' => '1']);
$this->insertUser();
$this->insertUser();
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$subscribers = Subscriber::whereLike("email", "user-sync-test%")->findMany();
expect(count($subscribers))->equals(2);
expect($subscribers[0]->status)->equals(Subscriber::STATUS_UNCONFIRMED);
@@ -96,7 +105,7 @@ class WPTest extends \MailPoetTest {
$this->settings->set('subscribe.on_register.enabled', '1');
$randomNumber = rand();
$id = $this->insertUser($randomNumber);
WP::synchronizeUser($id);
$this->wpSegment->synchronizeUser($id);
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
expect($wpSubscriber->countConfirmations)->equals(1);
expect($wpSubscriber->status)->equals(Subscriber::STATUS_UNCONFIRMED);
@@ -106,7 +115,7 @@ class WPTest extends \MailPoetTest {
$this->settings->set('subscribe.on_register.enabled', '1');
$randomNumber = rand();
$id = $this->insertUser($randomNumber);
WP::synchronizeUser($id);
$this->wpSegment->synchronizeUser($id);
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
expect($wpSubscriber->countConfirmations)->equals(0);
expect($wpSubscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED);
@@ -116,7 +125,7 @@ class WPTest extends \MailPoetTest {
$this->settings->set('subscribe.on_register.enabled', '0');
$randomNumber = rand();
$id = $this->insertUser($randomNumber);
WP::synchronizeUser($id);
$this->wpSegment->synchronizeUser($id);
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
expect($wpSubscriber->countConfirmations)->equals(0);
expect($wpSubscriber->status)->equals(Subscriber::STATUS_UNCONFIRMED);
@@ -125,9 +134,9 @@ class WPTest extends \MailPoetTest {
public function testItSynchronizeNewUsers() {
$this->insertUser();
$this->insertUser();
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$this->insertUser();
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$subscribersCount = $this->getSubscribersCount();
expect($subscribersCount)->equals(3);
}
@@ -139,7 +148,7 @@ class WPTest extends \MailPoetTest {
'status' => Subscriber::STATUS_SUBSCRIBED,
]);
$id = $this->insertUser($randomNumber);
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$wpSubscriber = Segment::getWPSegment()->subscribers()->where('wp_user_id', $id)->findOne();
expect($wpSubscriber)->notEmpty();
expect($wpSubscriber->id)->equals($subscriber->id);
@@ -148,27 +157,27 @@ class WPTest extends \MailPoetTest {
public function testItSynchronizeEmails() {
$id = $this->insertUser();
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$this->updateWPUserEmail($id, 'user-sync-test-xx@email.com');
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne();
expect($subscriber->email)->equals('user-sync-test-xx@email.com');
}
public function testRemovesUsersWithEmptyEmailsFromSunscribersDuringSynchronization() {
$id = $this->insertUser();
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$this->updateWPUserEmail($id, '');
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
expect(Subscriber::where('wp_user_id', $id)->count())->equals(0);
$this->deleteWPUser($id);
}
public function testRemovesUsersWithInvalidEmailsFromSunscribersDuringSynchronization() {
$id = $this->insertUser();
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$this->updateWPUserEmail($id, 'ivalid.@email.com');
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
expect(Subscriber::where('wp_user_id', $id)->count())->equals(0);
$this->deleteWPUser($id);
}
@@ -176,7 +185,7 @@ class WPTest extends \MailPoetTest {
public function testItDoesNotSynchronizeEmptyEmailsForNewUsers() {
$id = $this->insertUser();
$this->updateWPUserEmail($id, '');
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne();
expect($subscriber)->isEmpty();
$this->deleteWPUser($id);
@@ -184,27 +193,27 @@ class WPTest extends \MailPoetTest {
public function testItSynchronizeFirstNames() {
$id = $this->insertUser();
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
update_user_meta((int)$id, 'first_name', 'First name');
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne();
expect($subscriber->firstName)->equals('First name');
}
public function testItSynchronizeLastNames() {
$id = $this->insertUser();
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
update_user_meta((int)$id, 'last_name', 'Last name');
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne();
expect($subscriber->lastName)->equals('Last name');
}
public function testItSynchronizeFirstNamesUsingDisplayName() {
$id = $this->insertUser();
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$this->updateWPUserDisplayName($id, 'First name');
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne();
expect($subscriber->firstName)->equals('First name');
}
@@ -213,7 +222,7 @@ class WPTest extends \MailPoetTest {
$id = $this->insertUser();
update_user_meta((int)$id, 'first_name', 'First name');
$this->updateWPUserDisplayName($id, 'display_name');
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where('wp_user_id', $id)->findOne();
expect($subscriber->firstName)->equals('First name');
}
@@ -222,18 +231,18 @@ class WPTest extends \MailPoetTest {
$this->insertUser();
$this->insertUser();
$this->insertUser();
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$subscribers = Segment::getWPSegment()->subscribers()->whereIn('wp_user_id', $this->userIds);
expect($subscribers->count())->equals(3);
}
public function testItDoesntRemoveUsersFromTrash() {
$id = $this->insertUser();
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where("wp_user_id", $id)->findOne();
$subscriber->deletedAt = Carbon::now();
$subscriber->save();
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$subscriber = Subscriber::where("wp_user_id", $id)->findOne();
expect($subscriber->deletedAt)->notNull();
}
@@ -241,7 +250,7 @@ class WPTest extends \MailPoetTest {
public function testItSynchronizesDeletedWPUsersUsingHooks() {
$id = $this->insertUser();
$this->insertUser();
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$subscribersCount = $this->getSubscribersCount();
expect($subscribersCount)->equals(2);
wp_delete_user((int)$id);
@@ -252,9 +261,9 @@ class WPTest extends \MailPoetTest {
public function testItRemovesOrphanedSubscribers() {
$this->insertUser();
$id = $this->insertUser();
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$this->deleteWPUser($id);
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$subscribers = Segment::getWPSegment()->subscribers()->whereIn('wp_user_id', $this->userIds);
expect($subscribers->count())->equals(1);
}
@@ -290,7 +299,7 @@ class WPTest extends \MailPoetTest {
$subscriber3->status = Subscriber::STATUS_SUBSCRIBED;
$subscriber3->save();
$this->clearEmail($subscriber3);
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$subscribersCount = $this->getSubscribersCount();
expect($subscribersCount)->equals(3);
$dbSubscriber = Subscriber::findOne($subscriber3->id);
@@ -315,7 +324,7 @@ class WPTest extends \MailPoetTest {
$association->save();
$subscribersCount = $this->getSubscribersCount();
expect($subscribersCount)->equals(1);
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$subscribersCount = $this->getSubscribersCount(0);
expect($subscribersCount)->equals(0);
}
@@ -340,7 +349,7 @@ class WPTest extends \MailPoetTest {
$association->save();
$dbSubscriber = Subscriber::findOne($subscriber->id);
expect($dbSubscriber)->notEmpty();
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$dbSubscriber = Subscriber::findOne($subscriber->id);
expect($dbSubscriber)->isEmpty();
}
@@ -354,7 +363,7 @@ class WPTest extends \MailPoetTest {
'wp_user_id' => $id,
]);
update_user_meta((int)$id, 'default_password_nag', '1');
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$dbSubscriber = Subscriber::findOne($subscriber->id);
expect($dbSubscriber->status)->equals(Subscriber::STATUS_UNCONFIRMED);
}
@@ -377,17 +386,11 @@ class WPTest extends \MailPoetTest {
wp_update_user(['ID' => $id, 'user_status' => 2]);
$db = ORM::getDb();
$db->exec(sprintf('UPDATE %s SET `user_status` = 2 WHERE ID = %s', $wpdb->users, $id));
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$dbSubscriber = Subscriber::findOne($subscriber->id);
expect($dbSubscriber->status)->equals(Subscriber::STATUS_UNCONFIRMED);
}
public function _before() {
parent::_before();
$this->settings = ContainerWrapper::getInstance()->get(SettingsController::class);
$this->cleanData();
}
public function _after() {
$this->cleanData();
}

View File

@@ -3,14 +3,11 @@
namespace MailPoet\Test\Subscription;
use MailPoet\Config\Populator;
use MailPoet\Form\FormsRepository;
use MailPoet\Models\Subscriber;
use MailPoet\Referrals\ReferralDetector;
use MailPoet\Router\Router;
use MailPoet\Settings\SettingsController;
use MailPoet\Settings\SettingsRepository;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\Subscription\Captcha;
use MailPoet\Subscription\SubscriptionUrlFactory;
use MailPoet\WP\Functions as WPFunctions;
@@ -24,15 +21,8 @@ class UrlTest extends \MailPoetTest {
public function _before() {
parent::_before();
$this->settings = SettingsController::getInstance();
$referralDetector = new ReferralDetector(WPFunctions::get(), $this->settings);
$populator = new Populator(
$this->settings,
WPFunctions::get(),
new Captcha,
$referralDetector,
$this->diContainer->get(FormsRepository::class)
);
$this->settings = $this->diContainer->get(SettingsController::class);
$populator = $this->diContainer->get(Populator::class);
$populator->up();
$this->url = new SubscriptionUrlFactory(WPFunctions::get(), $this->settings, new LinkTokens);
}

View File

@@ -34,6 +34,9 @@ class SubscriptionTest extends \MailPoetTest {
/** @var ConfirmationEmailMailer & MockObject */
private $confirmationEmailMailer;
/** @var WP */
private $wpSegment;
public function _before() {
$this->orderId = 123; // dummy
$this->settings = SettingsController::getInstance();
@@ -41,6 +44,7 @@ class SubscriptionTest extends \MailPoetTest {
$this->confirmationEmailMailer = $this->createMock(ConfirmationEmailMailer::class);
$this->subscription = new Subscription($this->settings, $this->confirmationEmailMailer, $wp);
$this->wcSegment = Segment::getWooCommerceSegment();
$this->wpSegment = $this->diContainer->get(WP::class);
$subscriber = Subscriber::create();
$subscriber->hydrate(Fixtures::get('subscriber_template'));
@@ -53,7 +57,7 @@ class SubscriptionTest extends \MailPoetTest {
}
public function testItDisplaysACheckedCheckboxIfCurrentUserIsSubscribed() {
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$wpUsers = get_users();
wp_set_current_user($wpUsers[0]->ID);
$subscriber = Subscriber::getCurrentWPUser();
@@ -65,7 +69,7 @@ class SubscriptionTest extends \MailPoetTest {
}
public function testItDisplaysAnUncheckedCheckboxIfCurrentUserIsNotSubscribed() {
WP::synchronizeUsers();
$this->wpSegment->synchronizeUsers();
$wpUsers = get_users();
wp_set_current_user($wpUsers[0]->ID);
$subscriber = Subscriber::getCurrentWPUser();