diff --git a/mailpoet/lib/Segments/DynamicSegments/FilterDataMapper.php b/mailpoet/lib/Segments/DynamicSegments/FilterDataMapper.php index a7f755a8a7..15a8999bb3 100644 --- a/mailpoet/lib/Segments/DynamicSegments/FilterDataMapper.php +++ b/mailpoet/lib/Segments/DynamicSegments/FilterDataMapper.php @@ -2,6 +2,7 @@ namespace MailPoet\Segments\DynamicSegments; +use MailPoet\DI\ContainerWrapper; use MailPoet\Entities\DynamicSegmentFilterData; use MailPoet\Segments\DynamicSegments\Exceptions\InvalidFilterException; use MailPoet\Segments\DynamicSegments\Filters\AutomationsEvents; @@ -35,13 +36,21 @@ class FilterDataMapper { /** @var WPFunctions */ private $wp; + /** @var DateFilterHelper */ + private $dateFilterHelper; + public function __construct( - WPFunctions $wp = null + WPFunctions $wp = null, + DateFilterHelper $dateFilterHelper = null ) { if (!$wp) { $wp = WPFunctions::get(); } + if (!$dateFilterHelper) { + $dateFilterHelper = ContainerWrapper::getInstance()->get(DateFilterHelper::class); + } $this->wp = $wp; + $this->dateFilterHelper = $dateFilterHelper; } /** @@ -228,7 +237,7 @@ class FilterDataMapper { if (empty($data['operator'])) { throw new InvalidFilterException('Missing operator', InvalidFilterException::MISSING_OPERATOR); } - if (!in_array($data['operator'], DateFilterHelper::getValidOperators())) { + if (!in_array($data['operator'], $this->dateFilterHelper->getValidOperators())) { throw new InvalidFilterException('Invalid operator', InvalidFilterException::MISSING_OPERATOR); } return new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, $data['action'], [ diff --git a/mailpoet/lib/Segments/DynamicSegments/Filters/DateFilterHelper.php b/mailpoet/lib/Segments/DynamicSegments/Filters/DateFilterHelper.php index 49f28dd30e..463fc39784 100644 --- a/mailpoet/lib/Segments/DynamicSegments/Filters/DateFilterHelper.php +++ b/mailpoet/lib/Segments/DynamicSegments/Filters/DateFilterHelper.php @@ -16,14 +16,14 @@ class DateFilterHelper { const IN_THE_LAST = 'inTheLast'; const NOT_IN_THE_LAST = 'notInTheLast'; - public static function getValidOperators(): array { + public function getValidOperators(): array { return array_merge( - self::getAbsoluteDateOperators(), - self::getRelativeDateOperators() + $this->getAbsoluteDateOperators(), + $this->getRelativeDateOperators() ); } - public static function getAbsoluteDateOperators(): array { + public function getAbsoluteDateOperators(): array { return [ self::BEFORE, self::AFTER, @@ -34,7 +34,7 @@ class DateFilterHelper { ]; } - public static function getRelativeDateOperators(): array { + public function getRelativeDateOperators(): array { return [ self::IN_THE_LAST, self::NOT_IN_THE_LAST, @@ -68,7 +68,7 @@ class DateFilterHelper { public function getOperatorFromFilter(DynamicSegmentFilterEntity $filter): string { $filterData = $filter->getFilterData(); $operator = $filterData->getParam('operator'); - if (!is_string($operator) || !in_array($operator, self::getValidOperators())) { + if (!is_string($operator) || !in_array($operator, $this->getValidOperators())) { throw new InvalidFilterException('Incorrect value for operator', InvalidFilterException::MISSING_VALUE); } return $operator; diff --git a/mailpoet/tests/unit/Segments/DynamicSegments/FilterDataMapperTest.php b/mailpoet/tests/unit/Segments/DynamicSegments/FilterDataMapperTest.php index eb5e56864e..2da42454de 100644 --- a/mailpoet/tests/unit/Segments/DynamicSegments/FilterDataMapperTest.php +++ b/mailpoet/tests/unit/Segments/DynamicSegments/FilterDataMapperTest.php @@ -5,6 +5,7 @@ namespace MailPoet\Segments\DynamicSegments; use MailPoet\Entities\CustomFieldEntity; use MailPoet\Entities\DynamicSegmentFilterData; use MailPoet\Segments\DynamicSegments\Exceptions\InvalidFilterException; +use MailPoet\Segments\DynamicSegments\Filters\DateFilterHelper; use MailPoet\Segments\DynamicSegments\Filters\EmailAction; use MailPoet\Segments\DynamicSegments\Filters\EmailActionClickAny; use MailPoet\Segments\DynamicSegments\Filters\EmailOpensAbsoluteCountAction; @@ -32,7 +33,12 @@ class FilterDataMapperTest extends \MailPoetUnitTest { $wp = $this->makeEmpty(WPFunctions::class, [ 'hasFilter' => false, ]); - $this->mapper = new FilterDataMapper($wp); + + $filterHelper = $this->getMockBuilder(DateFilterHelper::class) + ->setMethodsExcept(['getAbsoluteDateOperators', 'getRelativeDateOperators', 'getValidOperators']) + ->getMock(); + + $this->mapper = new FilterDataMapper($wp, $filterHelper); } public function testItChecksFiltersArePresent(): void {