Add backend mapping and validation for customer country segment
[MAILPOET-3226]
This commit is contained in:
committed by
Veljko V
parent
ca8328ebce
commit
47eb085d2a
@ -133,6 +133,8 @@ class DynamicSegments extends APIEndpoint {
|
||||
return WPFunctions::get()->__('Please select an email.', 'mailpoet');
|
||||
case InvalidFilterException::MISSING_PRODUCT_ID:
|
||||
return WPFunctions::get()->__('Please select product.', 'mailpoet');
|
||||
case InvalidFilterException::MISSING_COUNTRY:
|
||||
return WPFunctions::get()->__('Please country.', 'mailpoet');
|
||||
case InvalidFilterException::MISSING_CATEGORY_ID:
|
||||
return WPFunctions::get()->__('Please select category.', 'mailpoet');
|
||||
case InvalidFilterException::MISSING_VALUE:
|
||||
|
@ -17,4 +17,5 @@ class InvalidFilterException extends InvalidStateException {
|
||||
const MISSING_NUMBER_OF_ORDERS_FIELDS = 10;
|
||||
const MISSING_TOTAL_SPENT_FIELDS = 11;
|
||||
const INVALID_DATE_VALUE = 12;
|
||||
const MISSING_COUNTRY = 13;
|
||||
};
|
||||
|
@ -8,6 +8,7 @@ use MailPoet\Segments\DynamicSegments\Filters\EmailAction;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\EmailOpensAbsoluteCountAction;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\SubscriberSubscribedDate;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceCategory;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceCountry;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceNumberOfOrders;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceProduct;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceSubscription;
|
||||
@ -115,6 +116,9 @@ class FilterDataMapper {
|
||||
} elseif ($data['action'] === WooCommerceProduct::ACTION_PRODUCT) {
|
||||
if (!isset($data['product_id'])) throw new InvalidFilterException('Missing product', InvalidFilterException::MISSING_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) {
|
||||
if (!isset($data['number_of_orders_type'])
|
||||
|| !isset($data['number_of_orders_count']) || $data['number_of_orders_count'] < 0
|
||||
|
@ -8,6 +8,7 @@ use MailPoet\Segments\DynamicSegments\Filters\EmailAction;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\EmailOpensAbsoluteCountAction;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\SubscriberSubscribedDate;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceCategory;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceCountry;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceNumberOfOrders;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceProduct;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceSubscription;
|
||||
@ -339,4 +340,31 @@ class FilterDataMapperTest extends \MailPoetUnitTest {
|
||||
];
|
||||
$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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user