Add missing options and fix order of options

MAILPOET-4987
This commit is contained in:
John Oleksowicz
2023-04-21 16:27:39 -05:00
committed by Veljko V
parent 46316b48e2
commit ca2a6ceac8
3 changed files with 39 additions and 1 deletions

View File

@@ -421,9 +421,11 @@ function AverageSpentFields({ filterIndex }: Props): JSX.Element {
}}
automationId="select-average-spent-operator"
>
<option value=">">{MailPoet.I18n.t('moreThan')}</option>
<option value=">=">{MailPoet.I18n.t('moreThanOrEqual')}</option>
<option value="=">{MailPoet.I18n.t('equals')}</option>
<option value="!=">{MailPoet.I18n.t('notEquals')}</option>
<option value=">">{MailPoet.I18n.t('moreThan')}</option>
<option value="<">{MailPoet.I18n.t('lessThanOrEqual')}</option>
<option value="<">{MailPoet.I18n.t('lessThan')}</option>
</Select>
<Input

View File

@@ -46,6 +46,10 @@ class WooCommerceAverageSpent implements Filter {
$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");
} elseif ($operator === '>=') {
$queryBuilder->having("AVG($orderStatsAlias.total_sales) >= :$amountParam");
}
$queryBuilder->setParameter($amountParam, $amount);

View File

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