diff --git a/lib/API/JSON/ResponseBuilders/DynamicSegmentsResponseBuilder.php b/lib/API/JSON/ResponseBuilders/DynamicSegmentsResponseBuilder.php index ef5aa7e773..8145ec30e5 100644 --- a/lib/API/JSON/ResponseBuilders/DynamicSegmentsResponseBuilder.php +++ b/lib/API/JSON/ResponseBuilders/DynamicSegmentsResponseBuilder.php @@ -49,6 +49,8 @@ class DynamicSegmentsResponseBuilder { foreach ($dynamicFilters as $dynamicFilter) { $filter = $dynamicFilter->getFilterData()->getData(); $filter['id'] = $dynamicFilter->getId(); + $filter['segmentType'] = $dynamicFilter->getFilterData()->getFilterType(); // We need to add filterType with key segmentType due to BC + $filter['action'] = $dynamicFilter->getFilterData()->getAction(); $filters[] = $filter; } $data['filters'] = $filters; diff --git a/lib/Analytics/Reporter.php b/lib/Analytics/Reporter.php index c8b5a604b8..d48d210164 100644 --- a/lib/Analytics/Reporter.php +++ b/lib/Analytics/Reporter.php @@ -193,7 +193,7 @@ class Reporter { } private function isFilterTypeActive(string $segmentType, string $action): bool { - if ($this->dynamicSegmentFilterRepository->findOnyBySegmentTypeAndAction($segmentType, $action)) { + if ($this->dynamicSegmentFilterRepository->findOnyByFilterTypeAndAction($segmentType, $action)) { return true; } return false; diff --git a/lib/Segments/DynamicSegments/FilterDataMapper.php b/lib/Segments/DynamicSegments/FilterDataMapper.php index 153f8e007d..51816c169b 100644 --- a/lib/Segments/DynamicSegments/FilterDataMapper.php +++ b/lib/Segments/DynamicSegments/FilterDataMapper.php @@ -63,9 +63,7 @@ class FilterDataMapper { } if ($data['action'] === SubscriberSubscribedDate::TYPE) { if (empty($data['value'])) throw new InvalidFilterException('Missing number of days', InvalidFilterException::MISSING_VALUE); - return new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => $data['action'], + return new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, $data['action'], [ 'value' => $data['value'], 'operator' => $data['operator'] ?? SubscriberSubscribedDate::BEFORE, 'connect' => $data['connect'], @@ -76,8 +74,6 @@ class FilterDataMapper { if (empty($data['custom_field_type'])) throw new InvalidFilterException('Missing custom field type', InvalidFilterException::MISSING_VALUE); if (!isset($data['value'])) throw new InvalidFilterException('Missing value', InvalidFilterException::MISSING_VALUE); $filterData = [ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => $data['action'], 'value' => $data['value'], 'custom_field_id' => $data['custom_field_id'], 'custom_field_type' => $data['custom_field_type'], @@ -85,13 +81,11 @@ class FilterDataMapper { ]; if (!empty($data['date_type'])) $filterData['date_type'] = $data['date_type']; if (!empty($data['operator'])) $filterData['operator'] = $data['operator']; - return new DynamicSegmentFilterData($filterData); + return new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, $data['action'], $filterData); } if (empty($data['wordpressRole'])) throw new InvalidFilterException('Missing role', InvalidFilterException::MISSING_ROLE); - return new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, + return new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, $data['action'], [ 'wordpressRole' => $data['wordpressRole'], - 'action' => $data['action'], 'connect' => $data['connect'], ]); } @@ -109,23 +103,21 @@ class FilterDataMapper { return $this->createEmailOpensAbsoluteCount($data); } if ($data['action'] === EmailAction::ACTION_CLICKED_ANY) { - return new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, - 'action' => $data['action'], + return new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_EMAIL, $data['action'], [ 'connect' => $data['connect'], ]); } if (empty($data['newsletter_id'])) throw new InvalidFilterException('Missing newsletter id', InvalidFilterException::MISSING_NEWSLETTER_ID); $filterData = [ - 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, - 'action' => $data['action'], 'newsletter_id' => $data['newsletter_id'], 'connect' => $data['connect'], ]; + $filterType = DynamicSegmentFilterData::TYPE_EMAIL; + $action = $data['action']; if (isset($data['link_id'])) { $filterData['link_id'] = $data['link_id']; } - return new DynamicSegmentFilterData($filterData); + return new DynamicSegmentFilterData($filterType, $action, $filterData); } /** @@ -135,14 +127,14 @@ class FilterDataMapper { if (!isset($data['opens'])) throw new InvalidFilterException('Missing number of opens', InvalidFilterException::MISSING_VALUE); if (empty($data['days'])) throw new InvalidFilterException('Missing number of days', InvalidFilterException::MISSING_VALUE); $filterData = [ - 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, - 'action' => $data['action'], 'opens' => $data['opens'], 'days' => $data['days'], 'operator' => $data['operator'] ?? 'more', 'connect' => $data['connect'], ]; - return new DynamicSegmentFilterData($filterData); + $filterType = DynamicSegmentFilterData::TYPE_EMAIL; + $action = $data['action']; + return new DynamicSegmentFilterData($filterType, $action, $filterData); } /** @@ -151,10 +143,10 @@ class FilterDataMapper { private function createWooCommerce(array $data): DynamicSegmentFilterData { if (empty($data['action'])) throw new InvalidFilterException('Missing action', InvalidFilterException::MISSING_ACTION); $filterData = [ - 'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE, - 'action' => $data['action'], 'connect' => $data['connect'], ]; + $filterType = DynamicSegmentFilterData::TYPE_WOOCOMMERCE; + $action = $data['action']; if ($data['action'] === WooCommerceCategory::ACTION_CATEGORY) { if (!isset($data['category_id'])) throw new InvalidFilterException('Missing category', InvalidFilterException::MISSING_CATEGORY_ID); $filterData['category_id'] = $data['category_id']; @@ -187,7 +179,7 @@ class FilterDataMapper { } else { throw new InvalidFilterException("Unknown action " . $data['action'], InvalidFilterException::MISSING_ACTION); } - return new DynamicSegmentFilterData($filterData); + return new DynamicSegmentFilterData($filterType, $action, $filterData); } /** @@ -196,16 +188,16 @@ class FilterDataMapper { private function createWooCommerceSubscription(array $data): DynamicSegmentFilterData { if (empty($data['action'])) throw new InvalidFilterException('Missing action', InvalidFilterException::MISSING_ACTION); $filterData = [ - 'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE_SUBSCRIPTION, - 'action' => $data['action'], 'connect' => $data['connect'], ]; + $filterType = DynamicSegmentFilterData::TYPE_WOOCOMMERCE_SUBSCRIPTION; + $action = $data['action']; if ($data['action'] === WooCommerceSubscription::ACTION_HAS_ACTIVE) { if (!isset($data['product_id'])) throw new InvalidFilterException('Missing product', InvalidFilterException::MISSING_PRODUCT_ID); $filterData['product_id'] = $data['product_id']; } else { throw new InvalidFilterException("Unknown action " . $data['action'], InvalidFilterException::MISSING_ACTION); } - return new DynamicSegmentFilterData($filterData); + return new DynamicSegmentFilterData($filterType, $action, $filterData); } } diff --git a/lib/Segments/DynamicSegments/FilterFactory.php b/lib/Segments/DynamicSegments/FilterFactory.php index 1590a92172..6633ca2775 100644 --- a/lib/Segments/DynamicSegments/FilterFactory.php +++ b/lib/Segments/DynamicSegments/FilterFactory.php @@ -81,7 +81,7 @@ class FilterFactory { public function getFilterForFilterEntity(DynamicSegmentFilterEntity $filter): Filter { $filterData = $filter->getFilterData(); $filterType = $filterData->getFilterType(); - $action = $filterData->getParam('action'); + $action = $filterData->getAction(); switch ($filterType) { case DynamicSegmentFilterData::TYPE_USER_ROLE: return $this->userRole($action); diff --git a/lib/Segments/DynamicSegments/Filters/EmailAction.php b/lib/Segments/DynamicSegments/Filters/EmailAction.php index c3d28e68f8..5f88f8ed72 100644 --- a/lib/Segments/DynamicSegments/Filters/EmailAction.php +++ b/lib/Segments/DynamicSegments/Filters/EmailAction.php @@ -49,7 +49,7 @@ class EmailAction implements Filter { public function apply(QueryBuilder $queryBuilder, DynamicSegmentFilterEntity $filter): QueryBuilder { $filterData = $filter->getFilterData(); - $action = $filterData->getParam('action'); + $action = $filterData->getAction(); $newsletterId = (int)$filterData->getParam('newsletter_id'); $linkId = $filterData->getParam('link_id') ? (int)$filterData->getParam('link_id') : null; $parameterSuffix = (string)($filter->getId() ?? Security::generateRandomString()); diff --git a/lib/Segments/DynamicSegments/Filters/EmailOpensAbsoluteCountAction.php b/lib/Segments/DynamicSegments/Filters/EmailOpensAbsoluteCountAction.php index b7f1082acf..865ea9c4b6 100644 --- a/lib/Segments/DynamicSegments/Filters/EmailOpensAbsoluteCountAction.php +++ b/lib/Segments/DynamicSegments/Filters/EmailOpensAbsoluteCountAction.php @@ -28,7 +28,7 @@ class EmailOpensAbsoluteCountAction implements Filter { $filterData = $filter->getFilterData(); $days = $filterData->getParam('days'); $operator = $filterData->getParam('operator'); - $action = $filterData->getParam('action'); + $action = $filterData->getAction(); $parameterSuffix = $filter->getId() ?? Security::generateRandomString(); $statsTable = $this->entityManager->getClassMetadata(StatisticsOpenEntity::class)->getTableName(); $subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName(); diff --git a/tests/integration/API/JSON/ResponseBuilders/DynamicSegmentsResponseBuilderTest.php b/tests/integration/API/JSON/ResponseBuilders/DynamicSegmentsResponseBuilderTest.php index 1f26544ecf..46725fe40b 100644 --- a/tests/integration/API/JSON/ResponseBuilders/DynamicSegmentsResponseBuilderTest.php +++ b/tests/integration/API/JSON/ResponseBuilders/DynamicSegmentsResponseBuilderTest.php @@ -110,10 +110,8 @@ class DynamicSegmentsResponseBuilderTest extends \MailPoetTest { } private function addDynamicFilter(SegmentEntity $segment, string $wordpressRole): SegmentEntity { - $dynamicFilter = new DynamicSegmentFilterEntity($segment, new DynamicSegmentFilterData([ + $dynamicFilter = new DynamicSegmentFilterEntity($segment, new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, UserRole::TYPE, [ 'wordpressRole' => $wordpressRole, - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => UserRole::TYPE, 'connect' => DynamicSegmentFilterData::CONNECT_TYPE_AND, ])); $segment->getDynamicFilters()->add($dynamicFilter); diff --git a/tests/integration/API/JSON/v1/DynamicSegmentsTest.php b/tests/integration/API/JSON/v1/DynamicSegmentsTest.php index 7bb9dbead1..88d2c4c2cd 100644 --- a/tests/integration/API/JSON/v1/DynamicSegmentsTest.php +++ b/tests/integration/API/JSON/v1/DynamicSegmentsTest.php @@ -237,10 +237,12 @@ class DynamicSegmentsTest extends \MailPoetTest { private function createDynamicSegmentEntity(string $name, string $description): SegmentEntity { $segment = new SegmentEntity($name, SegmentEntity::TYPE_DYNAMIC, $description); - $dynamicFilter = new DynamicSegmentFilterEntity($segment, new DynamicSegmentFilterData([ - 'wordpressRole' => 'editor', - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - ])); + $filterData = new DynamicSegmentFilterData( + DynamicSegmentFilterData::TYPE_USER_ROLE, + UserRole::TYPE, + ['wordpressRole' => 'editor'] + ); + $dynamicFilter = new DynamicSegmentFilterEntity($segment, $filterData); $segment->getDynamicFilters()->add($dynamicFilter); $this->entityManager->persist($segment); $this->entityManager->persist($dynamicFilter); diff --git a/tests/integration/Segments/DynamicSegments/FilterHandlerTest.php b/tests/integration/Segments/DynamicSegments/FilterHandlerTest.php index b9b6230478..a41b341332 100644 --- a/tests/integration/Segments/DynamicSegments/FilterHandlerTest.php +++ b/tests/integration/Segments/DynamicSegments/FilterHandlerTest.php @@ -12,6 +12,7 @@ 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; @@ -84,13 +85,11 @@ class FilterHandlerTest extends \MailPoetTest { public function testItAppliesTwoFiltersWithoutSpecifyingConnection() { $wp = $this->diContainer->get(Functions::class); $segment = $this->getSegment('editor'); - $filter = new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => SubscriberSubscribedDate::TYPE, + $filterData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, SubscriberSubscribedDate::TYPE, [ 'operator' => SubscriberSubscribedDate::IN_THE_LAST, 'value' => 30, ]); - $dynamicSegmentFilter = new DynamicSegmentFilterEntity($segment, $filter); + $dynamicSegmentFilter = new DynamicSegmentFilterEntity($segment, $filterData); $this->entityManager->persist($dynamicSegmentFilter); $segment->addDynamicFilter($dynamicSegmentFilter); $this->entityManager->flush(); @@ -103,16 +102,14 @@ class FilterHandlerTest extends \MailPoetTest { public function testItAppliesTwoFiltersWithOr() { $segment = new SegmentEntity('Dynamic Segment', SegmentEntity::TYPE_DYNAMIC, 'description'); $this->entityManager->persist($segment); - $filterData = new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, + $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([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, + $filterData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, UserRole::TYPE, [ 'wordpressRole' => 'editor', 'connect' => 'or', ]); @@ -130,8 +127,7 @@ class FilterHandlerTest extends \MailPoetTest { $segment = new SegmentEntity('Dynamic Segment', SegmentEntity::TYPE_DYNAMIC, 'description'); $this->entityManager->persist($segment); // filter user is an editor - $editorData = new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, + $editorData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, UserRole::TYPE, [ 'wordpressRole' => 'editor', 'connect' => 'and', ]); @@ -157,9 +153,7 @@ class FilterHandlerTest extends \MailPoetTest { $this->entityManager->persist($open); $this->entityManager->flush(); - $openedData = new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, - 'action' => EmailAction::ACTION_OPENED, + $openedData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_EMAIL, EmailAction::ACTION_OPENED, [ 'newsletter_id' => $newsletter->getId(), 'connect' => 'and', ]); @@ -175,12 +169,11 @@ class FilterHandlerTest extends \MailPoetTest { } private function getSegment(string $role): SegmentEntity { - $filter = new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, + $filterData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, UserRole::TYPE, [ 'wordpressRole' => $role, ]); $segment = new SegmentEntity('Dynamic Segment', SegmentEntity::TYPE_DYNAMIC, 'description'); - $dynamicSegmentFilter = new DynamicSegmentFilterEntity($segment, $filter); + $dynamicSegmentFilter = new DynamicSegmentFilterEntity($segment, $filterData); $segment->addDynamicFilter($dynamicSegmentFilter); $this->entityManager->persist($segment); $this->entityManager->persist($dynamicSegmentFilter); diff --git a/tests/integration/Segments/DynamicSegments/Filters/EmailActionTest.php b/tests/integration/Segments/DynamicSegments/Filters/EmailActionTest.php index bb34c4a25c..a5b55b7723 100644 --- a/tests/integration/Segments/DynamicSegments/Filters/EmailActionTest.php +++ b/tests/integration/Segments/DynamicSegments/Filters/EmailActionTest.php @@ -222,9 +222,7 @@ class EmailActionTest extends \MailPoetTest { } private function getSegmentFilter(string $action, int $newsletterId = null, int $linkId = null): DynamicSegmentFilterEntity { - $segmentFilterData = new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, - 'action' => $action, + $segmentFilterData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_EMAIL, $action, [ 'newsletter_id' => $newsletterId, 'link_id' => $linkId, ]); diff --git a/tests/integration/Segments/DynamicSegments/Filters/EmailOpensAbsoluteCountActionTest.php b/tests/integration/Segments/DynamicSegments/Filters/EmailOpensAbsoluteCountActionTest.php index 3e1d8f3abf..871300e098 100644 --- a/tests/integration/Segments/DynamicSegments/Filters/EmailOpensAbsoluteCountActionTest.php +++ b/tests/integration/Segments/DynamicSegments/Filters/EmailOpensAbsoluteCountActionTest.php @@ -155,9 +155,7 @@ class EmailOpensAbsoluteCountActionTest extends \MailPoetTest { } private function getSegmentFilter(int $opens, string $operator, int $days, string $action = EmailOpensAbsoluteCountAction::TYPE): DynamicSegmentFilterEntity { - $segmentFilterData = new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, - 'action' => $action, + $segmentFilterData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_EMAIL, $action, [ 'operator' => $operator, 'opens' => $opens, 'days' => $days, diff --git a/tests/integration/Segments/DynamicSegments/Filters/MailPoetCustomFieldsTest.php b/tests/integration/Segments/DynamicSegments/Filters/MailPoetCustomFieldsTest.php index f04013688d..e6de77c5c5 100644 --- a/tests/integration/Segments/DynamicSegments/Filters/MailPoetCustomFieldsTest.php +++ b/tests/integration/Segments/DynamicSegments/Filters/MailPoetCustomFieldsTest.php @@ -34,9 +34,7 @@ class MailPoetCustomFieldsTest extends \MailPoetTest { $this->entityManager->persist(new SubscriberCustomFieldEntity($subscriber, $customField, 'some value')); $this->entityManager->persist($customField); $this->entityManager->flush(); - $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => MailPoetCustomFields::TYPE, + $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, MailPoetCustomFields::TYPE, [ 'custom_field_id' => $customField->getId(), 'custom_field_type' => CustomFieldEntity::TYPE_TEXT, 'operator' => 'equals', @@ -61,9 +59,7 @@ class MailPoetCustomFieldsTest extends \MailPoetTest { $this->entityManager->persist(new SubscriberCustomFieldEntity($subscriber, $customField, 'some value')); $this->entityManager->persist($customField); $this->entityManager->flush(); - $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => MailPoetCustomFields::TYPE, + $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, MailPoetCustomFields::TYPE, [ 'custom_field_id' => $customField->getId(), 'custom_field_type' => CustomFieldEntity::TYPE_TEXT, 'operator' => 'contains', @@ -88,9 +84,7 @@ class MailPoetCustomFieldsTest extends \MailPoetTest { $this->entityManager->persist(new SubscriberCustomFieldEntity($subscriber, $customField, 'Option 2')); $this->entityManager->persist($customField); $this->entityManager->flush(); - $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => MailPoetCustomFields::TYPE, + $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, MailPoetCustomFields::TYPE, [ 'custom_field_id' => $customField->getId(), 'custom_field_type' => CustomFieldEntity::TYPE_RADIO, 'operator' => 'equals', @@ -115,9 +109,7 @@ class MailPoetCustomFieldsTest extends \MailPoetTest { $this->entityManager->persist(new SubscriberCustomFieldEntity($subscriber, $customField, '1')); $this->entityManager->persist($customField); $this->entityManager->flush(); - $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => MailPoetCustomFields::TYPE, + $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, MailPoetCustomFields::TYPE, [ 'custom_field_id' => $customField->getId(), 'custom_field_type' => CustomFieldEntity::TYPE_CHECKBOX, 'operator' => 'equals', @@ -142,9 +134,7 @@ class MailPoetCustomFieldsTest extends \MailPoetTest { $this->entityManager->persist(new SubscriberCustomFieldEntity($this->subscribers[0], $customField, '1')); $this->entityManager->persist(new SubscriberCustomFieldEntity($this->subscribers[1], $customField, '0')); $this->entityManager->flush(); - $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => MailPoetCustomFields::TYPE, + $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, MailPoetCustomFields::TYPE, [ 'custom_field_id' => $customField->getId(), 'custom_field_type' => CustomFieldEntity::TYPE_CHECKBOX, 'operator' => 'equals', @@ -170,9 +160,7 @@ class MailPoetCustomFieldsTest extends \MailPoetTest { $this->entityManager->persist(new SubscriberCustomFieldEntity($this->subscribers[1], $customField, '2020-04-01 00:00:00')); $this->entityManager->persist(new SubscriberCustomFieldEntity($this->subscribers[2], $customField, '2020-05-01 00:00:00')); $this->entityManager->flush(); - $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => MailPoetCustomFields::TYPE, + $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, MailPoetCustomFields::TYPE, [ 'custom_field_id' => $customField->getId(), 'custom_field_type' => CustomFieldEntity::TYPE_DATE, 'date_type' => 'month', @@ -198,9 +186,7 @@ class MailPoetCustomFieldsTest extends \MailPoetTest { $this->entityManager->persist(new SubscriberCustomFieldEntity($this->subscribers[1], $customField, '2017-04-01 00:00:00')); $this->entityManager->persist(new SubscriberCustomFieldEntity($this->subscribers[2], $customField, '2020-05-01 00:00:00')); $this->entityManager->flush(); - $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => MailPoetCustomFields::TYPE, + $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, MailPoetCustomFields::TYPE, [ 'custom_field_id' => $customField->getId(), 'custom_field_type' => CustomFieldEntity::TYPE_DATE, 'date_type' => 'year', @@ -226,9 +212,7 @@ class MailPoetCustomFieldsTest extends \MailPoetTest { $this->entityManager->persist(new SubscriberCustomFieldEntity($this->subscribers[1], $customField, '2017-04-01 00:00:00')); $this->entityManager->persist(new SubscriberCustomFieldEntity($this->subscribers[2], $customField, '2020-05-01 00:00:00')); $this->entityManager->flush(); - $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => MailPoetCustomFields::TYPE, + $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, MailPoetCustomFields::TYPE, [ 'custom_field_id' => $customField->getId(), 'custom_field_type' => CustomFieldEntity::TYPE_DATE, 'date_type' => 'year', @@ -255,9 +239,7 @@ class MailPoetCustomFieldsTest extends \MailPoetTest { $this->entityManager->persist(new SubscriberCustomFieldEntity($this->subscribers[1], $customField, '2017-04-01 00:00:00')); $this->entityManager->persist(new SubscriberCustomFieldEntity($this->subscribers[2], $customField, '2020-05-01 00:00:00')); $this->entityManager->flush(); - $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => MailPoetCustomFields::TYPE, + $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, MailPoetCustomFields::TYPE, [ 'custom_field_id' => $customField->getId(), 'custom_field_type' => CustomFieldEntity::TYPE_DATE, 'date_type' => 'year_month', @@ -283,9 +265,7 @@ class MailPoetCustomFieldsTest extends \MailPoetTest { $this->entityManager->persist(new SubscriberCustomFieldEntity($this->subscribers[1], $customField, '2017-04-01 00:00:00')); $this->entityManager->persist(new SubscriberCustomFieldEntity($this->subscribers[2], $customField, '2020-05-01 00:00:00')); $this->entityManager->flush(); - $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => MailPoetCustomFields::TYPE, + $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, MailPoetCustomFields::TYPE, [ 'custom_field_id' => $customField->getId(), 'custom_field_type' => CustomFieldEntity::TYPE_DATE, 'date_type' => 'year_month', @@ -312,9 +292,7 @@ class MailPoetCustomFieldsTest extends \MailPoetTest { $this->entityManager->persist(new SubscriberCustomFieldEntity($this->subscribers[1], $customField, '2017-04-01 00:00:00')); $this->entityManager->persist(new SubscriberCustomFieldEntity($this->subscribers[2], $customField, '2020-05-01 00:00:00')); $this->entityManager->flush(); - $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => MailPoetCustomFields::TYPE, + $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, MailPoetCustomFields::TYPE, [ 'custom_field_id' => $customField->getId(), 'custom_field_type' => CustomFieldEntity::TYPE_DATE, 'date_type' => 'year_month_day', @@ -340,9 +318,7 @@ class MailPoetCustomFieldsTest extends \MailPoetTest { $this->entityManager->persist(new SubscriberCustomFieldEntity($this->subscribers[1], $customField, '2017-04-01 00:00:00')); $this->entityManager->persist(new SubscriberCustomFieldEntity($this->subscribers[2], $customField, '2020-05-01 00:00:00')); $this->entityManager->flush(); - $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => MailPoetCustomFields::TYPE, + $segmentFilter = $this->getSegmentFilter(new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, MailPoetCustomFields::TYPE, [ 'custom_field_id' => $customField->getId(), 'custom_field_type' => CustomFieldEntity::TYPE_DATE, 'date_type' => 'year_month_day', diff --git a/tests/integration/Segments/DynamicSegments/Filters/SubscriberSubscribedDateTest.php b/tests/integration/Segments/DynamicSegments/Filters/SubscriberSubscribedDateTest.php index 97de6595cc..2f4c6cd2e4 100644 --- a/tests/integration/Segments/DynamicSegments/Filters/SubscriberSubscribedDateTest.php +++ b/tests/integration/Segments/DynamicSegments/Filters/SubscriberSubscribedDateTest.php @@ -122,9 +122,7 @@ class SubscriberSubscribedDateTest extends \MailPoetTest { } private function getSegmentFilter(string $operator, string $value): DynamicSegmentFilterEntity { - $segmentFilterData = new DynamicSegmentFilterData([ - 'segmentType' => 'userRole', - 'action' => SubscriberSubscribedDate::TYPE, + $segmentFilterData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, SubscriberSubscribedDate::TYPE, [ 'operator' => $operator, 'value' => $value, ]); diff --git a/tests/integration/Segments/DynamicSegments/Filters/UserRoleTest.php b/tests/integration/Segments/DynamicSegments/Filters/UserRoleTest.php index 4c685f2098..a8686120e4 100644 --- a/tests/integration/Segments/DynamicSegments/Filters/UserRoleTest.php +++ b/tests/integration/Segments/DynamicSegments/Filters/UserRoleTest.php @@ -50,8 +50,7 @@ class UserRoleTest extends \MailPoetTest { } private function getSegmentFilter(string $role): DynamicSegmentFilterEntity { - $data = new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, + $data = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, UserRole::TYPE, [ 'wordpressRole' => $role, ]); $segment = new SegmentEntity('Dynamic Segment', SegmentEntity::TYPE_DYNAMIC, 'description'); diff --git a/tests/integration/Segments/DynamicSegments/Filters/WooCommerceNumberOfOrdersTest.php b/tests/integration/Segments/DynamicSegments/Filters/WooCommerceNumberOfOrdersTest.php index d3a9ef7eca..c8024ccc55 100644 --- a/tests/integration/Segments/DynamicSegments/Filters/WooCommerceNumberOfOrdersTest.php +++ b/tests/integration/Segments/DynamicSegments/Filters/WooCommerceNumberOfOrdersTest.php @@ -65,9 +65,7 @@ class WooCommerceNumberOfOrdersTest extends \MailPoetTest { } private function getSegmentFilter($comparisonType, $ordersCount, $days): DynamicSegmentFilterEntity { - $data = new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE, - 'action' => 'numberOfOrders', + $data = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_WOOCOMMERCE, WooCommerceNumberOfOrders::ACTION_NUMBER_OF_ORDERS, [ 'number_of_orders_type' => $comparisonType, 'number_of_orders_count' => $ordersCount, 'number_of_orders_days' => $days, diff --git a/tests/integration/Segments/DynamicSegments/Filters/WooCommerceTotalSpentTest.php b/tests/integration/Segments/DynamicSegments/Filters/WooCommerceTotalSpentTest.php index ced1eb3079..de12fb655d 100644 --- a/tests/integration/Segments/DynamicSegments/Filters/WooCommerceTotalSpentTest.php +++ b/tests/integration/Segments/DynamicSegments/Filters/WooCommerceTotalSpentTest.php @@ -87,9 +87,7 @@ class WooCommerceTotalSpentTest extends \MailPoetTest { } private function getSegmentFilter(string $type, float $amount, int $days): DynamicSegmentFilterEntity { - $data = new DynamicSegmentFilterData([ - 'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE, - 'action' => WooCommerceTotalSpent::ACTION_TOTAL_SPENT, + $data = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_WOOCOMMERCE, WooCommerceTotalSpent::ACTION_TOTAL_SPENT, [ 'total_spent_type' => $type, 'total_spent_amount' => $amount, 'total_spent_days' => $days, diff --git a/tests/integration/Segments/DynamicSegments/SegmentSaveControllerTest.php b/tests/integration/Segments/DynamicSegments/SegmentSaveControllerTest.php index 0284a1d8ad..ea2bbae5a4 100644 --- a/tests/integration/Segments/DynamicSegments/SegmentSaveControllerTest.php +++ b/tests/integration/Segments/DynamicSegments/SegmentSaveControllerTest.php @@ -36,10 +36,10 @@ class SegmentSaveControllerTest extends \MailPoetTest { 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([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, 'wordpressRole' => 'editor', - 'action' => UserRole::TYPE, 'connect' => DynamicSegmentFilterData::CONNECT_TYPE_AND, ]); } @@ -70,18 +70,18 @@ class SegmentSaveControllerTest extends \MailPoetTest { 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([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, 'wordpressRole' => 'administrator', - 'action' => UserRole::TYPE, '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([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, 'wordpressRole' => 'editor', - 'action' => UserRole::TYPE, 'connect' => DynamicSegmentFilterData::CONNECT_TYPE_OR, ]); } @@ -110,10 +110,10 @@ class SegmentSaveControllerTest extends \MailPoetTest { 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([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, 'wordpressRole' => 'subscriber', - 'action' => UserRole::TYPE, 'connect' => DynamicSegmentFilterData::CONNECT_TYPE_OR, ]); } @@ -159,12 +159,11 @@ class SegmentSaveControllerTest extends \MailPoetTest { } private function addDynamicFilter(SegmentEntity $segment, string $wordpressRole): DynamicSegmentFilterEntity { - $dynamicFilter = new DynamicSegmentFilterEntity($segment, new DynamicSegmentFilterData([ + $filterData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, UserRole::TYPE, [ 'wordpressRole' => $wordpressRole, - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => UserRole::TYPE, 'connect' => DynamicSegmentFilterData::CONNECT_TYPE_AND, - ])); + ]); + $dynamicFilter = new DynamicSegmentFilterEntity($segment, $filterData); $segment->getDynamicFilters()->add($dynamicFilter); $this->entityManager->persist($dynamicFilter); $this->entityManager->flush(); diff --git a/tests/integration/Segments/SegmentDependencyValidatorTest.php b/tests/integration/Segments/SegmentDependencyValidatorTest.php index 70e1e51ecb..6810d01e2d 100644 --- a/tests/integration/Segments/SegmentDependencyValidatorTest.php +++ b/tests/integration/Segments/SegmentDependencyValidatorTest.php @@ -5,6 +5,7 @@ namespace MailPoet\Segments; use MailPoet\Entities\DynamicSegmentFilterData; use MailPoet\Entities\DynamicSegmentFilterEntity; use MailPoet\Entities\SegmentEntity; +use MailPoet\Segments\DynamicSegments\Filters\WooCommerceCategory; use MailPoet\WP\Functions as WPFunctions; class SegmentDependencyValidatorTest extends \MailPoetTest { @@ -14,11 +15,11 @@ class SegmentDependencyValidatorTest extends \MailPoetTest { } public function testItMissingPluginsForWooCommerceDynamicSegment(): void { - $dynamicSegment = $this->createSegment([ - 'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE, - 'action' => 'purchasedCategory', - 'category_id' => 1, - ]); + $dynamicSegment = $this->createSegment( + DynamicSegmentFilterData::TYPE_WOOCOMMERCE, + WooCommerceCategory::ACTION_CATEGORY, + ['category_id' => 1] + ); // Plugin is not active $validator = $this->createValidator(false); $missingPlugins = $validator->getMissingPluginsBySegment($dynamicSegment); @@ -30,10 +31,10 @@ class SegmentDependencyValidatorTest extends \MailPoetTest { expect($missingPlugins)->equals([]); } - private function createSegment(array $filterData): SegmentEntity { + private function createSegment(string $filterType, string $action, array $filterData): SegmentEntity { $segment = new SegmentEntity('Dynamic Segment', SegmentEntity::TYPE_DYNAMIC, 'description'); $this->entityManager->persist($segment); - $filterData = new DynamicSegmentFilterData($filterData); + $filterData = new DynamicSegmentFilterData($filterType, $action, $filterData); $dynamicSegmentFilter = new DynamicSegmentFilterEntity($segment, $filterData); $this->entityManager->persist($dynamicSegmentFilter); $segment->addDynamicFilter($dynamicSegmentFilter); diff --git a/tests/integration/Segments/SegmentSubscribersRepositoryTest.php b/tests/integration/Segments/SegmentSubscribersRepositoryTest.php index 03e972b624..8ec4f76f3d 100644 --- a/tests/integration/Segments/SegmentSubscribersRepositoryTest.php +++ b/tests/integration/Segments/SegmentSubscribersRepositoryTest.php @@ -7,6 +7,7 @@ use MailPoet\Entities\DynamicSegmentFilterEntity; use MailPoet\Entities\SegmentEntity; use MailPoet\Entities\SubscriberEntity; use MailPoet\Entities\SubscriberSegmentEntity; +use MailPoet\Segments\DynamicSegments\Filters\UserRole; use MailPoet\Subscribers\Source; class SegmentSubscribersRepositoryTest extends \MailPoetTest { @@ -233,10 +234,12 @@ class SegmentSubscribersRepositoryTest extends \MailPoetTest { private function createDynamicSegmentEntity(string $role = 'editor'): SegmentEntity { $segment = new SegmentEntity('Segment' . rand(0, 10000), SegmentEntity::TYPE_DYNAMIC, 'Segment description'); - $dynamicFilter = new DynamicSegmentFilterEntity($segment, new DynamicSegmentFilterData([ - 'wordpressRole' => $role, - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - ])); + $filterData = new DynamicSegmentFilterData( + DynamicSegmentFilterData::TYPE_USER_ROLE, + UserRole::TYPE, + ['wordpressRole' => $role] + ); + $dynamicFilter = new DynamicSegmentFilterEntity($segment, $filterData); $segment->getDynamicFilters()->add($dynamicFilter); $this->entityManager->persist($segment); $this->entityManager->persist($dynamicFilter); diff --git a/tests/integration/Segments/SegmentsRepositoryTest.php b/tests/integration/Segments/SegmentsRepositoryTest.php index 43c738e06d..217c37d10e 100644 --- a/tests/integration/Segments/SegmentsRepositoryTest.php +++ b/tests/integration/Segments/SegmentsRepositoryTest.php @@ -7,6 +7,7 @@ use MailPoet\Entities\DynamicSegmentFilterEntity; use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\NewsletterSegmentEntity; use MailPoet\Entities\SegmentEntity; +use MailPoet\Segments\DynamicSegments\Filters\UserRole; class SegmentsRepositoryTest extends \MailPoetTest { /** @var SegmentsRepository */ @@ -76,10 +77,12 @@ class SegmentsRepositoryTest extends \MailPoetTest { private function createDynamicSegmentEntityForEditorUsers(): SegmentEntity { $segment = new SegmentEntity('Segment' . rand(0, 10000), SegmentEntity::TYPE_DYNAMIC, 'Segment description'); - $dynamicFilter = new DynamicSegmentFilterEntity($segment, new DynamicSegmentFilterData([ - 'wordpressRole' => 'editor', - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - ])); + $filterData = new DynamicSegmentFilterData( + DynamicSegmentFilterData::TYPE_USER_ROLE, + UserRole::TYPE, + ['wordpressRole' => 'editor'] + ); + $dynamicFilter = new DynamicSegmentFilterEntity($segment, $filterData); $segment->getDynamicFilters()->add($dynamicFilter); $this->entityManager->persist($segment); $this->entityManager->persist($dynamicFilter); diff --git a/tests/integration/Segments/SegmentsSimpleListRepositoryTest.php b/tests/integration/Segments/SegmentsSimpleListRepositoryTest.php index a6211e25e7..799ea653f7 100644 --- a/tests/integration/Segments/SegmentsSimpleListRepositoryTest.php +++ b/tests/integration/Segments/SegmentsSimpleListRepositoryTest.php @@ -8,6 +8,7 @@ use MailPoet\Entities\DynamicSegmentFilterEntity; use MailPoet\Entities\SegmentEntity; use MailPoet\Entities\SubscriberEntity; use MailPoet\Entities\SubscriberSegmentEntity; +use MailPoet\Segments\DynamicSegments\Filters\UserRole; use MailPoet\Subscribers\Source; class SegmentsSimpleListRepositoryTest extends \MailPoetTest { @@ -141,10 +142,12 @@ class SegmentsSimpleListRepositoryTest extends \MailPoetTest { private function createDynamicSegmentEntityForEditorUsers(): SegmentEntity { $segment = new SegmentEntity('Segment' . rand(0, 10000), SegmentEntity::TYPE_DYNAMIC, 'Segment description'); - $dynamicFilter = new DynamicSegmentFilterEntity($segment, new DynamicSegmentFilterData([ - 'wordpressRole' => 'editor', - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - ])); + $dynamicFilterData = new DynamicSegmentFilterData( + DynamicSegmentFilterData::TYPE_USER_ROLE, + UserRole::TYPE, + ['wordpressRole' => 'editor'] + ); + $dynamicFilter = new DynamicSegmentFilterEntity($segment, $dynamicFilterData); $segment->getDynamicFilters()->add($dynamicFilter); $this->entityManager->persist($segment); $this->entityManager->persist($dynamicFilter); diff --git a/tests/integration/Subscribers/ImportExport/ImportExportRepositoryTest.php b/tests/integration/Subscribers/ImportExport/ImportExportRepositoryTest.php index bf3dbddfb2..ac2baa8670 100644 --- a/tests/integration/Subscribers/ImportExport/ImportExportRepositoryTest.php +++ b/tests/integration/Subscribers/ImportExport/ImportExportRepositoryTest.php @@ -10,6 +10,7 @@ use MailPoet\Entities\SegmentEntity; use MailPoet\Entities\SubscriberCustomFieldEntity; use MailPoet\Entities\SubscriberEntity; use MailPoet\Entities\SubscriberSegmentEntity; +use MailPoet\Segments\DynamicSegments\Filters\UserRole; use MailPoet\Segments\SegmentsRepository; use MailPoet\Subscribers\SubscriberCustomFieldRepository; use MailPoet\Subscribers\SubscriberSegmentRepository; @@ -289,10 +290,12 @@ class ImportExportRepositoryTest extends \MailPoetTest { $user5 = $this->createSubscriber('user5@export-test.com', 'Five', 'User'); $segment1 = $this->createSegment('First', SegmentEntity::TYPE_DEFAULT); $segment2 = $this->createSegment('Dynamic Segment', SegmentEntity::TYPE_DYNAMIC); - $this->createDynamicSegmentFilter($segment2, [ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'wordpressRole' => 'editor', - ]); + $this->createDynamicSegmentFilter( + $segment2, + DynamicSegmentFilterData::TYPE_USER_ROLE, + UserRole::TYPE, + ['wordpressRole' => 'editor'] + ); $this->createSubscriberSegment($user4, $segment1, SubscriberEntity::STATUS_SUBSCRIBED); $this->createSubscriberSegment($user5, $segment1, SubscriberEntity::STATUS_SUBSCRIBED); @@ -381,9 +384,11 @@ class ImportExportRepositoryTest extends \MailPoetTest { private function createDynamicSegmentFilter( SegmentEntity $segment, + string $filterType, + string $action, array $filterData ): DynamicSegmentFilterEntity { - $filter = new DynamicSegmentFilterEntity($segment, new DynamicSegmentFilterData($filterData)); + $filter = new DynamicSegmentFilterEntity($segment, new DynamicSegmentFilterData($filterType, $action, $filterData)); $this->entityManager->persist($filter); $this->entityManager->flush(); return $filter; diff --git a/tests/integration/Subscribers/SubscriberListingRepositoryTest.php b/tests/integration/Subscribers/SubscriberListingRepositoryTest.php index dbda834e25..fccf58e0b9 100644 --- a/tests/integration/Subscribers/SubscriberListingRepositoryTest.php +++ b/tests/integration/Subscribers/SubscriberListingRepositoryTest.php @@ -9,6 +9,7 @@ use MailPoet\Entities\SubscriberEntity; use MailPoet\Entities\SubscriberSegmentEntity; use MailPoet\Listing\ListingDefinition; use MailPoet\Segments\DynamicSegments\FilterHandler; +use MailPoet\Segments\DynamicSegments\Filters\UserRole; use MailPoet\Segments\SegmentsRepository; use MailPoet\Segments\SegmentSubscribersRepository; @@ -292,10 +293,10 @@ class SubscriberListingRepositoryTest extends \MailPoetTest { private function createDynamicSegmentEntity(): SegmentEntity { $segment = new SegmentEntity('Segment' . rand(0, 10000), SegmentEntity::TYPE_DYNAMIC, 'Segment description'); - $dynamicFilter = new DynamicSegmentFilterEntity($segment, new DynamicSegmentFilterData([ + $filterData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, UserRole::TYPE, [ 'wordpressRole' => 'editor', - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - ])); + ]); + $dynamicFilter = new DynamicSegmentFilterEntity($segment, $filterData); $segment->getDynamicFilters()->add($dynamicFilter); $this->entityManager->persist($segment); $this->entityManager->persist($dynamicFilter); diff --git a/tests/unit/Segments/DynamicSegments/FilterDataMapperTest.php b/tests/unit/Segments/DynamicSegments/FilterDataMapperTest.php index 02fb98b438..c99552948d 100644 --- a/tests/unit/Segments/DynamicSegments/FilterDataMapperTest.php +++ b/tests/unit/Segments/DynamicSegments/FilterDataMapperTest.php @@ -58,9 +58,8 @@ class FilterDataMapperTest extends \MailPoetUnitTest { assert($filter instanceof DynamicSegmentFilterData); expect($filter)->isInstanceOf(DynamicSegmentFilterData::class); expect($filter->getFilterType())->equals(DynamicSegmentFilterData::TYPE_EMAIL); + expect($filter->getAction())->equals(EmailAction::ACTION_OPENED); expect($filter->getData())->equals([ - 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, - 'action' => EmailAction::ACTION_OPENED, 'newsletter_id' => 1, 'connect' => DynamicSegmentFilterData::CONNECT_TYPE_AND, ]); @@ -110,10 +109,9 @@ class FilterDataMapperTest extends \MailPoetUnitTest { assert($filter instanceof DynamicSegmentFilterData); expect($filter)->isInstanceOf(DynamicSegmentFilterData::class); expect($filter->getFilterType())->equals(DynamicSegmentFilterData::TYPE_USER_ROLE); + expect($filter->getAction())->equals('userRole'); expect($filter->getData())->equals([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, 'wordpressRole' => 'editor', - 'action' => 'userRole', 'connect' => DynamicSegmentFilterData::CONNECT_TYPE_AND, ]); } @@ -148,9 +146,8 @@ class FilterDataMapperTest extends \MailPoetUnitTest { assert($filter instanceof DynamicSegmentFilterData); expect($filter)->isInstanceOf(DynamicSegmentFilterData::class); expect($filter->getFilterType())->equals(DynamicSegmentFilterData::TYPE_USER_ROLE); + expect($filter->getAction())->equals(SubscriberSubscribedDate::TYPE); expect($filter->getData())->equals([ - 'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE, - 'action' => SubscriberSubscribedDate::TYPE, 'value' => 2, 'operator' => SubscriberSubscribedDate::AFTER, 'connect' => DynamicSegmentFilterData::CONNECT_TYPE_AND, @@ -171,9 +168,8 @@ class FilterDataMapperTest extends \MailPoetUnitTest { assert($filter instanceof DynamicSegmentFilterData); expect($filter)->isInstanceOf(DynamicSegmentFilterData::class); expect($filter->getFilterType())->equals(DynamicSegmentFilterData::TYPE_WOOCOMMERCE); + expect($filter->getAction())->equals(WooCommerceCategory::ACTION_CATEGORY); expect($filter->getData())->equals([ - 'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE, - 'action' => WooCommerceCategory::ACTION_CATEGORY, 'category_id' => '1', 'connect' => DynamicSegmentFilterData::CONNECT_TYPE_AND, ]); @@ -214,9 +210,8 @@ class FilterDataMapperTest extends \MailPoetUnitTest { assert($filter instanceof DynamicSegmentFilterData); expect($filter)->isInstanceOf(DynamicSegmentFilterData::class); expect($filter->getFilterType())->equals(DynamicSegmentFilterData::TYPE_WOOCOMMERCE); + expect($filter->getAction())->equals(WooCommerceProduct::ACTION_PRODUCT); expect($filter->getData())->equals([ - 'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE, - 'action' => WooCommerceProduct::ACTION_PRODUCT, 'product_id' => '10', 'connect' => DynamicSegmentFilterData::CONNECT_TYPE_AND, ]); @@ -246,9 +241,8 @@ class FilterDataMapperTest extends \MailPoetUnitTest { assert($filter instanceof DynamicSegmentFilterData); expect($filter)->isInstanceOf(DynamicSegmentFilterData::class); expect($filter->getFilterType())->equals(DynamicSegmentFilterData::TYPE_EMAIL); + expect($filter->getAction())->equals(EmailOpensAbsoluteCountAction::TYPE); expect($filter->getData())->equals([ - 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, - 'action' => EmailOpensAbsoluteCountAction::TYPE, 'opens' => 5, 'days' => 3, 'operator' => 'more', @@ -269,9 +263,8 @@ class FilterDataMapperTest extends \MailPoetUnitTest { assert($filter instanceof DynamicSegmentFilterData); expect($filter)->isInstanceOf(DynamicSegmentFilterData::class); expect($filter->getFilterType())->equals(DynamicSegmentFilterData::TYPE_EMAIL); + expect($filter->getAction())->equals(EmailAction::ACTION_CLICKED_ANY); expect($filter->getData())->equals([ - 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, - 'action' => EmailAction::ACTION_CLICKED_ANY, 'connect' => DynamicSegmentFilterData::CONNECT_TYPE_AND, ]); } @@ -291,9 +284,8 @@ class FilterDataMapperTest extends \MailPoetUnitTest { assert($filter instanceof DynamicSegmentFilterData); expect($filter)->isInstanceOf(DynamicSegmentFilterData::class); expect($filter->getFilterType())->equals(DynamicSegmentFilterData::TYPE_EMAIL); + expect($filter->getAction())->equals(EmailOpensAbsoluteCountAction::TYPE); expect($filter->getData())->equals([ - 'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL, - 'action' => EmailOpensAbsoluteCountAction::TYPE, 'opens' => 5, 'days' => 3, 'operator' => 'less', @@ -338,11 +330,12 @@ class FilterDataMapperTest extends \MailPoetUnitTest { assert($filter instanceof DynamicSegmentFilterData); $expectedResult = reset($data['filters']); - unset($expectedResult['some_mess']); + unset($expectedResult['some_mess'], $expectedResult['segmentType'], $expectedResult['action']); $expectedResult['connect'] = DynamicSegmentFilterData::CONNECT_TYPE_AND; expect($filter)->isInstanceOf(DynamicSegmentFilterData::class); expect($filter->getFilterType())->equals(DynamicSegmentFilterData::TYPE_WOOCOMMERCE); + expect($filter->getAction())->equals(WooCommerceNumberOfOrders::ACTION_NUMBER_OF_ORDERS); expect($filter->getData())->equals($expectedResult); } @@ -371,9 +364,8 @@ class FilterDataMapperTest extends \MailPoetUnitTest { assert($filter instanceof DynamicSegmentFilterData); expect($filter)->isInstanceOf(DynamicSegmentFilterData::class); expect($filter->getFilterType())->equals(DynamicSegmentFilterData::TYPE_WOOCOMMERCE_SUBSCRIPTION); + expect($filter->getAction())->equals(WooCommerceSubscription::ACTION_HAS_ACTIVE); expect($filter->getData())->equals([ - 'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE_SUBSCRIPTION, - 'action' => WooCommerceSubscription::ACTION_HAS_ACTIVE, 'product_id' => '10', 'connect' => DynamicSegmentFilterData::CONNECT_TYPE_AND, ]); @@ -415,9 +407,8 @@ class FilterDataMapperTest extends \MailPoetUnitTest { assert($filter instanceof DynamicSegmentFilterData); expect($filter)->isInstanceOf(DynamicSegmentFilterData::class); expect($filter->getFilterType())->equals(DynamicSegmentFilterData::TYPE_WOOCOMMERCE); + expect($filter->getAction())->equals(WooCommerceCountry::ACTION_CUSTOMER_COUNTRY); expect($filter->getData())->equals([ - 'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE, - 'action' => WooCommerceCountry::ACTION_CUSTOMER_COUNTRY, 'country_code' => 'UK', 'connect' => DynamicSegmentFilterData::CONNECT_TYPE_AND, ]);