From ca2a6ceac8e265809e8c4bf51a30cdb37bbebc5b Mon Sep 17 00:00:00 2001 From: John Oleksowicz Date: Fri, 21 Apr 2023 16:27:39 -0500 Subject: [PATCH] Add missing options and fix order of options MAILPOET-4987 --- .../dynamic_segments_filters/woocommerce.tsx | 4 ++- .../Filters/WooCommerceAverageSpent.php | 4 +++ .../Filters/WooCommerceAverageSpentTest.php | 32 +++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/mailpoet/assets/js/src/segments/dynamic/dynamic_segments_filters/woocommerce.tsx b/mailpoet/assets/js/src/segments/dynamic/dynamic_segments_filters/woocommerce.tsx index 952cfeb5ab..99bd25fedd 100644 --- a/mailpoet/assets/js/src/segments/dynamic/dynamic_segments_filters/woocommerce.tsx +++ b/mailpoet/assets/js/src/segments/dynamic/dynamic_segments_filters/woocommerce.tsx @@ -421,9 +421,11 @@ function AverageSpentFields({ filterIndex }: Props): JSX.Element { }} automationId="select-average-spent-operator" > + + - + having("AVG($orderStatsAlias.total_sales) > :$amountParam"); } elseif ($operator === '<') { $queryBuilder->having("AVG($orderStatsAlias.total_sales) < :$amountParam"); + } elseif ($operator === '<=') { + $queryBuilder->having("AVG($orderStatsAlias.total_sales) <= :$amountParam"); + } elseif ($operator === '>=') { + $queryBuilder->having("AVG($orderStatsAlias.total_sales) >= :$amountParam"); } $queryBuilder->setParameter($amountParam, $amount); diff --git a/mailpoet/tests/integration/Segments/DynamicSegments/Filters/WooCommerceAverageSpentTest.php b/mailpoet/tests/integration/Segments/DynamicSegments/Filters/WooCommerceAverageSpentTest.php index aba2e75ea5..4ea24bfff5 100644 --- a/mailpoet/tests/integration/Segments/DynamicSegments/Filters/WooCommerceAverageSpentTest.php +++ b/mailpoet/tests/integration/Segments/DynamicSegments/Filters/WooCommerceAverageSpentTest.php @@ -99,6 +99,38 @@ class WooCommerceAverageSpentTest extends \MailPoetTest { $this->assertEqualsCanonicalizing(['1@e.com'], $emails); } + public function testItWorksWithGreaterThanOrEqual() { + $this->createCustomerWithOrderValues('1@e.com', [5, 10]); + $this->createCustomerWithOrderValues('2@e.com', [5, 15]); + $this->createCustomerWithOrderValues('3@e.com', [5, 20]); + $matchingEmails = $this->getMatchingEmails('>=', 7.50); + $this->assertEqualsCanonicalizing(['1@e.com', '2@e.com', '3@e.com'], $matchingEmails); + $matchingEmails = $this->getMatchingEmails('>=', 7.51); + $this->assertEqualsCanonicalizing(['2@e.com', '3@e.com'], $matchingEmails); + $matchingEmails = $this->getMatchingEmails('>=', 10); + $this->assertEqualsCanonicalizing(['2@e.com', '3@e.com'], $matchingEmails); + $matchingEmails = $this->getMatchingEmails('>=', 10.01); + $this->assertEqualsCanonicalizing(['3@e.com'], $matchingEmails); + $matchingEmails = $this->getMatchingEmails('>=', 12.50); + $this->assertEqualsCanonicalizing(['3@e.com'], $matchingEmails); + $matchingEmails = $this->getMatchingEmails('>=', 12.51); + $this->assertEqualsCanonicalizing([], $matchingEmails); + } + + public function testItWorksWithLessThanOrEqual() { + $this->createCustomerWithOrderValues('1@e.com', [5, 10]); + $this->createCustomerWithOrderValues('2@e.com', [5, 15]); + $this->createCustomerWithOrderValues('3@e.com', [5, 20]); + $matchingEmails = $this->getMatchingEmails('<=', 7.49); + $this->assertEqualsCanonicalizing([], $matchingEmails); + $matchingEmails = $this->getMatchingEmails('<=', 7.50); + $this->assertEqualsCanonicalizing(['1@e.com'], $matchingEmails); + $matchingEmails = $this->getMatchingEmails('<=', 10); + $this->assertEqualsCanonicalizing(['1@e.com', '2@e.com'], $matchingEmails); + $matchingEmails = $this->getMatchingEmails('<=', 12.50); + $this->assertEqualsCanonicalizing(['1@e.com', '2@e.com', '3@e.com'], $matchingEmails); + } + private function getMatchingEmails(string $operator, float $amount, int $days = 365): array { $filterData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_WOOCOMMERCE, WooCommerceAverageSpent::ACTION, [ 'operator' => $operator,