Improve email action filter api data validation
[MAILPOET-3177]
This commit is contained in:
committed by
Veljko V
parent
6bc557ecb0
commit
1b74c3e195
@ -95,6 +95,7 @@ class DynamicSegments extends APIEndpoint {
|
||||
case InvalidFilterException::MISSING_ROLE:
|
||||
return WPFunctions::get()->__('Please select user role.', 'mailpoet');
|
||||
case InvalidFilterException::MISSING_ACTION:
|
||||
case InvalidFilterException::INVALID_EMAIL_ACTION:
|
||||
return WPFunctions::get()->__('Please select email action.', 'mailpoet');
|
||||
case InvalidFilterException::MISSING_NEWSLETTER_ID:
|
||||
return WPFunctions::get()->__('Please select an email.', 'mailpoet');
|
||||
|
@ -13,5 +13,6 @@ class InvalidFilterException extends InvalidStateException {
|
||||
const MISSING_NEWSLETTER_ID = 5;
|
||||
const MISSING_CATEGORY_ID = 6;
|
||||
const MISSING_PRODUCT_ID = 7;
|
||||
const INVALID_EMAIL_ACTION = 8;
|
||||
|
||||
};
|
||||
|
@ -4,6 +4,7 @@ namespace MailPoet\Segments\DynamicSegments;
|
||||
|
||||
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||
use MailPoet\Segments\DynamicSegments\Exceptions\InvalidFilterException;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\EmailAction;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceCategory;
|
||||
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceProduct;
|
||||
|
||||
@ -39,9 +40,9 @@ class FilterDataMapper {
|
||||
* @throws InvalidFilterException
|
||||
*/
|
||||
private function createEmail(array $data): DynamicSegmentFilterData {
|
||||
if (empty($data['action'])) throw new InvalidFilterException('Missing action', InvalidFilterException::MISSING_ACTION);
|
||||
if (empty($data['action'])) throw new InvalidFilterException('Missing action', InvalidFilterException::MISSING_ACTION);
|
||||
if (empty($data['newsletter_id'])) throw new InvalidFilterException('Missing newsletter id', InvalidFilterException::MISSING_NEWSLETTER_ID);
|
||||
if (!in_array($data['action'], EmailAction::ALLOWED_ACTIONS)) throw new InvalidFilterException('Invalid email action', InvalidFilterException::INVALID_EMAIL_ACTION);
|
||||
$filterData = [
|
||||
'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL,
|
||||
'action' => $data['action'],
|
||||
|
@ -16,6 +16,13 @@ class EmailAction implements Filter {
|
||||
const ACTION_CLICKED = 'clicked';
|
||||
const ACTION_NOT_CLICKED = 'notClicked';
|
||||
|
||||
const ALLOWED_ACTIONS = [
|
||||
self::ACTION_OPENED,
|
||||
self::ACTION_NOT_OPENED,
|
||||
self::ACTION_CLICKED,
|
||||
self::ACTION_NOT_CLICKED,
|
||||
];
|
||||
|
||||
/** @var EntityManager */
|
||||
private $entityManager;
|
||||
|
||||
|
@ -68,6 +68,17 @@ class FilterDataMapperTest extends \MailPoetUnitTest {
|
||||
]);
|
||||
}
|
||||
|
||||
public function testItChecksFilterEmailActionIsSupported() {
|
||||
$this->expectException(InvalidFilterException::class);
|
||||
$this->expectExceptionMessage('Invalid email action');
|
||||
$this->expectExceptionCode(InvalidFilterException::INVALID_EMAIL_ACTION);
|
||||
$this->mapper->map([
|
||||
'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL,
|
||||
'newsletter_id' => 1,
|
||||
'action' => 'unknown',
|
||||
]);
|
||||
}
|
||||
|
||||
public function testItMapsUserRoleFilter() {
|
||||
$data = [
|
||||
'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE,
|
||||
|
Reference in New Issue
Block a user