Update tests

[MAILPOET-3929]
This commit is contained in:
wxa
2021-12-06 18:27:37 +03:00
committed by Veljko V
parent 5641efb0d7
commit 0779372c49
6 changed files with 18 additions and 216 deletions

View File

@@ -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();
}
}

View File

@@ -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');

View File

@@ -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,

View File

@@ -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']);

View File

@@ -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 {

View File

@@ -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() {