Refactor WP Users segment controller to injectable service
[MAILPOET-3141]
This commit is contained in:
committed by
Veljko V
parent
75e7012fb6
commit
645f888186
@@ -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([
|
||||
|
@@ -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
|
||||
);
|
||||
}
|
||||
|
@@ -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();
|
||||
|
@@ -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);
|
||||
|
@@ -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
|
||||
|
@@ -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();
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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';
|
||||
|
@@ -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');
|
||||
|
@@ -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();
|
||||
|
@@ -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();
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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();
|
||||
|
Reference in New Issue
Block a user