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,59 @@
<?php
namespace MailPoet\Premium\DynamicSegments\FreePluginConnectors;
use Codeception\Stub;
use Codeception\Stub\Expected;
use MailPoet\Premium\Models\DynamicSegment;
class AddToNewslettersSegmentsTest extends \MailPoetTest {
function testItReturnsOriginalArray() {
$dynamic_segment = DynamicSegment::create();
$dynamic_segment->hydrate([
'name' => 'segment1',
'description' => '',
]);
$segment_loader = Stub::makeEmpty('\MailPoet\Premium\DynamicSegments\Persistence\Loading\Loader', ['load' => Expected::once(function () {
return [];
})]);
$subscribers_count_loader = Stub::makeEmpty('\MailPoet\Premium\DynamicSegments\Persistence\Loading\SubscribersCount', ['getSubscribersCount' => Expected::never()]);
$filter = new AddToNewslettersSegments($segment_loader, $subscribers_count_loader);
$result = $filter->add([$dynamic_segment]);
expect($result)->equals([$dynamic_segment]);
}
function testItAddsDynamicSegments() {
$dynamic_segment = DynamicSegment::create();
$dynamic_segment->hydrate([
'name' => 'segment2',
'description' => '',
'id' => 1,
]);
$segment_loader = Stub::makeEmpty('\MailPoet\Premium\DynamicSegments\Persistence\Loading\Loader', ['load' => Expected::once(function () use ($dynamic_segment) {
return [$dynamic_segment];
})]);
$subscribers_count_loader = Stub::makeEmpty('\MailPoet\Premium\DynamicSegments\Persistence\Loading\SubscribersCount', ['getSubscribersCount']);
$subscribers_count_loader
->expects($this->once())
->method('getSubscribersCount')
->with($this->equalTo($dynamic_segment))
->will($this->returnValue(4));
$filter = new AddToNewslettersSegments($segment_loader, $subscribers_count_loader);
$result = $filter->add([]);
expect($result)->count(1);
expect($result[0])->equals([
'id' => 1,
'name' => 'segment2',
'subscribers' => 4,
'deleted_at' => null,
]);
}
}

View File

@ -0,0 +1,98 @@
<?php
namespace MailPoet\Premium\DynamicSegments\FreePluginConnectors;
use Codeception\Stub;
use Codeception\Stub\Expected;
use MailPoet\Premium\Models\DynamicSegment;
class AddToSubscribersFiltersTest extends \MailPoetTest {
function testItReturnsOriginalArray() {
$original_segment = [
'label' => 'segment1',
'value' => '',
];
$segment_loader = Stub::makeEmpty('\MailPoet\Premium\DynamicSegments\Persistence\Loading\Loader', ['load' => Expected::once(function () {
return [];
})]);
$subscribers_count_loader = Stub::makeEmpty('\MailPoet\Premium\DynamicSegments\Persistence\Loading\SubscribersCount', ['getSubscribersCount' => Expected::never()]);
$filter = new AddToSubscribersFilters($segment_loader, $subscribers_count_loader);
$result = $filter->add([$original_segment]);
expect($result)->equals([$original_segment]);
}
function testItAddsDynamicSegments() {
$dynamic_segment = DynamicSegment::create();
$dynamic_segment->hydrate([
'name' => 'segment2',
'description' => '',
'id' => 1,
]);
$segment_loader = Stub::makeEmpty('\MailPoet\Premium\DynamicSegments\Persistence\Loading\Loader', ['load' => Expected::once(function () use ($dynamic_segment) {
return [$dynamic_segment];
})]);
$subscribers_count_loader = Stub::makeEmpty('\MailPoet\Premium\DynamicSegments\Persistence\Loading\SubscribersCount', ['getSubscribersCount']);
$subscribers_count_loader
->expects($this->once())
->method('getSubscribersCount')
->with($this->equalTo($dynamic_segment))
->will($this->returnValue(4));
$filter = new AddToSubscribersFilters($segment_loader, $subscribers_count_loader);
$result = $filter->add([]);
expect($result)->count(1);
expect($result[0])->equals([
'label' => 'segment2 (4)',
'value' => 1,
]);
}
function testItSortsTheResult() {
$dynamic_segment1 = DynamicSegment::create();
$dynamic_segment1->hydrate([
'name' => 'segment b',
'description' => '',
'id' => '1',
]);
$dynamic_segment2 = DynamicSegment::create();
$dynamic_segment2->hydrate([
'name' => 'segment a',
'description' => '',
'id' => '2',
]);
$segment_loader = Stub::makeEmpty(
'\MailPoet\Premium\DynamicSegments\Persistence\Loading\Loader',
[
'load' => Expected::once(function () use ($dynamic_segment1, $dynamic_segment2) {
return [$dynamic_segment1, $dynamic_segment2];
}),
]
);
$subscribers_count_loader = Stub::makeEmpty('\MailPoet\Premium\DynamicSegments\Persistence\Loading\SubscribersCount', ['getSubscribersCount']);
$subscribers_count_loader
->expects($this->exactly(2))
->method('getSubscribersCount')
->will($this->returnValue(4));
$filter = new AddToSubscribersFilters($segment_loader, $subscribers_count_loader);
$result = $filter->add([
['value' => '', 'label' => 'Special segment filter'],
['value' => '3', 'label' => 'segment c'],
]);
expect($result)->count(4);
expect($result[0]['value'])->equals('');
expect($result[1]['value'])->equals('2');
expect($result[2]['value'])->equals('1');
expect($result[3]['value'])->equals('3');
}
}

View File

@ -0,0 +1,108 @@
<?php
namespace MailPoet\Premium\DynamicSegments\FreePluginConnectors;
use Codeception\Util\Stub;
use MailPoet\Models\Segment;
use MailPoet\Models\Subscriber;
use MailPoet\Premium\Models\DynamicSegment;
class SendingNewslettersSubscribersFinderTest extends \MailPoetTest {
/** @var \MailPoet\Premium\DynamicSegments\Persistence\Loading\SingleSegmentLoader */
private $single_segment_loader;
/** @var \MailPoet\Premium\DynamicSegments\Persistence\Loading\SubscribersIds */
private $subscribers_ids_loader;
/** @var SendingNewslettersSubscribersFinder */
private $subscribers_in_segments_finder;
function _before() {
$this->single_segment_loader = Stub::makeEmpty('\MailPoet\Premium\DynamicSegments\Persistence\Loading\SingleSegmentLoader');
$this->subscribers_ids_loader = Stub::makeEmpty('\MailPoet\Premium\DynamicSegments\Persistence\Loading\SubscribersIds');
$this->subscribers_in_segments_finder = new SendingNewslettersSubscribersFinder($this->single_segment_loader, $this->subscribers_ids_loader);
}
function testFindSubscribersInSegmentReturnsEmptyIfNotDynamic() {
$this->single_segment_loader
->expects($this->never())
->method('load');
$this->subscribers_ids_loader
->expects($this->never())
->method('load');
$segment = Segment::create();
$segment->type = Segment::TYPE_DEFAULT;
$segment->id = 3;
$result = $this->subscribers_in_segments_finder->findSubscribersInSegment($segment, []);
expect($result)->count(0);
}
function testFindSubscribersInSegmentReturnsSubscribers() {
$dynamic_segment = DynamicSegment::create();
$dynamic_segment->hydrate([
'name' => 'segment 1',
'description' => '',
]);
$ids = [1, 2, 3];
$this->single_segment_loader
->expects($this->once())
->method('load')
->with($this->equalTo(3))
->will($this->returnValue($dynamic_segment));
$this->subscribers_ids_loader
->expects($this->once())
->method('load')
->with($this->equalTo($dynamic_segment), $ids)
->will($this->returnValue([new Subscriber()]));
$segment = DynamicSegment::create();
$segment->type = DynamicSegment::TYPE_DYNAMIC;
$segment->id = 3;
$result = $this->subscribers_in_segments_finder->findSubscribersInSegment($segment, $ids);
expect($result)->count(1);
}
function testGetSubscriberIdsInSegmentReturnsEmptyIfNotDynamic() {
$this->single_segment_loader
->expects($this->never())
->method('load');
$this->subscribers_ids_loader
->expects($this->never())
->method('load');
$segment = DynamicSegment::create();
$segment->type = DynamicSegment::TYPE_DEFAULT;
$result = $this->subscribers_in_segments_finder->getSubscriberIdsInSegment($segment);
expect($result)->count(0);
}
function testGetSubscriberIdsInSegmentReturnsSubscribers() {
$dynamic_segment = DynamicSegment::create();
$dynamic_segment->hydrate([
'name' => 'segment 2',
'description' => '',
]);
$subscriber1 = Subscriber::create();
$subscriber1->hydrate(['id' => 1]);
$subscriber2 = Subscriber::create();
$subscriber2->hydrate(['id' => 2]);
$this->single_segment_loader
->expects($this->once())
->method('load')
->with($this->equalTo(3))
->will($this->returnValue($dynamic_segment));
$this->subscribers_ids_loader
->expects($this->once())
->method('load')
->with($this->equalTo($dynamic_segment))
->will($this->returnValue([$subscriber1, $subscriber2]));
$segment = DynamicSegment::create();
$segment->type = DynamicSegment::TYPE_DYNAMIC;
$segment->id = 3;
$result = $this->subscribers_in_segments_finder->getSubscriberIdsInSegment($segment);
expect($result)->count(2);
expect($result[0]['id'])->equals(1);
expect($result[1]['id'])->equals(2);
}
}

View File

@ -0,0 +1,48 @@
<?php
namespace MailPoet\Premium\DynamicSegments\FreePluginConnectors;
use MailPoet\Premium\Models\DynamicSegment;
class SubscribersBulkActionHandlerTest extends \MailPoetTest {
function testItReturnsNullWithUnknownSegment() {
$segment = [
'name' => 'name',
'description' => 'desc',
'type' => 'unknown',
];
$handler = new SubscribersBulkActionHandler();
$result = $handler->apply($segment, [
'listing' => ['filter' => ['segment' => 5]],
'action' => 'trash',
]);
expect($result)->null();
}
function testItReturnsDataForDynamicSegment() {
$segment = DynamicSegment::createOrUpdate([
'name' => 'name',
'description' => 'desc',
'type' => DynamicSegment::TYPE_DYNAMIC,
]);
$handler = new SubscribersBulkActionHandler();
$result = $handler->apply($segment->asArray(), [
'listing' => ['filter' => ['segment' => $segment->id()]],
'action' => 'trash',
]);
expect($result)->notNull();
}
function _before() {
$this->cleanData();
}
function _after() {
$this->cleanData();
}
private function cleanData() {
\ORM::raw_execute('TRUNCATE ' . DynamicSegment::$_table);
}
}

View File

@ -0,0 +1,42 @@
<?php
namespace MailPoet\Premium\DynamicSegments\FreePluginConnectors;
use MailPoet\Premium\Models\DynamicSegment;
class SubscribersListingsHandlerFactoryTest extends \MailPoetTest {
function testItReturnsNullWithUnknownSegment() {
$segment = DynamicSegment::create();
$segment->id = 1;
$segment->name = 'name';
$segment->type = 'unknown';
$listings = new SubscribersListingsHandlerFactory();
$result = $listings->get($segment, []);
expect($result)->null();
}
function testItReturnsDataForDynamicSegment() {
$segment = DynamicSegment::createOrUpdate([
'name' => 'name',
'description' => 'desc',
'type' => DynamicSegment::TYPE_DYNAMIC,
]);
$listings = new SubscribersListingsHandlerFactory();
$result = $listings->get($segment, []);
expect($result)->notNull();
}
function _before() {
$this->cleanData();
}
function _after() {
$this->cleanData();
}
private function cleanData() {
\ORM::raw_execute('TRUNCATE ' . DynamicSegment::$_table);
}
}