Update tests
[MAILPOET-3929]
This commit is contained in:
@@ -582,23 +582,10 @@ class ManageSegmentsCest {
|
||||
$i->seeInField($totalSpentDaysElement, '20');
|
||||
}
|
||||
|
||||
public function createAndEditDynamicSegmentWithMoreFilters(\AcceptanceTester $i) {
|
||||
$wpEditorEmail = 'test-editor3' . rand(1, 100000) . '@example.com';
|
||||
$wpEditorEmail2 = 'test-editor4-' . rand(1, 100000) . '@example.com';
|
||||
$wpAuthorEmail = 'test-author2-' . rand(1, 100000) . '@example.com';
|
||||
|
||||
$userFactory = new User();
|
||||
$userFactory->createUser('Test Editor 3', 'editor', $wpEditorEmail);
|
||||
$userFactory->createUser('Test Editor 4', 'editor', $wpEditorEmail2);
|
||||
$userFactory->createUser('Test Author 2', 'author', $wpAuthorEmail);
|
||||
|
||||
$i->activateWooCommerce();
|
||||
public function tryCreatingDynamicSegmentWithMoreFilters(\AcceptanceTester $i) {
|
||||
$filterRowOne = '[data-automation-id="filter-row-0"]';
|
||||
$filterRowTwo = '[data-automation-id="filter-row-1"]';
|
||||
$actionSelectElement = '[data-automation-id="select-segment-action"]';
|
||||
$roleSelectElement = '[data-automation-id="segment-wordpress-role"]';
|
||||
$conditionOrElement = '[data-automation-id="dynamic-segment-condition-type-or"]';
|
||||
$deleteElement = '[data-automation-id="delete-filter-row"]';
|
||||
|
||||
$i->wantTo('Create a new Dynamic Segment with 2 Filters');
|
||||
$segmentTitle = 'Segment Two Filters';
|
||||
@@ -611,48 +598,7 @@ class ManageSegmentsCest {
|
||||
$i->selectOptionInReactSelect('WordPress user role', "{$filterRowOne} {$actionSelectElement}");
|
||||
$i->selectOptionInReactSelect('Admin', "{$filterRowOne} {$roleSelectElement}");
|
||||
$i->click('Add a condition');
|
||||
$i->selectOptionInReactSelect('WordPress user role', "{$filterRowTwo} {$actionSelectElement}");
|
||||
$i->selectOptionInReactSelect('Editor', "{$filterRowTwo} {$roleSelectElement}");
|
||||
$i->click($conditionOrElement);
|
||||
$i->waitForText('This segment has 3 subscribers.');
|
||||
$i->click('Save');
|
||||
$i->waitForElement('[data-automation-id="dynamic-segments-tab"]');
|
||||
$i->seeNoJSErrors();
|
||||
|
||||
$i->wantTo('Open edit form and check that all values were saved correctly');
|
||||
$i->waitForText($segmentTitle);
|
||||
$i->clickItemRowActionByItemName($segmentTitle, 'Edit');
|
||||
$i->waitForElement($actionSelectElement);
|
||||
$i->fillField(['name' => 'name'], $segmentTitle);
|
||||
$i->fillField(['name' => 'description'], $segmentDesc);
|
||||
$i->see('WordPress user role', "{$filterRowOne} {$actionSelectElement}");
|
||||
$i->waitForText('Admin', 10, "{$filterRowOne} {$roleSelectElement}");
|
||||
$i->see('Admin', "{$filterRowOne} {$roleSelectElement}");
|
||||
$i->see('WordPress user role', "{$filterRowTwo} {$actionSelectElement}");
|
||||
$i->see('Editor', "{$filterRowTwo} {$roleSelectElement}");
|
||||
$i->seeNoJSErrors();
|
||||
|
||||
$i->wantTo('Edit segment and save');
|
||||
$editedTitle = 'Segment Two Filters Edited';
|
||||
$editedDesc = 'Segment description Edited';
|
||||
$i->fillField(['name' => 'name'], $editedTitle);
|
||||
$i->fillField(['name' => 'description'], $editedDesc);
|
||||
$i->click("{$filterRowOne} {$deleteElement}");
|
||||
$i->selectOptionInReactSelect('clicked any email', "{$filterRowOne} {$actionSelectElement}");
|
||||
$i->dontSeeElement($filterRowTwo);
|
||||
$i->dontSeeElement($conditionOrElement);
|
||||
$i->waitForText('This segment has 0 subscribers.');
|
||||
$i->click('Save');
|
||||
$i->waitForElement('[data-automation-id="dynamic-segments-tab"]');
|
||||
$i->waitForText($segmentTitle);
|
||||
$i->seeNoJSErrors();
|
||||
|
||||
$i->wantTo('Open edit form and check that all values were saved correctly');
|
||||
$i->clickItemRowActionByItemName($editedTitle, 'Edit');
|
||||
$i->waitForText('This segment has 0 subscribers.');
|
||||
$i->seeInField(['name' => 'name'], $editedTitle);
|
||||
$i->seeInField(['name' => 'description'], $editedDesc);
|
||||
$i->see('clicked any email', "{$filterRowOne} {$actionSelectElement}");
|
||||
$i->see('This is a Premium feature');
|
||||
$i->seeNoJSErrors();
|
||||
}
|
||||
}
|
||||
|
@@ -94,30 +94,6 @@ class DynamicSegmentsTest extends \MailPoetTest {
|
||||
expect($response->errors[0]['message'])->equals('Please specify a name.');
|
||||
}
|
||||
|
||||
public function testSaverSavesMultipleFilters() {
|
||||
$response = $this->endpoint->save([
|
||||
'name' => 'Test dynamic',
|
||||
'description' => 'description dynamic',
|
||||
'filters_connect' => DynamicSegmentFilterData::CONNECT_TYPE_OR,
|
||||
'filters' => [
|
||||
[
|
||||
'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE,
|
||||
'wordpressRole' => 'editor',
|
||||
'action' => UserRole::TYPE,
|
||||
],
|
||||
[
|
||||
'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE,
|
||||
'wordpressRole' => 'administrator',
|
||||
'action' => UserRole::TYPE,
|
||||
],
|
||||
],
|
||||
]);
|
||||
expect($response)->isInstanceOf('\MailPoet\API\JSON\SuccessResponse');
|
||||
expect($response->status)->equals(self::SUCCESS_RESPONSE_CODE);
|
||||
expect($response->data['name'])->equals('Test dynamic');
|
||||
expect($response->data['filters'])->count(2);
|
||||
}
|
||||
|
||||
public function testItCanTrashASegment() {
|
||||
$dynamicSegment = $this->createDynamicSegmentEntity('Trash test', 'description');
|
||||
|
||||
|
@@ -10,11 +10,8 @@ use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Entities\SendingQueueEntity;
|
||||
use MailPoet\Entities\StatisticsOpenEntity;
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\EmailAction;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\SubscriberSubscribedDate;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\UserRole;
|
||||
use MailPoet\Subscribers\SubscribersRepository;
|
||||
use MailPoet\WP\Functions;
|
||||
use MailPoetVendor\Carbon\Carbon;
|
||||
use MailPoetVendor\Doctrine\DBAL\Driver\Statement;
|
||||
|
||||
@@ -70,92 +67,6 @@ class FilterHandlerTest extends \MailPoetTest {
|
||||
expect($subscriber2->getEmail())->equals('user-role-test3@example.com');
|
||||
}
|
||||
|
||||
public function testItAppliesTwoFiltersWithoutSpecifyingConnection() {
|
||||
$wp = $this->diContainer->get(Functions::class);
|
||||
$segment = $this->getSegment('editor');
|
||||
$filterData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, SubscriberSubscribedDate::TYPE, [
|
||||
'operator' => SubscriberSubscribedDate::IN_THE_LAST,
|
||||
'value' => 30,
|
||||
]);
|
||||
$dynamicSegmentFilter = new DynamicSegmentFilterEntity($segment, $filterData);
|
||||
$this->entityManager->persist($dynamicSegmentFilter);
|
||||
$segment->addDynamicFilter($dynamicSegmentFilter);
|
||||
$this->entityManager->flush();
|
||||
$statement = $this->filterHandler->apply($this->getQueryBuilder(), $segment)->execute();
|
||||
assert($statement instanceof Statement);
|
||||
$result = $statement->fetchAll();
|
||||
expect($result)->count(2);
|
||||
}
|
||||
|
||||
public function testItAppliesTwoFiltersWithOr() {
|
||||
$segment = new SegmentEntity('Dynamic Segment', SegmentEntity::TYPE_DYNAMIC, 'description');
|
||||
$this->entityManager->persist($segment);
|
||||
$filterData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, UserRole::TYPE, [
|
||||
'wordpressRole' => 'administrator',
|
||||
'connect' => 'or',
|
||||
]);
|
||||
$dynamicSegmentFilter = new DynamicSegmentFilterEntity($segment, $filterData);
|
||||
$this->entityManager->persist($dynamicSegmentFilter);
|
||||
$segment->addDynamicFilter($dynamicSegmentFilter);
|
||||
$filterData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, UserRole::TYPE, [
|
||||
'wordpressRole' => 'editor',
|
||||
'connect' => 'or',
|
||||
]);
|
||||
$dynamicSegmentFilter = new DynamicSegmentFilterEntity($segment, $filterData);
|
||||
$this->entityManager->persist($dynamicSegmentFilter);
|
||||
$segment->addDynamicFilter($dynamicSegmentFilter);
|
||||
$this->entityManager->flush();
|
||||
$statement = $this->filterHandler->apply($this->getQueryBuilder(), $segment)->execute();
|
||||
assert($statement instanceof Statement);
|
||||
$result = $statement->fetchAll();
|
||||
expect($result)->count(3);
|
||||
}
|
||||
|
||||
public function testItAppliesTwoFiltersWithAnd() {
|
||||
$segment = new SegmentEntity('Dynamic Segment', SegmentEntity::TYPE_DYNAMIC, 'description');
|
||||
$this->entityManager->persist($segment);
|
||||
// filter user is an editor
|
||||
$editorData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, UserRole::TYPE, [
|
||||
'wordpressRole' => 'editor',
|
||||
'connect' => 'and',
|
||||
]);
|
||||
$filterEditor = new DynamicSegmentFilterEntity($segment, $editorData);
|
||||
$this->entityManager->persist($filterEditor);
|
||||
$segment->addDynamicFilter($filterEditor);
|
||||
// filter user opened an email
|
||||
$newsletter = new NewsletterEntity();
|
||||
$task = new ScheduledTaskEntity();
|
||||
$this->entityManager->persist($task);
|
||||
$queue = new SendingQueueEntity();
|
||||
$queue->setNewsletter($newsletter);
|
||||
$queue->setTask($task);
|
||||
$this->entityManager->persist($queue);
|
||||
$newsletter->getQueues()->add($queue);
|
||||
$newsletter->setSubject('newsletter 1');
|
||||
$newsletter->setStatus('sent');
|
||||
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||
$this->entityManager->persist($newsletter);
|
||||
$open = new StatisticsOpenEntity($newsletter, $queue, $this->subscriber1);
|
||||
$this->entityManager->persist($open);
|
||||
$open = new StatisticsOpenEntity($newsletter, $queue, $this->subscriber2);
|
||||
$this->entityManager->persist($open);
|
||||
$this->entityManager->flush();
|
||||
|
||||
$openedData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_EMAIL, EmailAction::ACTION_OPENED, [
|
||||
'newsletter_id' => $newsletter->getId(),
|
||||
'connect' => 'and',
|
||||
]);
|
||||
$filterOpened = new DynamicSegmentFilterEntity($segment, $openedData);
|
||||
$this->entityManager->persist($filterOpened);
|
||||
$segment->addDynamicFilter($filterOpened);
|
||||
$this->entityManager->flush();
|
||||
|
||||
$statement = $this->filterHandler->apply($this->getQueryBuilder(), $segment)->execute();
|
||||
assert($statement instanceof Statement);
|
||||
$result = $statement->fetchAll();
|
||||
expect($result)->count(1);
|
||||
}
|
||||
|
||||
private function getSegment(string $role): SegmentEntity {
|
||||
$filterData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, UserRole::TYPE, [
|
||||
'wordpressRole' => $role,
|
||||
|
@@ -46,50 +46,6 @@ class SegmentSaveControllerTest extends \MailPoetTest {
|
||||
]);
|
||||
}
|
||||
|
||||
public function testItCanSaveASegmentWithTwoFilters() {
|
||||
$segmentData = [
|
||||
'name' => 'Test Segment',
|
||||
'description' => 'Description',
|
||||
'filters_connect' => DynamicSegmentFilterData::CONNECT_TYPE_OR,
|
||||
'filters' => [
|
||||
[
|
||||
'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE,
|
||||
'wordpressRole' => ['administrator'],
|
||||
'action' => UserRole::TYPE,
|
||||
],
|
||||
[
|
||||
'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE,
|
||||
'wordpressRole' => ['editor'],
|
||||
'action' => UserRole::TYPE,
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
$segment = $this->saveController->save($segmentData);
|
||||
expect($segment->getName())->equals('Test Segment');
|
||||
expect($segment->getDescription())->equals('Description');
|
||||
expect($segment->getDynamicFilters()->count())->equals(2);
|
||||
expect($segment->getType())->equals(SegmentEntity::TYPE_DYNAMIC);
|
||||
$filter = $segment->getDynamicFilters()->first();
|
||||
assert($filter instanceof DynamicSegmentFilterEntity);
|
||||
expect($filter->getFilterData()->getFilterType())->equals(DynamicSegmentFilterData::TYPE_USER_ROLE);
|
||||
expect($filter->getFilterData()->getAction())->equals(UserRole::TYPE);
|
||||
expect($filter->getFilterData()->getData())->equals([
|
||||
'wordpressRole' => ['administrator'],
|
||||
'operator' => DynamicSegmentFilterData::OPERATOR_ANY,
|
||||
'connect' => DynamicSegmentFilterData::CONNECT_TYPE_OR,
|
||||
]);
|
||||
$filter = $segment->getDynamicFilters()->next();
|
||||
assert($filter instanceof DynamicSegmentFilterEntity);
|
||||
expect($filter->getFilterData()->getFilterType())->equals(DynamicSegmentFilterData::TYPE_USER_ROLE);
|
||||
expect($filter->getFilterData()->getAction())->equals(UserRole::TYPE);
|
||||
expect($filter->getFilterData()->getData())->equals([
|
||||
'wordpressRole' => ['editor'],
|
||||
'operator' => DynamicSegmentFilterData::OPERATOR_ANY,
|
||||
'connect' => DynamicSegmentFilterData::CONNECT_TYPE_OR,
|
||||
]);
|
||||
}
|
||||
|
||||
public function testItCanRemoveRedundantFilter() {
|
||||
$segment = $this->createSegment('Test Segment');
|
||||
$this->addDynamicFilter($segment, ['editor']);
|
||||
|
@@ -6,6 +6,7 @@ use MailPoet\Entities\DynamicSegmentFilterData;
|
||||
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceCategory;
|
||||
use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
|
||||
class SegmentDependencyValidatorTest extends \MailPoetTest {
|
||||
@@ -44,11 +45,19 @@ class SegmentDependencyValidatorTest extends \MailPoetTest {
|
||||
return $segment;
|
||||
}
|
||||
|
||||
private function createValidator(bool $isPluginActive): SegmentDependencyValidator {
|
||||
private function createValidator(
|
||||
bool $isPluginActive,
|
||||
bool $hasValidPremiumKey = true,
|
||||
bool $subscribersLimitReached = false
|
||||
): SegmentDependencyValidator {
|
||||
$wp = $this->make(WPFunctions::class, [
|
||||
'isPluginActive' => $isPluginActive,
|
||||
]);
|
||||
return new SegmentDependencyValidator($wp);
|
||||
$subscribersFeature = $this->make(SubscribersFeature::class, [
|
||||
'hasValidPremiumKey' => $hasValidPremiumKey,
|
||||
'check' => $subscribersLimitReached,
|
||||
]);
|
||||
return new SegmentDependencyValidator($subscribersFeature, $wp);
|
||||
}
|
||||
|
||||
private function cleanup(): void {
|
||||
|
@@ -13,6 +13,7 @@ use MailPoet\Segments\DynamicSegments\Filters\WooCommerceCountry;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceNumberOfOrders;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceProduct;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceSubscription;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
|
||||
class FilterDataMapperTest extends \MailPoetUnitTest {
|
||||
/** @var FilterDataMapper */
|
||||
@@ -20,7 +21,10 @@ class FilterDataMapperTest extends \MailPoetUnitTest {
|
||||
|
||||
public function _before() {
|
||||
parent::_before();
|
||||
$this->mapper = new FilterDataMapper();
|
||||
$wp = $this->makeEmpty(WPFunctions::class, [
|
||||
'hasFilter' => false,
|
||||
]);
|
||||
$this->mapper = new FilterDataMapper($wp);
|
||||
}
|
||||
|
||||
public function testItChecksFiltersArePresent() {
|
||||
|
Reference in New Issue
Block a user