Add unique name check to segments repository
[MAILPOET-3998]
This commit is contained in:
committed by
Veljko V
parent
0191bf6968
commit
c23d8cae53
@@ -3,6 +3,7 @@
|
|||||||
namespace MailPoet\Segments;
|
namespace MailPoet\Segments;
|
||||||
|
|
||||||
use DateTime;
|
use DateTime;
|
||||||
|
use MailPoet\ConflictException;
|
||||||
use MailPoet\Doctrine\Repository;
|
use MailPoet\Doctrine\Repository;
|
||||||
use MailPoet\Entities\DynamicSegmentFilterData;
|
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||||
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
||||||
@@ -94,6 +95,8 @@ class SegmentsRepository extends Repository {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param DynamicSegmentFilterData[] $filtersData
|
* @param DynamicSegmentFilterData[] $filtersData
|
||||||
|
* @throws ConflictException
|
||||||
|
* @throws NotFoundException
|
||||||
*/
|
*/
|
||||||
public function createOrUpdate(
|
public function createOrUpdate(
|
||||||
string $name,
|
string $name,
|
||||||
@@ -110,6 +113,9 @@ class SegmentsRepository extends Repository {
|
|||||||
$segment->setName($name);
|
$segment->setName($name);
|
||||||
$segment->setDescription($description);
|
$segment->setDescription($description);
|
||||||
} else {
|
} else {
|
||||||
|
if (!$this->isNameUnique($name, $id)) {
|
||||||
|
throw new ConflictException("Could not create new segment with name [{$name}] because a segment with that name already exists.");
|
||||||
|
}
|
||||||
$segment = new SegmentEntity($name, $type, $description);
|
$segment = new SegmentEntity($name, $type, $description);
|
||||||
$this->persist($segment);
|
$this->persist($segment);
|
||||||
}
|
}
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\Segments;
|
namespace MailPoet\Segments;
|
||||||
|
|
||||||
|
use MailPoet\ConflictException;
|
||||||
use MailPoet\Entities\DynamicSegmentFilterData;
|
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||||
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
||||||
use MailPoet\Entities\NewsletterEntity;
|
use MailPoet\Entities\NewsletterEntity;
|
||||||
@@ -107,6 +108,14 @@ class SegmentsRepositoryTest extends \MailPoetTest {
|
|||||||
expect($count)->equals(2);
|
expect($count)->equals(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testItChecksForDuplicateNameWhenCreatingNewSegment() {
|
||||||
|
$this->createDefaultSegment('Existing Segment');
|
||||||
|
$this->segmentsRepository->flush();
|
||||||
|
$this->expectException(ConflictException::class);
|
||||||
|
$this->expectExceptionMessage("Could not create new segment with name [Existing Segment] because a segment with that name already exists.");
|
||||||
|
$this->segmentsRepository->createOrUpdate('Existing Segment');
|
||||||
|
}
|
||||||
|
|
||||||
private function createDefaultSegment(string $name): SegmentEntity {
|
private function createDefaultSegment(string $name): SegmentEntity {
|
||||||
$segment = new SegmentEntity($name, SegmentEntity::TYPE_DEFAULT, 'description');
|
$segment = new SegmentEntity($name, SegmentEntity::TYPE_DEFAULT, 'description');
|
||||||
$this->entityManager->persist($segment);
|
$this->entityManager->persist($segment);
|
||||||
|
Reference in New Issue
Block a user