Add backend mapping and validation for customer country segment

[MAILPOET-3226]
This commit is contained in:
Rostislav Wolny
2021-05-04 16:07:07 +02:00
committed by Veljko V
parent ca8328ebce
commit 47eb085d2a
4 changed files with 35 additions and 0 deletions

View File

@ -133,6 +133,8 @@ class DynamicSegments extends APIEndpoint {
return WPFunctions::get()->__('Please select an email.', 'mailpoet'); return WPFunctions::get()->__('Please select an email.', 'mailpoet');
case InvalidFilterException::MISSING_PRODUCT_ID: case InvalidFilterException::MISSING_PRODUCT_ID:
return WPFunctions::get()->__('Please select product.', 'mailpoet'); return WPFunctions::get()->__('Please select product.', 'mailpoet');
case InvalidFilterException::MISSING_COUNTRY:
return WPFunctions::get()->__('Please country.', 'mailpoet');
case InvalidFilterException::MISSING_CATEGORY_ID: case InvalidFilterException::MISSING_CATEGORY_ID:
return WPFunctions::get()->__('Please select category.', 'mailpoet'); return WPFunctions::get()->__('Please select category.', 'mailpoet');
case InvalidFilterException::MISSING_VALUE: case InvalidFilterException::MISSING_VALUE:

View File

@ -17,4 +17,5 @@ class InvalidFilterException extends InvalidStateException {
const MISSING_NUMBER_OF_ORDERS_FIELDS = 10; const MISSING_NUMBER_OF_ORDERS_FIELDS = 10;
const MISSING_TOTAL_SPENT_FIELDS = 11; const MISSING_TOTAL_SPENT_FIELDS = 11;
const INVALID_DATE_VALUE = 12; const INVALID_DATE_VALUE = 12;
const MISSING_COUNTRY = 13;
}; };

View File

@ -8,6 +8,7 @@ use MailPoet\Segments\DynamicSegments\Filters\EmailAction;
use MailPoet\Segments\DynamicSegments\Filters\EmailOpensAbsoluteCountAction; use MailPoet\Segments\DynamicSegments\Filters\EmailOpensAbsoluteCountAction;
use MailPoet\Segments\DynamicSegments\Filters\SubscriberSubscribedDate; use MailPoet\Segments\DynamicSegments\Filters\SubscriberSubscribedDate;
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceCategory; use MailPoet\Segments\DynamicSegments\Filters\WooCommerceCategory;
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceCountry;
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceNumberOfOrders; use MailPoet\Segments\DynamicSegments\Filters\WooCommerceNumberOfOrders;
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceProduct; use MailPoet\Segments\DynamicSegments\Filters\WooCommerceProduct;
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceSubscription; use MailPoet\Segments\DynamicSegments\Filters\WooCommerceSubscription;
@ -115,6 +116,9 @@ class FilterDataMapper {
} elseif ($data['action'] === WooCommerceProduct::ACTION_PRODUCT) { } elseif ($data['action'] === WooCommerceProduct::ACTION_PRODUCT) {
if (!isset($data['product_id'])) throw new InvalidFilterException('Missing product', InvalidFilterException::MISSING_PRODUCT_ID); if (!isset($data['product_id'])) throw new InvalidFilterException('Missing product', InvalidFilterException::MISSING_PRODUCT_ID);
$filterData['product_id'] = $data['product_id']; $filterData['product_id'] = $data['product_id'];
} elseif ($data['action'] === WooCommerceCountry::ACTION_CUSTOMER_COUNTRY) {
if (!isset($data['country_code'])) throw new InvalidFilterException('Missing country', InvalidFilterException::MISSING_COUNTRY);
$filterData['country_code'] = $data['country_code'];
} elseif ($data['action'] === WooCommerceNumberOfOrders::ACTION_NUMBER_OF_ORDERS) { } elseif ($data['action'] === WooCommerceNumberOfOrders::ACTION_NUMBER_OF_ORDERS) {
if (!isset($data['number_of_orders_type']) if (!isset($data['number_of_orders_type'])
|| !isset($data['number_of_orders_count']) || $data['number_of_orders_count'] < 0 || !isset($data['number_of_orders_count']) || $data['number_of_orders_count'] < 0

View File

@ -8,6 +8,7 @@ use MailPoet\Segments\DynamicSegments\Filters\EmailAction;
use MailPoet\Segments\DynamicSegments\Filters\EmailOpensAbsoluteCountAction; use MailPoet\Segments\DynamicSegments\Filters\EmailOpensAbsoluteCountAction;
use MailPoet\Segments\DynamicSegments\Filters\SubscriberSubscribedDate; use MailPoet\Segments\DynamicSegments\Filters\SubscriberSubscribedDate;
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceCategory; use MailPoet\Segments\DynamicSegments\Filters\WooCommerceCategory;
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceCountry;
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceNumberOfOrders; use MailPoet\Segments\DynamicSegments\Filters\WooCommerceNumberOfOrders;
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceProduct; use MailPoet\Segments\DynamicSegments\Filters\WooCommerceProduct;
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceSubscription; use MailPoet\Segments\DynamicSegments\Filters\WooCommerceSubscription;
@ -339,4 +340,31 @@ class FilterDataMapperTest extends \MailPoetUnitTest {
]; ];
$this->mapper->map($data); $this->mapper->map($data);
} }
public function testItCreatesWooCommerceCustomerCountry() {
$data = [
'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE,
'action' => WooCommerceCountry::ACTION_CUSTOMER_COUNTRY,
'country_code' => 'UK',
'nonsense' => 1,
];
$filter = $this->mapper->map($data);
expect($filter)->isInstanceOf(DynamicSegmentFilterData::class);
expect($filter->getFilterType())->equals(DynamicSegmentFilterData::TYPE_WOOCOMMERCE);
expect($filter->getData())->equals([
'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE,
'action' => WooCommerceCountry::ACTION_CUSTOMER_COUNTRY,
'country_code' => 'UK',
]);
}
public function testItRaisesExceptionCountryIsMissingForWooCommerceCustomerCountry() {
$this->expectException(InvalidFilterException::class);
$this->expectExceptionMessage('Missing country');
$this->expectExceptionCode(InvalidFilterException::MISSING_COUNTRY);
$this->mapper->map([
'segmentType' => DynamicSegmentFilterData::TYPE_WOOCOMMERCE,
'action' => WooCommerceCountry::ACTION_CUSTOMER_COUNTRY,
]);
}
} }