Refactor segment test data factories to work with Doctrine
[MAILPOET-3177]
This commit is contained in:
committed by
Veljko V
parent
9fdebdb4d7
commit
f5df2601ef
@ -2,14 +2,22 @@
|
||||
|
||||
namespace MailPoet\Test\DataFactories;
|
||||
|
||||
use MailPoet\DynamicSegments\Mappers\FormDataMapper;
|
||||
use MailPoet\DynamicSegments\Persistence\Saver;
|
||||
use MailPoet\Models\DynamicSegment as DynamicSegmentModel;
|
||||
use MailPoet\DI\ContainerWrapper;
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Segments\DynamicSegments\SegmentSaveController;
|
||||
|
||||
class DynamicSegment extends Segment {
|
||||
|
||||
private $filterData = [];
|
||||
|
||||
/** @var SegmentSaveController */
|
||||
protected $saveController;
|
||||
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
$this->saveController = ContainerWrapper::getInstance()->get(SegmentSaveController::class);
|
||||
}
|
||||
|
||||
public function withUserRoleFilter($role) {
|
||||
$this->filterData['segmentType'] = 'userRole';
|
||||
$this->filterData['wordpressRole'] = $role;
|
||||
@ -30,21 +38,15 @@ class DynamicSegment extends Segment {
|
||||
return $this;
|
||||
}
|
||||
|
||||
/** @return DynamicSegmentModel */
|
||||
public function create() {
|
||||
$segment = DynamicSegmentModel::createOrUpdate($this->data);
|
||||
if (!empty($this->filterData['segmentType'])) {
|
||||
$segment = $this->createFilter($segment, $this->filterData);
|
||||
public function create(): SegmentEntity {
|
||||
if (empty($this->filterData['segmentType'])) {
|
||||
$this->withUserRoleFilter('editor');
|
||||
}
|
||||
$segment = $this->saveController->save(array_merge($this->data, $this->filterData));
|
||||
if (($this->data['deleted_at'] ?? null) instanceof \DateTimeInterface) {
|
||||
$segment->setDeletedAt($this->data['deleted_at']);
|
||||
$this->entityManager->flush();
|
||||
}
|
||||
return $segment;
|
||||
}
|
||||
|
||||
private function createFilter(DynamicSegmentModel $segment, array $filterData) {
|
||||
$data = array_merge($segment->asArray(), $filterData);
|
||||
$mapper = new FormDataMapper();
|
||||
$saver = new Saver();
|
||||
$dynamicSegment = $mapper->mapDataToDB($data);
|
||||
$saver->save($dynamicSegment);
|
||||
return $dynamicSegment;
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace MailPoet\Test\DataFactories;
|
||||
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Models\Form as FormModel;
|
||||
use MailPoetVendor\Carbon\Carbon;
|
||||
|
||||
@ -92,13 +93,13 @@ class Form {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \MailPoet\Models\Segment[] $segments
|
||||
* @param SegmentEntity[] $segments
|
||||
* @return $this
|
||||
*/
|
||||
public function withSegments(array $segments) {
|
||||
$ids = [];
|
||||
foreach ($segments as $segment) {
|
||||
$ids[] = $segment->id();
|
||||
$ids[] = $segment->getId();
|
||||
}
|
||||
$this->data['settings']['segments'] = $ids;
|
||||
return $this;
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace MailPoet\Test\DataFactories;
|
||||
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Models\NewsletterSegment;
|
||||
use MailPoet\Models\ScheduledTask;
|
||||
use MailPoet\Models\ScheduledTaskSubscriber;
|
||||
@ -241,12 +242,12 @@ class Newsletter {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \MailPoet\Models\Segment[] $segments
|
||||
* @param SegmentEntity[] $segments
|
||||
* @return Newsletter
|
||||
*/
|
||||
public function withSegments(array $segments) {
|
||||
foreach ($segments as $segment) {
|
||||
$this->segments[] = $segment->id();
|
||||
$this->segments[] = $segment->getId();
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
@ -2,13 +2,26 @@
|
||||
|
||||
namespace MailPoet\Test\DataFactories;
|
||||
|
||||
use MailPoet\DI\ContainerWrapper;
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Segments\SegmentSaveController;
|
||||
use MailPoetVendor\Carbon\Carbon;
|
||||
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
||||
|
||||
class Segment {
|
||||
|
||||
/** @var array */
|
||||
protected $data;
|
||||
|
||||
/** @var EntityManager */
|
||||
protected $entityManager;
|
||||
|
||||
/** @var SegmentSaveController */
|
||||
protected $saveController;
|
||||
|
||||
public function __construct() {
|
||||
$this->entityManager = ContainerWrapper::getInstance()->get(EntityManager::class);
|
||||
$this->saveController = ContainerWrapper::getInstance()->get(SegmentSaveController::class);
|
||||
$this->data = [
|
||||
'name' => 'List ' . bin2hex(random_bytes(7)), // phpcs:ignore
|
||||
];
|
||||
@ -40,8 +53,12 @@ class Segment {
|
||||
return $this;
|
||||
}
|
||||
|
||||
/** @return \MailPoet\Models\Segment */
|
||||
public function create() {
|
||||
return \MailPoet\Models\Segment::createOrUpdate($this->data);
|
||||
public function create(): SegmentEntity {
|
||||
$segment = $this->saveController->save($this->data);
|
||||
if (($this->data['deleted_at'] ?? null) instanceof \DateTimeInterface) {
|
||||
$segment->setDeletedAt($this->data['deleted_at']);
|
||||
$this->entityManager->flush();
|
||||
}
|
||||
return $segment;
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace MailPoet\Test\DataFactories;
|
||||
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Models\SubscriberSegment;
|
||||
|
||||
class Subscriber {
|
||||
@ -9,7 +10,7 @@ class Subscriber {
|
||||
/** @var array */
|
||||
private $data;
|
||||
|
||||
/** @var \MailPoet\Models\Segment[] */
|
||||
/** @var SegmentEntity[] */
|
||||
private $segments;
|
||||
|
||||
public function __construct() {
|
||||
@ -66,7 +67,7 @@ class Subscriber {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \MailPoet\Models\Segment[] $segments
|
||||
* @param SegmentEntity[] $segments
|
||||
* @return $this
|
||||
*/
|
||||
public function withSegments(array $segments) {
|
||||
@ -83,7 +84,7 @@ class Subscriber {
|
||||
foreach ($this->segments as $segment) {
|
||||
SubscriberSegment::createOrUpdate([
|
||||
'subscriber_id' => $subscriber->id(),
|
||||
'segment_id' => $segment->id(),
|
||||
'segment_id' => $segment->getId(),
|
||||
]);
|
||||
}
|
||||
return $subscriber;
|
||||
|
@ -40,7 +40,8 @@ class WooCommercePastRevenues {
|
||||
|
||||
// Create list
|
||||
$segmentFactory = new Segment();
|
||||
$subscribersList = $segmentFactory->withName('WC revenues load test')->create();
|
||||
$subscribersListEntity = $segmentFactory->withName('WC revenues load test')->create();
|
||||
$subscribersList = \MailPoet\Models\Segment::findOne($subscribersListEntity->getId());
|
||||
|
||||
// Create subscribers
|
||||
$subscribersIds = [];
|
||||
|
@ -2,7 +2,9 @@
|
||||
|
||||
namespace MailPoet\Test\Acceptance;
|
||||
|
||||
use MailPoet\Models\Segment as SegmentModel;
|
||||
use MailPoet\DI\ContainerWrapper;
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Segments\SegmentsRepository;
|
||||
use MailPoet\Test\DataFactories\Newsletter;
|
||||
use MailPoet\Test\DataFactories\Segment;
|
||||
use MailPoet\Test\DataFactories\User;
|
||||
@ -187,8 +189,8 @@ class ManageListsCest {
|
||||
$listName = 'WordPress Users';
|
||||
$subject = 'Blocking Post Notification';
|
||||
|
||||
$segment = SegmentModel::findOne(1);
|
||||
assert($segment instanceof SegmentModel);
|
||||
$segment = ContainerWrapper::getInstance()->get(SegmentsRepository::class)->findOneById(1);
|
||||
assert($segment instanceof SegmentEntity);
|
||||
|
||||
$newsletterFactory = new Newsletter();
|
||||
$newsletterFactory
|
||||
|
@ -39,11 +39,11 @@ class ManageSegmentsCest {
|
||||
$i->amOnMailpoetPage('Lists');
|
||||
$i->waitForElement('[data-automation-id="dynamic-segments-tab"]');
|
||||
$i->click('[data-automation-id="dynamic-segments-tab"]');
|
||||
$listingAutomationSelector = '[data-automation-id="listing_item_' . $segment->id . '"]';
|
||||
$listingAutomationSelector = '[data-automation-id="listing_item_' . $segment->getId() . '"]';
|
||||
$i->waitForText($segmentTitle, 10, $listingAutomationSelector);
|
||||
$i->clickItemRowActionByItemName($segmentTitle, 'View Subscribers');
|
||||
$i->seeInCurrentUrl('mailpoet-subscribers#');
|
||||
$i->seeInCurrentUrl('segment=' . $segment->id);
|
||||
$i->seeInCurrentUrl('segment=' . $segment->getId());
|
||||
$i->waitForText($wpEditorEmail, 20);
|
||||
$i->see($segmentTitle, ['css' => 'select[name=segment]']);
|
||||
$i->dontSee($wpAdminEmail);
|
||||
@ -143,7 +143,7 @@ class ManageSegmentsCest {
|
||||
$i->wantTo('Empty trash from other (2) segments');
|
||||
$i->click('[data-automation-id="empty_trash"]');
|
||||
$i->waitForText('2 segments were permanently deleted.');
|
||||
$listingAutomationSelector = '[data-automation-id="listing_item_' . $segment->id . '"]';
|
||||
$listingAutomationSelector = '[data-automation-id="listing_item_' . $segment->getId() . '"]';
|
||||
$i->dontSeeElement($listingAutomationSelector);
|
||||
$i->seeInCurrentURL(urlencode('group[all]'));
|
||||
$i->seeNoJSErrors();
|
||||
|
@ -33,8 +33,8 @@ class ReceiveWelcomeEmailCest {
|
||||
$welcomeNewsletterName = 'Welcome Email Test';
|
||||
$confirmationEmailName = 'Confirm your subscription';
|
||||
$newsletterFactory = new Newsletter();
|
||||
$newsletter = $newsletterFactory->withSubject($welcomeNewsletterName)
|
||||
->withWelcomeTypeForSegment($subscribersList->id())
|
||||
$newsletterFactory->withSubject($welcomeNewsletterName)
|
||||
->withWelcomeTypeForSegment($subscribersList->getId())
|
||||
->withActiveStatus()
|
||||
->withSegments([$subscribersList])
|
||||
->create();
|
||||
|
@ -11,7 +11,7 @@ class SettingsArchivePageCest {
|
||||
$segmentFactory = new Segment();
|
||||
$segment = $segmentFactory->withName('Empty Send')->create();
|
||||
$pageTitle = 'EmptyNewsletterArchive';
|
||||
$pageContent = "[mailpoet_archive segments=\"$segment->id\"]";
|
||||
$pageContent = "[mailpoet_archive segments=\"{$segment->getId()}\"]";
|
||||
$postUrl = $i->createPost($pageTitle, $pageContent);
|
||||
$i->login();
|
||||
$i->amOnUrl($postUrl);
|
||||
@ -26,7 +26,7 @@ class SettingsArchivePageCest {
|
||||
$newsletterFactory = new Newsletter();
|
||||
$newsletterFactory->withSubject('SentNewsletter')->withSentStatus()->withSendingQueue()->withSegments([$segment2])->create();
|
||||
$pageTitle2 = 'SentNewsletterArchive';
|
||||
$pageContent2 = "[mailpoet_archive segments=\"$segment2->id\"]";
|
||||
$pageContent2 = "[mailpoet_archive segments=\"{$segment2->getId()}\"]";
|
||||
$postUrl = $i->createPost($pageTitle2, $pageContent2);
|
||||
$i->login();
|
||||
$i->amOnUrl($postUrl);
|
||||
@ -43,7 +43,7 @@ class SettingsArchivePageCest {
|
||||
$newsletterFactory->withSubject('DraftNewsletter')->withDraftStatus()->withScheduledQueue()->withSegments([$segment3])->create();
|
||||
$newsletterFactory->withSubject('ScheduledNewsletter')->withScheduledStatus()->withScheduledQueue()->withSegments([$segment3])->create();
|
||||
$pageTitle3 = 'SentNewsletterArchive';
|
||||
$pageContent3 = "[mailpoet_archive segments=\"$segment3->id\"]";
|
||||
$pageContent3 = "[mailpoet_archive segments=\"{$segment3->getId()}\"]";
|
||||
$postUrl = $i->createPost($pageTitle3, $pageContent3);
|
||||
$i->login();
|
||||
$i->amOnUrl($postUrl);
|
||||
|
@ -22,7 +22,7 @@ class SubscriberCountShortcodeCest {
|
||||
$subscriberFactory->withSegments([$segment])->create();
|
||||
$pageTitle = 'Subscribers Shortcode Page';
|
||||
$pageText = 'Your subscriber count is';
|
||||
$pageContent = "$pageText [mailpoet_subscribers_count segments=\"$segment->id\"]";
|
||||
$pageContent = "$pageText [mailpoet_subscribers_count segments=\"{$segment->getId()}\"]";
|
||||
$i->cli(['post', 'create', '--post_type=page', '--post_status=publish', "--post_title=$pageTitle", "--post_content=$pageContent"]);
|
||||
$i->login();
|
||||
$i->amOnPage('/wp-admin/edit.php?post_type=page');
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace MailPoet\Test\Acceptance;
|
||||
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Test\DataFactories\Segment;
|
||||
use MailPoet\Test\DataFactories\Subscriber;
|
||||
|
||||
@ -11,7 +12,7 @@ class SubscriberManagementCest {
|
||||
const INACTIVE_SUBSCRIBERS_COUNT = 4;
|
||||
const INACTIVE_LIST_NAME = 'Inactivity';
|
||||
|
||||
/** @var \MailPoet\Models\Segment */
|
||||
/** @var SegmentEntity */
|
||||
private $segment;
|
||||
|
||||
public function _before() {
|
||||
@ -69,7 +70,7 @@ class SubscriberManagementCest {
|
||||
$i->fillField(['name' => 'email'], 'newglobaluser99@fakemail.fake');
|
||||
$i->fillField(['name' => 'first_name'], 'New');
|
||||
$i->fillField(['name' => 'last_name'], 'GlobalUser');
|
||||
$i->selectOptionInSelect2($this->segment->get('name'));
|
||||
$i->selectOptionInSelect2($this->segment->getName());
|
||||
$i->click('[data-automation-id="subscriber_edit_form"] [type="submit"]');
|
||||
$i->amOnMailPoetPage ('Subscribers');
|
||||
$i->searchFor('newglobaluser99@fakemail.fake');
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
namespace MailPoet\Test\Acceptance;
|
||||
|
||||
use MailPoet\Models\DynamicSegment as SegmentModel;
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Test\DataFactories\DynamicSegment;
|
||||
use MailPoet\Test\DataFactories\Settings;
|
||||
use MailPoet\Test\DataFactories\WooCommerceProduct;
|
||||
@ -23,10 +23,10 @@ class WooCommerceDynamicSegmentsCest {
|
||||
/** @var int */
|
||||
private $productCategoryId;
|
||||
|
||||
/** @var SegmentModel */
|
||||
/** @var SegmentEntity */
|
||||
private $categorySegment;
|
||||
|
||||
/** @var SegmentModel */
|
||||
/** @var SegmentEntity */
|
||||
private $productSegment;
|
||||
|
||||
public function _before(\AcceptanceTester $i) {
|
||||
@ -62,7 +62,7 @@ class WooCommerceDynamicSegmentsCest {
|
||||
$i->amOnMailpoetPage('Lists');
|
||||
$i->click('[data-automation-id="dynamic-segments-tab"]');
|
||||
$i->waitForText(self::CATEGORY_SEGMENT);
|
||||
$categorySegmentRow = "[data-automation-id='listing_item_{$this->categorySegment->id}']";
|
||||
$categorySegmentRow = "[data-automation-id='listing_item_{$this->categorySegment->getId()}']";
|
||||
$i->see('1', $categorySegmentRow . " [data-colname='Number of subscribers']");
|
||||
$i->clickItemRowActionByItemName(self::CATEGORY_SEGMENT, 'View Subscribers');
|
||||
$i->waitForText($customerEmail);
|
||||
@ -71,7 +71,7 @@ class WooCommerceDynamicSegmentsCest {
|
||||
$i->amOnMailpoetPage('Lists');
|
||||
$i->click('[data-automation-id="dynamic-segments-tab"]');
|
||||
$i->waitForText(self::PRODUCT_SEGMENT);
|
||||
$productSegmentRow = "[data-automation-id='listing_item_{$this->productSegment->id}']";
|
||||
$productSegmentRow = "[data-automation-id='listing_item_{$this->productSegment->getId()}']";
|
||||
$i->see('1', $productSegmentRow . " [data-colname='Number of subscribers']");
|
||||
$i->clickItemRowActionByItemName(self::PRODUCT_SEGMENT, 'View Subscribers');
|
||||
$i->waitForText($customerEmail);
|
||||
@ -88,7 +88,7 @@ class WooCommerceDynamicSegmentsCest {
|
||||
$i->amOnMailpoetPage('Lists');
|
||||
$i->click('[data-automation-id="dynamic-segments-tab"]');
|
||||
$i->waitForText(self::CATEGORY_SEGMENT);
|
||||
$categorySegmentRow = "[data-automation-id='listing_item_{$this->categorySegment->id}']";
|
||||
$categorySegmentRow = "[data-automation-id='listing_item_{$this->categorySegment->getId()}']";
|
||||
$i->see('1', $categorySegmentRow . " [data-colname='Number of subscribers']");
|
||||
$i->clickItemRowActionByItemName(self::CATEGORY_SEGMENT, 'View Subscribers');
|
||||
$i->waitForText($customerEmail);
|
||||
@ -97,7 +97,7 @@ class WooCommerceDynamicSegmentsCest {
|
||||
$i->amOnMailpoetPage('Lists');
|
||||
$i->click('[data-automation-id="dynamic-segments-tab"]');
|
||||
$i->waitForText(self::PRODUCT_SEGMENT);
|
||||
$productSegmentRow = "[data-automation-id='listing_item_{$this->productSegment->id}']";
|
||||
$productSegmentRow = "[data-automation-id='listing_item_{$this->productSegment->getId()}']";
|
||||
$i->see('0', $productSegmentRow . " [data-colname='Number of subscribers']");
|
||||
}
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ use MailPoet\API\JSON\ResponseBuilders\SubscribersResponseBuilder;
|
||||
use MailPoet\API\JSON\v1\Subscribers;
|
||||
use MailPoet\DI\ContainerWrapper;
|
||||
use MailPoet\Entities\CustomFieldEntity;
|
||||
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
||||
use MailPoet\Entities\FormEntity;
|
||||
use MailPoet\Entities\NewsletterEntity;
|
||||
use MailPoet\Entities\NewsletterOptionEntity;
|
||||
@ -331,21 +332,21 @@ class SubscribersTest extends \MailPoetTest {
|
||||
expect($response->data[0]['email'])->equals($this->subscriber2->getEmail());
|
||||
}
|
||||
|
||||
public function testItCanLoadDymanicSegments() {
|
||||
public function testItCanLoadDynamicSegments() {
|
||||
$dynamicSegmentFactory = new DynamicSegment();
|
||||
$dynamicSegment = $dynamicSegmentFactory
|
||||
->withName('Dynamic')
|
||||
->withUserRoleFilter('editor')
|
||||
->create();
|
||||
$dynamicSegment->save();
|
||||
$wpUserEmail = 'wpuserEditor@example.com';
|
||||
$this->tester->deleteWordPressUser($wpUserEmail);
|
||||
$this->tester->createWordPressUser($wpUserEmail, 'editor');
|
||||
$response = $this->endpoint->listing([
|
||||
'filter' => [
|
||||
'segment' => $dynamicSegment->id,
|
||||
'segment' => $dynamicSegment->getId(),
|
||||
],
|
||||
]);
|
||||
expect($response->meta['filters']['segment'])->contains(['value' => $dynamicSegment->id, 'label' => 'Dynamic (1)']);
|
||||
expect($response->meta['filters']['segment'])->contains(['value' => $dynamicSegment->getId(), 'label' => 'Dynamic (1)']);
|
||||
$this->tester->deleteWordPressUser($wpUserEmail);
|
||||
}
|
||||
|
||||
@ -911,6 +912,7 @@ class SubscribersTest extends \MailPoetTest {
|
||||
$this->truncateEntity(NewsletterOptionEntity::class);
|
||||
$this->truncateEntity(NewsletterOptionFieldEntity::class);
|
||||
$this->truncateEntity(SegmentEntity::class);
|
||||
$this->truncateEntity(DynamicSegmentFilterEntity::class);
|
||||
$this->truncateEntity(SendingQueueEntity::class);
|
||||
$this->truncateEntity(SubscriberEntity::class);
|
||||
$this->truncateEntity(SubscriberSegmentEntity::class);
|
||||
|
Reference in New Issue
Block a user