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');
|
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:
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
@ -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
|
||||||
|
@ -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,
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user