Make sure the user roles is always array
[MAILPOET-3955]
This commit is contained in:
@ -51,6 +51,10 @@ class DynamicSegmentsResponseBuilder {
|
|||||||
$filter['id'] = $dynamicFilter->getId();
|
$filter['id'] = $dynamicFilter->getId();
|
||||||
$filter['segmentType'] = $dynamicFilter->getFilterData()->getFilterType(); // We need to add filterType with key segmentType due to BC
|
$filter['segmentType'] = $dynamicFilter->getFilterData()->getFilterType(); // We need to add filterType with key segmentType due to BC
|
||||||
$filter['action'] = $dynamicFilter->getFilterData()->getAction();
|
$filter['action'] = $dynamicFilter->getFilterData()->getAction();
|
||||||
|
if (isset($filter['wordpressRole']) && !is_array($filter['wordpressRole'])) {
|
||||||
|
// new filters are always array, they support multiple values, the old didn't convert old filters to new format
|
||||||
|
$filter['wordpressRole'] = [$filter['wordpressRole']];
|
||||||
|
}
|
||||||
$filters[] = $filter;
|
$filters[] = $filter;
|
||||||
}
|
}
|
||||||
$data['filters'] = $filters;
|
$data['filters'] = $filters;
|
||||||
|
@ -39,7 +39,7 @@ class UserRole implements Filter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
||||||
$parameterSuffix = (string)$filter->getId() ?? Security::generateRandomString();
|
$parameterSuffix = ((string)$filter->getId()) . Security::generateRandomString();
|
||||||
$condition = $this->createCondition($role, $operator, $parameterSuffix);
|
$condition = $this->createCondition($role, $operator, $parameterSuffix);
|
||||||
$qb = $queryBuilder->join($subscribersTable, $wpdb->users, 'wpusers', "$subscribersTable.wp_user_id = wpusers.id")
|
$qb = $queryBuilder->join($subscribersTable, $wpdb->users, 'wpusers', "$subscribersTable.wp_user_id = wpusers.id")
|
||||||
->join('wpusers', $wpdb->usermeta, 'wpusermeta', 'wpusers.id = wpusermeta.user_id')
|
->join('wpusers', $wpdb->usermeta, 'wpusermeta', 'wpusers.id = wpusermeta.user_id')
|
||||||
|
@ -619,6 +619,7 @@ class ManageSegmentsCest {
|
|||||||
$i->fillField(['name' => 'name'], $segmentTitle);
|
$i->fillField(['name' => 'name'], $segmentTitle);
|
||||||
$i->fillField(['name' => 'description'], $segmentDesc);
|
$i->fillField(['name' => 'description'], $segmentDesc);
|
||||||
$i->see('WordPress user role', "{$filterRowOne} {$actionSelectElement}");
|
$i->see('WordPress user role', "{$filterRowOne} {$actionSelectElement}");
|
||||||
|
$i->waitForText('Admin', 10, "{$filterRowOne} {$roleSelectElement}");
|
||||||
$i->see('Admin', "{$filterRowOne} {$roleSelectElement}");
|
$i->see('Admin', "{$filterRowOne} {$roleSelectElement}");
|
||||||
$i->see('WordPress user role', "{$filterRowTwo} {$actionSelectElement}");
|
$i->see('WordPress user role', "{$filterRowTwo} {$actionSelectElement}");
|
||||||
$i->see('Editor', "{$filterRowTwo} {$roleSelectElement}");
|
$i->see('Editor', "{$filterRowTwo} {$roleSelectElement}");
|
||||||
|
@ -37,7 +37,7 @@ class DynamicSegmentsResponseBuilderTest extends \MailPoetTest {
|
|||||||
expect($response['filters'])->array();
|
expect($response['filters'])->array();
|
||||||
expect($response['filters'])->count(1);
|
expect($response['filters'])->count(1);
|
||||||
expect($response['filters'][0]['segmentType'])->equals(DynamicSegmentFilterData::TYPE_USER_ROLE);
|
expect($response['filters'][0]['segmentType'])->equals(DynamicSegmentFilterData::TYPE_USER_ROLE);
|
||||||
expect($response['filters'][0]['wordpressRole'])->equals('editor');
|
expect($response['filters'][0]['wordpressRole'])->equals(['editor']);
|
||||||
expect($response['filters'][0]['action'])->equals(UserRole::TYPE);
|
expect($response['filters'][0]['action'])->equals(UserRole::TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,11 +64,11 @@ class DynamicSegmentsResponseBuilderTest extends \MailPoetTest {
|
|||||||
expect($response['filters'])->array();
|
expect($response['filters'])->array();
|
||||||
expect($response['filters'])->count(2);
|
expect($response['filters'])->count(2);
|
||||||
expect($response['filters'][0]['segmentType'])->equals(DynamicSegmentFilterData::TYPE_USER_ROLE);
|
expect($response['filters'][0]['segmentType'])->equals(DynamicSegmentFilterData::TYPE_USER_ROLE);
|
||||||
expect($response['filters'][0]['wordpressRole'])->equals('editor');
|
expect($response['filters'][0]['wordpressRole'])->equals(['editor']);
|
||||||
expect($response['filters'][0]['action'])->equals(UserRole::TYPE);
|
expect($response['filters'][0]['action'])->equals(UserRole::TYPE);
|
||||||
expect($response['filters'][0]['connect'])->equals(DynamicSegmentFilterData::CONNECT_TYPE_AND);
|
expect($response['filters'][0]['connect'])->equals(DynamicSegmentFilterData::CONNECT_TYPE_AND);
|
||||||
expect($response['filters'][1]['segmentType'])->equals(DynamicSegmentFilterData::TYPE_USER_ROLE);
|
expect($response['filters'][1]['segmentType'])->equals(DynamicSegmentFilterData::TYPE_USER_ROLE);
|
||||||
expect($response['filters'][1]['wordpressRole'])->equals('administrator');
|
expect($response['filters'][1]['wordpressRole'])->equals(['administrator']);
|
||||||
expect($response['filters'][1]['action'])->equals(UserRole::TYPE);
|
expect($response['filters'][1]['action'])->equals(UserRole::TYPE);
|
||||||
expect($response['filters'][1]['connect'])->equals(DynamicSegmentFilterData::CONNECT_TYPE_AND);
|
expect($response['filters'][1]['connect'])->equals(DynamicSegmentFilterData::CONNECT_TYPE_AND);
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,7 @@ class SegmentSaveControllerTest extends \MailPoetTest {
|
|||||||
expect($filter->getFilterData()->getAction())->equals(UserRole::TYPE);
|
expect($filter->getFilterData()->getAction())->equals(UserRole::TYPE);
|
||||||
expect($filter->getFilterData()->getData())->equals([
|
expect($filter->getFilterData()->getData())->equals([
|
||||||
'wordpressRole' => 'editor',
|
'wordpressRole' => 'editor',
|
||||||
|
'operator' => DynamicSegmentFilterData::OPERATOR_ANY,
|
||||||
'connect' => DynamicSegmentFilterData::CONNECT_TYPE_AND,
|
'connect' => DynamicSegmentFilterData::CONNECT_TYPE_AND,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@ -52,12 +53,12 @@ class SegmentSaveControllerTest extends \MailPoetTest {
|
|||||||
'filters' => [
|
'filters' => [
|
||||||
[
|
[
|
||||||
'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE,
|
'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE,
|
||||||
'wordpressRole' => 'administrator',
|
'wordpressRole' => ['administrator'],
|
||||||
'action' => UserRole::TYPE,
|
'action' => UserRole::TYPE,
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE,
|
'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE,
|
||||||
'wordpressRole' => 'editor',
|
'wordpressRole' => ['editor'],
|
||||||
'action' => UserRole::TYPE,
|
'action' => UserRole::TYPE,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
@ -73,7 +74,8 @@ class SegmentSaveControllerTest extends \MailPoetTest {
|
|||||||
expect($filter->getFilterData()->getFilterType())->equals(DynamicSegmentFilterData::TYPE_USER_ROLE);
|
expect($filter->getFilterData()->getFilterType())->equals(DynamicSegmentFilterData::TYPE_USER_ROLE);
|
||||||
expect($filter->getFilterData()->getAction())->equals(UserRole::TYPE);
|
expect($filter->getFilterData()->getAction())->equals(UserRole::TYPE);
|
||||||
expect($filter->getFilterData()->getData())->equals([
|
expect($filter->getFilterData()->getData())->equals([
|
||||||
'wordpressRole' => 'administrator',
|
'wordpressRole' => ['administrator'],
|
||||||
|
'operator' => DynamicSegmentFilterData::OPERATOR_ANY,
|
||||||
'connect' => DynamicSegmentFilterData::CONNECT_TYPE_OR,
|
'connect' => DynamicSegmentFilterData::CONNECT_TYPE_OR,
|
||||||
]);
|
]);
|
||||||
$filter = $segment->getDynamicFilters()->next();
|
$filter = $segment->getDynamicFilters()->next();
|
||||||
@ -81,15 +83,16 @@ class SegmentSaveControllerTest extends \MailPoetTest {
|
|||||||
expect($filter->getFilterData()->getFilterType())->equals(DynamicSegmentFilterData::TYPE_USER_ROLE);
|
expect($filter->getFilterData()->getFilterType())->equals(DynamicSegmentFilterData::TYPE_USER_ROLE);
|
||||||
expect($filter->getFilterData()->getAction())->equals(UserRole::TYPE);
|
expect($filter->getFilterData()->getAction())->equals(UserRole::TYPE);
|
||||||
expect($filter->getFilterData()->getData())->equals([
|
expect($filter->getFilterData()->getData())->equals([
|
||||||
'wordpressRole' => 'editor',
|
'wordpressRole' => ['editor'],
|
||||||
|
'operator' => DynamicSegmentFilterData::OPERATOR_ANY,
|
||||||
'connect' => DynamicSegmentFilterData::CONNECT_TYPE_OR,
|
'connect' => DynamicSegmentFilterData::CONNECT_TYPE_OR,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItCanRemoveRedundantFilter() {
|
public function testItCanRemoveRedundantFilter() {
|
||||||
$segment = $this->createSegment('Test Segment');
|
$segment = $this->createSegment('Test Segment');
|
||||||
$this->addDynamicFilter($segment, 'editor');
|
$this->addDynamicFilter($segment, ['editor']);
|
||||||
$this->addDynamicFilter($segment, 'administrator');
|
$this->addDynamicFilter($segment, ['administrator']);
|
||||||
$segmentData = [
|
$segmentData = [
|
||||||
'id' => $segment->getId(),
|
'id' => $segment->getId(),
|
||||||
'name' => 'Test Segment Edited',
|
'name' => 'Test Segment Edited',
|
||||||
@ -97,8 +100,9 @@ class SegmentSaveControllerTest extends \MailPoetTest {
|
|||||||
'filters_connect' => DynamicSegmentFilterData::CONNECT_TYPE_OR,
|
'filters_connect' => DynamicSegmentFilterData::CONNECT_TYPE_OR,
|
||||||
'filters' => [[
|
'filters' => [[
|
||||||
'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE,
|
'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE,
|
||||||
'wordpressRole' => 'subscriber',
|
'wordpressRole' => ['subscriber'],
|
||||||
'action' => UserRole::TYPE,
|
'action' => UserRole::TYPE,
|
||||||
|
'operator' => DynamicSegmentFilterData::OPERATOR_ANY,
|
||||||
'connect' => DynamicSegmentFilterData::CONNECT_TYPE_OR,
|
'connect' => DynamicSegmentFilterData::CONNECT_TYPE_OR,
|
||||||
]],
|
]],
|
||||||
];
|
];
|
||||||
@ -113,7 +117,8 @@ class SegmentSaveControllerTest extends \MailPoetTest {
|
|||||||
expect($filter->getFilterData()->getFilterType())->equals(DynamicSegmentFilterData::TYPE_USER_ROLE);
|
expect($filter->getFilterData()->getFilterType())->equals(DynamicSegmentFilterData::TYPE_USER_ROLE);
|
||||||
expect($filter->getFilterData()->getAction())->equals(UserRole::TYPE);
|
expect($filter->getFilterData()->getAction())->equals(UserRole::TYPE);
|
||||||
expect($filter->getFilterData()->getData())->equals([
|
expect($filter->getFilterData()->getData())->equals([
|
||||||
'wordpressRole' => 'subscriber',
|
'wordpressRole' => ['subscriber'],
|
||||||
|
'operator' => DynamicSegmentFilterData::OPERATOR_ANY,
|
||||||
'connect' => DynamicSegmentFilterData::CONNECT_TYPE_OR,
|
'connect' => DynamicSegmentFilterData::CONNECT_TYPE_OR,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@ -158,7 +163,7 @@ class SegmentSaveControllerTest extends \MailPoetTest {
|
|||||||
return $segment;
|
return $segment;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function addDynamicFilter(SegmentEntity $segment, string $wordpressRole): DynamicSegmentFilterEntity {
|
private function addDynamicFilter(SegmentEntity $segment, array $wordpressRole): DynamicSegmentFilterEntity {
|
||||||
$filterData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, UserRole::TYPE, [
|
$filterData = new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, UserRole::TYPE, [
|
||||||
'wordpressRole' => $wordpressRole,
|
'wordpressRole' => $wordpressRole,
|
||||||
'connect' => DynamicSegmentFilterData::CONNECT_TYPE_AND,
|
'connect' => DynamicSegmentFilterData::CONNECT_TYPE_AND,
|
||||||
|
Reference in New Issue
Block a user