From c36f8bab05d31e36c511db248e0a676e240231b2 Mon Sep 17 00:00:00 2001 From: Florian Hermann Date: Wed, 25 Dec 2019 12:48:26 +0100 Subject: [PATCH 1/7] Fix slug generation if the getRegenerateSlugOnUpdate method return false --- src/Model/Sluggable/SluggableMethodsTrait.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/Sluggable/SluggableMethodsTrait.php b/src/Model/Sluggable/SluggableMethodsTrait.php index a3eaad2e..1aa21a20 100644 --- a/src/Model/Sluggable/SluggableMethodsTrait.php +++ b/src/Model/Sluggable/SluggableMethodsTrait.php @@ -29,7 +29,7 @@ public function getSlug(): string */ public function generateSlug(): void { - if (! $this->getRegenerateSlugOnUpdate()) { + if (null !== $this->slug && false === $this->getRegenerateSlugOnUpdate()) { return; } From ff2a9b69bf808055c9114b999532b24681505c7e Mon Sep 17 00:00:00 2001 From: Florian Hermann Date: Wed, 25 Dec 2019 13:01:00 +0100 Subject: [PATCH 2/7] CS --- src/Model/Sluggable/SluggableMethodsTrait.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Model/Sluggable/SluggableMethodsTrait.php b/src/Model/Sluggable/SluggableMethodsTrait.php index 1aa21a20..98234517 100644 --- a/src/Model/Sluggable/SluggableMethodsTrait.php +++ b/src/Model/Sluggable/SluggableMethodsTrait.php @@ -29,7 +29,7 @@ public function getSlug(): string */ public function generateSlug(): void { - if (null !== $this->slug && false === $this->getRegenerateSlugOnUpdate()) { + if ($this->slug !== null && $this->getRegenerateSlugOnUpdate() === false) { return; } From 0f235f9fd7a8c09fbccbf1f15e28b7e60e70a5a1 Mon Sep 17 00:00:00 2001 From: Florian Hermann Date: Sat, 28 Dec 2019 11:45:47 +0100 Subject: [PATCH 3/7] Add test case --- .../SluggableWithoutRegenerateEntity.php | 82 +++++++++++++++++++ tests/ORM/SluggableWithoutRegenerateTest.php | 66 +++++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 tests/Fixtures/Entity/SluggableWithoutRegenerateEntity.php create mode 100644 tests/ORM/SluggableWithoutRegenerateTest.php diff --git a/tests/Fixtures/Entity/SluggableWithoutRegenerateEntity.php b/tests/Fixtures/Entity/SluggableWithoutRegenerateEntity.php new file mode 100644 index 00000000..4c99dd8a --- /dev/null +++ b/tests/Fixtures/Entity/SluggableWithoutRegenerateEntity.php @@ -0,0 +1,82 @@ +date = (new DateTime())->modify('-1 year'); + } + + public function getId(): int + { + return $this->id; + } + + public function getName(): string + { + return $this->name; + } + + public function setName(string $name): void + { + $this->name = $name; + } + + public function getDate(): DateTimeInterface + { + return $this->date; + } + + public function setDate(DateTimeInterface $date): void + { + $this->date = $date; + } + + /** + * @return string[] + */ + public function getSluggableFields(): array + { + return ['name']; + } + + private function getRegenerateSlugOnUpdate(): bool + { + return false; + } +} diff --git a/tests/ORM/SluggableWithoutRegenerateTest.php b/tests/ORM/SluggableWithoutRegenerateTest.php new file mode 100644 index 00000000..5f0a0606 --- /dev/null +++ b/tests/ORM/SluggableWithoutRegenerateTest.php @@ -0,0 +1,66 @@ +sluggableWithoutRegenerateRepository = $this->entityManager->getRepository(SluggableWithoutRegenerateEntity::class); + } + + public function testSlugLoading(): void + { + $entity = new SluggableWithoutRegenerateEntity(); + $entity->setName('The name'); + + $this->entityManager->persist($entity); + $this->entityManager->flush(); + + $id = $entity->getId(); + $this->assertNotNull($id); + + $this->entityManager->clear(); + + /** @var SluggableEntity $entity */ + $entity = $this->sluggableWithoutRegenerateRepository->find($id); + + $this->assertNotNull($entity); + $this->assertSame('the-name', $entity->getSlug()); + } + + public function testNotUpdatedSlug(): void + { + $entity = new SluggableWithoutRegenerateEntity(); + $entity->setName('The name'); + + $this->entityManager->persist($entity); + $this->entityManager->flush(); + + $this->assertSame('the-name', $entity->getSlug()); + + $entity->setName('The name 2'); + + $this->entityManager->persist($entity); + $this->entityManager->flush(); + + $this->assertSame('the-name', $entity->getSlug()); + } +} From 1c59b6a6b06a416bc212808220c1b96eb7e8778a Mon Sep 17 00:00:00 2001 From: Florian Hermann Date: Sat, 28 Dec 2019 11:54:29 +0100 Subject: [PATCH 4/7] Test CS --- tests/ORM/SluggableWithoutRegenerateTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/ORM/SluggableWithoutRegenerateTest.php b/tests/ORM/SluggableWithoutRegenerateTest.php index 5f0a0606..29cdbb94 100644 --- a/tests/ORM/SluggableWithoutRegenerateTest.php +++ b/tests/ORM/SluggableWithoutRegenerateTest.php @@ -4,10 +4,8 @@ namespace Knp\DoctrineBehaviors\Tests\ORM; -use DateTime; use Doctrine\Common\Persistence\ObjectRepository; use Doctrine\ORM\EntityRepository; -use Iterator; use Knp\DoctrineBehaviors\Tests\AbstractBehaviorTestCase; use Knp\DoctrineBehaviors\Tests\Fixtures\Entity\SluggableEntity; use Knp\DoctrineBehaviors\Tests\Fixtures\Entity\SluggableWithoutRegenerateEntity; @@ -23,7 +21,9 @@ protected function setUp(): void { parent::setUp(); - $this->sluggableWithoutRegenerateRepository = $this->entityManager->getRepository(SluggableWithoutRegenerateEntity::class); + $this->sluggableWithoutRegenerateRepository = $this->entityManager->getRepository( + SluggableWithoutRegenerateEntity::class + ); } public function testSlugLoading(): void From 09e97662c859c74130bf6adf424e4fcbdc2c8d02 Mon Sep 17 00:00:00 2001 From: Florian Hermann Date: Sat, 28 Dec 2019 12:21:24 +0100 Subject: [PATCH 5/7] Configure CS to ignore private trait's method override --- ecs.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ecs.yaml b/ecs.yaml index db748c59..8487bd06 100644 --- a/ecs.yaml +++ b/ecs.yaml @@ -31,6 +31,9 @@ parameters: # & bug - "*Repository.php" + SlevomatCodingStandard\Sniffs\Classes\UnusedPrivateElementsSniff: + - "tests/Fixtures/Entity/SluggableWithoutRegenerateEntity.php" + services: Symplify\CodingStandard\Sniffs\CleanCode\CognitiveComplexitySniff: max_cognitive_complexity: 8 From 719299e176a9fb1c343423548fc2452f8ae7a674 Mon Sep 17 00:00:00 2001 From: Florian Hermann Date: Sat, 28 Dec 2019 16:01:40 +0100 Subject: [PATCH 6/7] Remove unsued property in test entity SluggableWithoutRegenerateEntity --- .../SluggableWithoutRegenerateEntity.php | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/tests/Fixtures/Entity/SluggableWithoutRegenerateEntity.php b/tests/Fixtures/Entity/SluggableWithoutRegenerateEntity.php index 4c99dd8a..1d9e29e1 100644 --- a/tests/Fixtures/Entity/SluggableWithoutRegenerateEntity.php +++ b/tests/Fixtures/Entity/SluggableWithoutRegenerateEntity.php @@ -31,17 +31,6 @@ class SluggableWithoutRegenerateEntity implements SluggableInterface */ private $id; - /** - * @ORM\Column(type="datetime") - * @var DateTimeInterface - */ - private $date; - - public function __construct() - { - $this->date = (new DateTime())->modify('-1 year'); - } - public function getId(): int { return $this->id; @@ -57,16 +46,6 @@ public function setName(string $name): void $this->name = $name; } - public function getDate(): DateTimeInterface - { - return $this->date; - } - - public function setDate(DateTimeInterface $date): void - { - $this->date = $date; - } - /** * @return string[] */ From 657905a264fcd1a0ebf12f262d36911696ad808a Mon Sep 17 00:00:00 2001 From: Florian Hermann Date: Sat, 28 Dec 2019 16:19:59 +0100 Subject: [PATCH 7/7] Remove unused imports --- tests/Fixtures/Entity/SluggableWithoutRegenerateEntity.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/Fixtures/Entity/SluggableWithoutRegenerateEntity.php b/tests/Fixtures/Entity/SluggableWithoutRegenerateEntity.php index 1d9e29e1..9a377c58 100644 --- a/tests/Fixtures/Entity/SluggableWithoutRegenerateEntity.php +++ b/tests/Fixtures/Entity/SluggableWithoutRegenerateEntity.php @@ -4,8 +4,6 @@ namespace Knp\DoctrineBehaviors\Tests\Fixtures\Entity; -use DateTime; -use DateTimeInterface; use Doctrine\ORM\Mapping as ORM; use Knp\DoctrineBehaviors\Contract\Entity\SluggableInterface; use Knp\DoctrineBehaviors\Model\Sluggable\SluggableTrait;