Move dynamic segments from Premium plugin

[MAILPOET-2382]
This commit is contained in:
Jan Jakeš
2019-10-03 09:37:46 +02:00
committed by Jack Kitterhing
parent 0af9f09f50
commit 70a89b7939
41 changed files with 2674 additions and 0 deletions

View File

@@ -0,0 +1,84 @@
<?php
namespace MailPoet\Premium\DynamicSegments\Persistence\Loading;
use MailPoet\Premium\DynamicSegments\Filters\UserRole;
use MailPoet\Premium\DynamicSegments\Mappers\DBMapper;
use MailPoet\Premium\Models\DynamicSegment;
use MailPoet\Premium\Models\DynamicSegmentFilter;
class LoaderTest extends \MailPoetTest {
private $segments;
/** @var Loader */
private $loader;
function _before() {
$this->loader = new Loader(new DBMapper());
\ORM::raw_execute('TRUNCATE ' . DynamicSegment::$_table);
\ORM::raw_execute('TRUNCATE ' . DynamicSegmentFilter::$_table);
$this->segments[] = DynamicSegment::createOrUpdate([
'name' => 'segment 1',
'description' => 'description',
]);
$this->segments[] = DynamicSegment::createOrUpdate([
'name' => 'segment 2',
'description' => 'description',
]);
$filter = new UserRole('Administrator', 'and');
$filter_data = DynamicSegmentFilter::create();
$filter_data->hydrate([
'segment_id' => $this->segments[1]->id,
'filter_data' => $filter->toArray(),
]);
$filter_data->save();
$filter = new UserRole('Editor', 'or');
$filter_data = DynamicSegmentFilter::create();
$filter_data->hydrate([
'segment_id' => $this->segments[0]->id,
'filter_data' => $filter->toArray(),
]);
$filter_data->save();
}
function testItLoadsSegments() {
$data = $this->loader->load();
expect($data)->count(2);
expect($data[0])->isInstanceOf('\MailPoet\Premium\Models\DynamicSegment');
expect($data[1])->isInstanceOf('\MailPoet\Premium\Models\DynamicSegment');
}
function testItDoesNotLoadTrashedSegments() {
$this->segments[0]->trash();
$data = $this->loader->load();
expect($data)->count(1);
expect($data[0])->isInstanceOf('\MailPoet\Premium\Models\DynamicSegment');
expect($data[0]->name)->equals('segment 2');
}
function testItPopulatesCommonData() {
$data = $this->loader->load();
expect($data[0]->name)->equals('segment 1');
expect($data[1]->name)->equals('segment 2');
expect($data[0]->description)->equals('description');
expect($data[1]->description)->equals('description');
}
function testItPopulatesFilters() {
$data = $this->loader->load();
$filters0 = $data[0]->getFilters();
$filters1 = $data[1]->getFilters();
expect($filters0)->count(1);
expect($filters1)->count(1);
expect($filters0[0])->isInstanceOf('\MailPoet\Premium\DynamicSegments\Filters\UserRole');
expect($filters1[0])->isInstanceOf('\MailPoet\Premium\DynamicSegments\Filters\UserRole');
expect($filters0[0]->getRole())->equals('Editor');
expect($filters1[0]->getRole())->equals('Administrator');
}
function _after() {
\ORM::raw_execute('TRUNCATE ' . DynamicSegment::$_table);
\ORM::raw_execute('TRUNCATE ' . DynamicSegmentFilter::$_table);
}
}

View File

@@ -0,0 +1,63 @@
<?php
namespace MailPoet\Premium\DynamicSegments\Persistence\Loading;
use MailPoet\Premium\DynamicSegments\Filters\UserRole;
use MailPoet\Premium\DynamicSegments\Mappers\DBMapper;
use MailPoet\Premium\Models\DynamicSegment;
use MailPoet\Premium\Models\DynamicSegmentFilter;
class SingleSegmentLoaderTest extends \MailPoetTest {
private $segment;
/** @var SingleSegmentLoader */
private $loader;
function _before() {
$this->loader = new SingleSegmentLoader(new DBMapper());
\ORM::raw_execute('TRUNCATE ' . DynamicSegment::$_table);
\ORM::raw_execute('TRUNCATE ' . DynamicSegmentFilter::$_table);
$this->segment = DynamicSegment::createOrUpdate([
'name' => 'segment 1',
'description' => 'description',
]);
$filter = new UserRole('Administrator', 'and');
$filter_data = DynamicSegmentFilter::create();
$filter_data->hydrate([
'segment_id' => $this->segment->id,
'filter_data' => $filter->toArray(),
]);
$filter_data->save();
}
function testItLoadsSegments() {
$data = $this->loader->load($this->segment->id);
expect($data)->isInstanceOf('\MailPoet\Premium\Models\DynamicSegment');
}
function testItThrowsForUnknownSegment() {
$this->setExpectedException('InvalidArgumentException');
$this->loader->load($this->segment->id + 11564564);
}
function testItPopulatesCommonData() {
$data = $this->loader->load($this->segment->id);
expect($data->name)->equals('segment 1');
expect($data->description)->equals('description');
}
function testItPopulatesFilters() {
$data = $this->loader->load($this->segment->id);
$filters0 = $data->getFilters();
expect($filters0)->count(1);
expect($filters0[0])->isInstanceOf('\MailPoet\Premium\DynamicSegments\Filters\UserRole');
expect($filters0[0]->getRole())->equals('Administrator');
}
function _after() {
\ORM::raw_execute('TRUNCATE ' . DynamicSegment::$_table);
\ORM::raw_execute('TRUNCATE ' . DynamicSegmentFilter::$_table);
}
}

View File

@@ -0,0 +1,59 @@
<?php
namespace MailPoet\Premium\DynamicSegments\Persistence\Loading;
require_once(ABSPATH . 'wp-admin/includes/user.php');
use MailPoet\Premium\DynamicSegments\Filters\UserRole;
use MailPoet\Premium\Models\DynamicSegment;
class SubscribersCountTest extends \MailPoetTest {
function _before() {
$this->cleanData();
wp_insert_user([
'user_login' => 'user-role-test1',
'user_email' => 'user-role-test1@example.com',
'role' => 'editor',
'user_pass' => '12123154',
]);
wp_insert_user([
'user_login' => 'user-role-test2',
'user_email' => 'user-role-test2@example.com',
'role' => 'administrator',
'user_pass' => '12123154',
]);
wp_insert_user([
'user_login' => 'user-role-test3',
'user_email' => 'user-role-test3@example.com',
'role' => 'editor',
'user_pass' => '12123154',
]);
}
function testItConstructsQuery() {
$userRole = DynamicSegment::create();
$userRole->hydrate([
'name' => 'segment',
'description' => 'description',
]);
$userRole->setFilters([new UserRole('editor', 'and')]);
$loader = new SubscribersCount();
$count = $loader->getSubscribersCount($userRole);
expect($count)->equals(2);
}
function _after() {
$this->cleanData();
}
private function cleanData() {
$emails = ['user-role-test1@example.com', 'user-role-test2@example.com', 'user-role-test3@example.com'];
foreach ($emails as $email) {
$user = get_user_by('email', $email);
if ($user) {
wp_delete_user($user->ID);
}
}
}
}

View File

@@ -0,0 +1,66 @@
<?php
namespace MailPoet\Premium\DynamicSegments\Persistence\Loading;
require_once(ABSPATH . 'wp-admin/includes/user.php');
use MailPoet\Models\Subscriber;
use MailPoet\Premium\DynamicSegments\Filters\UserRole;
use MailPoet\Premium\Models\DynamicSegment;
class SubscribersIdsTest extends \MailPoetTest {
private $editors_wp_ids = [];
function _before() {
$this->cleanData();
$this->editors_wp_ids[] = wp_insert_user([
'user_login' => 'user-role-test1',
'user_email' => 'user-role-test1@example.com',
'role' => 'editor',
'user_pass' => '12123154',
]);
wp_insert_user([
'user_login' => 'user-role-test2',
'user_email' => 'user-role-test2@example.com',
'role' => 'administrator',
'user_pass' => '12123154',
]);
$this->editors_wp_ids[] = wp_insert_user([
'user_login' => 'user-role-test3',
'user_email' => 'user-role-test3@example.com',
'role' => 'editor',
'user_pass' => '12123154',
]);
}
function testItConstructsSubscribersIdQueryForAnyDynamicSegment() {
$userRole = DynamicSegment::create();
$userRole->hydrate([
'name' => 'segment',
'description' => 'description',
]);
$userRole->setFilters([new UserRole('editor', 'and')]);
$loader = new SubscribersIds();
$result = $loader->load($userRole);
$wp_ids = [
Subscriber::findOne($result[0]->id)->wp_user_id,
Subscriber::findOne($result[1]->id)->wp_user_id,
];
$this->assertEquals($wp_ids, $this->editors_wp_ids, $message = '', $delta = 0.0, $maxDepth = 10, $canonicalize = true);
}
function _after() {
$this->cleanData();
}
private function cleanData() {
$emails = ['user-role-test1@example.com', 'user-role-test2@example.com', 'user-role-test3@example.com'];
foreach ($emails as $email) {
$user = get_user_by('email', $email);
if ($user) {
wp_delete_user($user->ID);
}
}
}
}