Extract strings to constants

MAILPOET-4991
This commit is contained in:
John Oleksowicz
2023-07-19 17:29:18 -05:00
committed by Aschepikov
parent feb0297fb9
commit 5eeee574b2
14 changed files with 36 additions and 28 deletions

View File

@@ -43,6 +43,9 @@ class DynamicSegmentFilterData {
DynamicSegmentFilterData::OPERATOR_NOT_ENDS_WITH,
];
public const TIMEFRAME_ALL_TIME = 'allTime';
public const TIMEFRAME_IN_THE_LAST = 'inTheLast';
/**
* @ORM\Column(type="serialized_array")
* @var array|null

View File

@@ -69,7 +69,7 @@ class FilterDataMapper {
private function createFilter(array $filterData): DynamicSegmentFilterData {
if (isset($filterData['days']) && !isset($filterData['timeframe'])) {
// Backwards compatibility for filters created before time period component had "over all time" option
$filterData['timeframe'] = 'inTheLast';
$filterData['timeframe'] = DynamicSegmentFilterData::TIMEFRAME_IN_THE_LAST;
}
switch ($this->getSegmentType($filterData)) {
case DynamicSegmentFilterData::TYPE_AUTOMATIONS:
@@ -318,7 +318,7 @@ class FilterDataMapper {
'opens' => $data['opens'],
'days' => $data['days'] ?? 0,
'operator' => $data['operator'] ?? 'more',
'timeframe' => $data['timeframe'] ?? 'inTheLast', // backwards compatibility
'timeframe' => $data['timeframe'] ?? DynamicSegmentFilterData::TIMEFRAME_IN_THE_LAST, // backwards compatibility
'connect' => $data['connect'],
];
$filterType = DynamicSegmentFilterData::TYPE_EMAIL;
@@ -513,11 +513,11 @@ class FilterDataMapper {
}
private function validateDaysPeriodData(array $data): void {
if (!isset($data['timeframe']) || !in_array($data['timeframe'], ['allTime', 'inTheLast'], true)) {
if (!isset($data['timeframe']) || !in_array($data['timeframe'], [DynamicSegmentFilterData::TIMEFRAME_ALL_TIME, DynamicSegmentFilterData::TIMEFRAME_IN_THE_LAST], true)) {
throw new InvalidFilterException('Missing timeframe type', InvalidFilterException::MISSING_VALUE);
}
if ($data['timeframe'] === 'allTime') {
if ($data['timeframe'] === DynamicSegmentFilterData::TIMEFRAME_ALL_TIME) {
return;
}

View File

@@ -2,6 +2,7 @@
namespace MailPoet\Segments\DynamicSegments\Filters;
use MailPoet\Entities\DynamicSegmentFilterData;
use MailPoet\Entities\DynamicSegmentFilterEntity;
use MailPoet\Entities\StatisticsOpenEntity;
use MailPoet\Entities\SubscriberEntity;
@@ -34,7 +35,7 @@ class EmailOpensAbsoluteCountAction implements Filter {
$statsTable = $this->entityManager->getClassMetadata(StatisticsOpenEntity::class)->getTableName();
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
if ($timeframe === 'allTime') {
if ($timeframe === DynamicSegmentFilterData::TIMEFRAME_ALL_TIME) {
$queryBuilder->leftJoin(
$subscribersTable,
$statsTable,

View File

@@ -2,6 +2,7 @@
namespace MailPoet\Segments\DynamicSegments\Filters;
use MailPoet\Entities\DynamicSegmentFilterData;
use MailPoet\Entities\DynamicSegmentFilterEntity;
use MailPoetVendor\Carbon\Carbon;
use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder;
@@ -31,7 +32,7 @@ class WooCommerceAverageSpent implements Filter {
$orderStatsAlias = $this->wooFilterHelper->applyOrderStatusFilter($queryBuilder);
if ($timeframe !== 'allTime') {
if ($timeframe !== DynamicSegmentFilterData::TIMEFRAME_ALL_TIME) {
$days = intval($filterData->getParam('days'));
$date = Carbon::now()->subDays($days);
$dateParam = $this->filterHelper->getUniqueParameterName('date');

View File

@@ -2,6 +2,7 @@
namespace MailPoet\Segments\DynamicSegments\Filters;
use MailPoet\Entities\DynamicSegmentFilterData;
use MailPoet\Entities\DynamicSegmentFilterEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Util\DBCollationChecker;
@@ -39,7 +40,7 @@ class WooCommerceNumberOfOrders implements Filter {
$filterData = $filter->getFilterData();
$type = strval($filterData->getParam('number_of_orders_type'));
$count = intval($filterData->getParam('number_of_orders_count'));
$isAllTime = $filterData->getParam('timeframe') === 'allTime';
$isAllTime = $filterData->getParam('timeframe') === DynamicSegmentFilterData::TIMEFRAME_ALL_TIME;
$parameterSuffix = $filter->getId() ?? Security::generateRandomString();
$collation = $this->collationChecker->getCollateIfNeeded(
$subscribersTable,

View File

@@ -2,6 +2,7 @@
namespace MailPoet\Segments\DynamicSegments\Filters;
use MailPoet\Entities\DynamicSegmentFilterData;
use MailPoet\Entities\DynamicSegmentFilterEntity;
use MailPoet\Util\Security;
use MailPoetVendor\Carbon\Carbon;
@@ -23,7 +24,7 @@ class WooCommerceSingleOrderValue implements Filter {
$filterData = $filter->getFilterData();
$type = $filterData->getParam('single_order_value_type');
$amount = $filterData->getParam('single_order_value_amount');
$isAllTime = $filterData->getParam('timeframe') === 'allTime';
$isAllTime = $filterData->getParam('timeframe') === DynamicSegmentFilterData::TIMEFRAME_ALL_TIME;
$parameterSuffix = $filter->getId() ?? Security::generateRandomString();
$orderStatsAlias = $this->wooFilterHelper->applyOrderStatusFilter($queryBuilder);

View File

@@ -2,6 +2,7 @@
namespace MailPoet\Segments\DynamicSegments\Filters;
use MailPoet\Entities\DynamicSegmentFilterData;
use MailPoet\Entities\DynamicSegmentFilterEntity;
use MailPoet\Util\Security;
use MailPoetVendor\Carbon\Carbon;
@@ -23,7 +24,7 @@ class WooCommerceTotalSpent implements Filter {
$filterData = $filter->getFilterData();
$type = $filterData->getParam('total_spent_type');
$amount = $filterData->getParam('total_spent_amount');
$isAllTime = $filterData->getParam('timeframe') === 'allTime';
$isAllTime = $filterData->getParam('timeframe') === DynamicSegmentFilterData::TIMEFRAME_ALL_TIME;
$parameterSuffix = $filter->getId() ?? Security::generateRandomString();
$orderStatsAlias = $this->wooFilterHelper->applyOrderStatusFilter($queryBuilder);

View File

@@ -93,7 +93,7 @@ class EmailOpensAbsoluteCountActionTest extends \MailPoetTest {
}
public function testGetMachineOpened(): void {
$segmentFilterData = $this->getSegmentFilterData(1, 'more', 5, 'inTheLast', EmailOpensAbsoluteCountAction::MACHINE_TYPE);
$segmentFilterData = $this->getSegmentFilterData(1, 'more', 5, DynamicSegmentFilterData::TIMEFRAME_IN_THE_LAST, EmailOpensAbsoluteCountAction::MACHINE_TYPE);
$emails = $this->tester->getSubscriberEmailsMatchingDynamicFilter($segmentFilterData, $this->action);
$this->assertEqualsCanonicalizing(['opened-3-newsletters@example.com'], $emails);
}
@@ -135,7 +135,7 @@ class EmailOpensAbsoluteCountActionTest extends \MailPoetTest {
}
public function testOverAllTime() {
$segmentFilterData = $this->getSegmentFilterData(1000000, 'less', 0, 'allTime');
$segmentFilterData = $this->getSegmentFilterData(1000000, 'less', 0, DynamicSegmentFilterData::TIMEFRAME_ALL_TIME);
$emails = $this->tester->getSubscriberEmailsMatchingDynamicFilter($segmentFilterData, $this->action);
$this->assertEqualsCanonicalizing([
'opened-3-newsletters@example.com',
@@ -145,7 +145,7 @@ class EmailOpensAbsoluteCountActionTest extends \MailPoetTest {
], $emails);
}
private function getSegmentFilterData(int $opens, string $operator, int $days, string $timeframe = 'inTheLast', string $action = EmailOpensAbsoluteCountAction::TYPE): DynamicSegmentFilterData {
private function getSegmentFilterData(int $opens, string $operator, int $days, string $timeframe = DynamicSegmentFilterData::TIMEFRAME_IN_THE_LAST, string $action = EmailOpensAbsoluteCountAction::TYPE): DynamicSegmentFilterData {
return new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_EMAIL, $action, [
'operator' => $operator,
'opens' => $opens,

View File

@@ -136,11 +136,11 @@ class WooCommerceAverageSpentTest extends \MailPoetTest {
$this->createOrder($id1, 100, 3);
$id1 = $this->tester->createCustomer('2@e.com');
$this->createOrder($id1, 100, 30000);
$matchingEmails = $this->getMatchingEmails('>=', 50, 0, 'allTime');
$matchingEmails = $this->getMatchingEmails('>=', 50, 0, DynamicSegmentFilterData::TIMEFRAME_ALL_TIME);
$this->assertEqualsCanonicalizing(['1@e.com', '2@e.com'], $matchingEmails);
}
private function getMatchingEmails(string $operator, float $amount, int $days = 365, string $timeframe = 'inTheLast'): array {
private function getMatchingEmails(string $operator, float $amount, int $days = 365, string $timeframe = DynamicSegmentFilterData::TIMEFRAME_IN_THE_LAST): array {
$filterData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_WOOCOMMERCE, WooCommerceAverageSpent::ACTION, [
'average_spent_type' => $operator,
'average_spent_amount' => $amount,

View File

@@ -69,7 +69,7 @@ class WooCommerceNumberOfOrdersTest extends \MailPoetTest {
}
public function testItWorksWithAllTimeTimeframe(): void {
$segmentFilterData = $this->getSegmentFilterData('>', 0, 0, 'allTime');
$segmentFilterData = $this->getSegmentFilterData('>', 0, 0, DynamicSegmentFilterData::TIMEFRAME_ALL_TIME);
$emails = $this->tester->getSubscriberEmailsMatchingDynamicFilter($segmentFilterData, $this->numberOfOrdersFilter);
$this->assertEqualsCanonicalizing([
'customer1@example.com',
@@ -78,7 +78,7 @@ class WooCommerceNumberOfOrdersTest extends \MailPoetTest {
], $emails);
}
private function getSegmentFilterData(string $comparisonType, int $ordersCount, int $days, $timeframe = 'inTheLast'): DynamicSegmentFilterData {
private function getSegmentFilterData(string $comparisonType, int $ordersCount, int $days, $timeframe = DynamicSegmentFilterData::TIMEFRAME_IN_THE_LAST): DynamicSegmentFilterData {
return new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_WOOCOMMERCE, WooCommerceNumberOfOrders::ACTION_NUMBER_OF_ORDERS, [
'number_of_orders_type' => $comparisonType,
'number_of_orders_count' => $ordersCount,

View File

@@ -48,7 +48,7 @@ class WooCommercePurchaseDateTest extends \MailPoetTest {
$this->createOrder($customerId1, Carbon::now()->subDays(3));
$this->createOrder($customerId2, Carbon::now()->subDays(4));
$this->createOrder($customerId3, Carbon::now()->subDays(5));
$emails = $this->getSubscriberEmailsMatchingFilter('inTheLast', '5');
$emails = $this->getSubscriberEmailsMatchingFilter(DynamicSegmentFilterData::TIMEFRAME_IN_THE_LAST, '5');
expect(count($emails))->equals(2);
$this->assertEqualsCanonicalizing(['c1@example.com', 'c2@example.com'], $emails);
}

View File

@@ -64,12 +64,12 @@ class WooCommerceSingleOrderValueTest extends \MailPoetTest {
}
public function testItWorksWithLifetimeOption(): void {
$segmentFilterData = $this->getSegmentFilterData('<', 1000000000, 0, 'allTime');
$segmentFilterData = $this->getSegmentFilterData('<', 1000000000, 0, DynamicSegmentFilterData::TIMEFRAME_ALL_TIME);
$emails = $this->tester->getSubscriberEmailsMatchingDynamicFilter($segmentFilterData, $this->singleOrderValue);
$this->assertEqualsCanonicalizing(['customer1@example.com', 'customer2@example.com', 'customer3@example.com'], $emails);
}
private function getSegmentFilterData(string $type, float $amount, int $days, $timeframe = 'inTheLast'): DynamicSegmentFilterData {
private function getSegmentFilterData(string $type, float $amount, int $days, $timeframe = DynamicSegmentFilterData::TIMEFRAME_IN_THE_LAST): DynamicSegmentFilterData {
return new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_WOOCOMMERCE, WooCommerceSingleOrderValue::ACTION_SINGLE_ORDER_VALUE, [
'single_order_value_type' => $type,
'single_order_value_amount' => $amount,

View File

@@ -71,12 +71,12 @@ class WooCommerceTotalSpentTest extends \MailPoetTest {
}
public function testItWorksWithAllTimeOption(): void {
$segmentFilterData = $this->getSegmentFilterData('<', 100000000000, 0, 'allTime');
$segmentFilterData = $this->getSegmentFilterData('<', 100000000000, 0, DynamicSegmentFilterData::TIMEFRAME_ALL_TIME);
$emails = $this->tester->getSubscriberEmailsMatchingDynamicFilter($segmentFilterData, $this->totalSpentFilter);
$this->assertEqualsCanonicalizing(['customer1@example.com', 'customer2@example.com', 'customer3@example.com'], $emails);
}
private function getSegmentFilterData(string $type, float $amount, int $days, $timeframe = 'inTheLast'): DynamicSegmentFilterData {
private function getSegmentFilterData(string $type, float $amount, int $days, $timeframe = DynamicSegmentFilterData::TIMEFRAME_IN_THE_LAST): DynamicSegmentFilterData {
return new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_WOOCOMMERCE, WooCommerceTotalSpent::ACTION_TOTAL_SPENT, [
'total_spent_type' => $type,
'total_spent_amount' => $amount,

View File

@@ -314,7 +314,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest {
expect($filter->getData())->equals([
'opens' => 5,
'days' => 3,
'timeframe' => 'inTheLast',
'timeframe' => DynamicSegmentFilterData::TIMEFRAME_IN_THE_LAST,
'operator' => 'more',
'connect' => DynamicSegmentFilterData::CONNECT_TYPE_AND,
]);
@@ -358,7 +358,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest {
expect($filter->getData())->equals([
'opens' => 5,
'days' => 3,
'timeframe' => 'inTheLast',
'timeframe' => DynamicSegmentFilterData::TIMEFRAME_IN_THE_LAST,
'operator' => 'less',
'connect' => DynamicSegmentFilterData::CONNECT_TYPE_AND,
]);
@@ -369,7 +369,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest {
'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL,
'action' => EmailOpensAbsoluteCountAction::TYPE,
'days' => 3,
'timeframe' => 'inTheLast',
'timeframe' => DynamicSegmentFilterData::TIMEFRAME_IN_THE_LAST,
]]];
$this->expectException(InvalidFilterException::class);
$this->mapper->map($data);
@@ -392,7 +392,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest {
'number_of_orders_type' => '=',
'number_of_orders_count' => 2,
'days' => 1,
'timeframe' => 'inTheLast',
'timeframe' => DynamicSegmentFilterData::TIMEFRAME_IN_THE_LAST,
'some_mess' => 'mess',
]]];
@@ -420,7 +420,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest {
$this->mapper->map(['filters' => [[
'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE,
'action' => WooCommerceNumberOfOrders::ACTION_NUMBER_OF_ORDERS,
'timeframe' => 'inTheLast',
'timeframe' => DynamicSegmentFilterData::TIMEFRAME_IN_THE_LAST,
'days' => 2,
]]]);
}
@@ -432,7 +432,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest {
'single_order_value_type' => '=',
'single_order_value_amount' => 20,
'days' => 7,
'timeframe' => 'inTheLast',
'timeframe' => DynamicSegmentFilterData::TIMEFRAME_IN_THE_LAST,
'some_mess' => 'mess',
]]];
@@ -461,7 +461,7 @@ class FilterDataMapperTest extends \MailPoetUnitTest {
'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE,
'action' => WooCommerceSingleOrderValue::ACTION_SINGLE_ORDER_VALUE,
'days' => 2,
'timeframe' => 'inTheLast',
'timeframe' => DynamicSegmentFilterData::TIMEFRAME_IN_THE_LAST,
]]]);
}