Skip to content

Commit 5871be8

Browse files
committed
Test whether soft-deleteable filter is honoured and entities are preserved.
This refers to the PR doctrine-extensions#2930 which removes entites from the object manager regardless whether the soft-deleteable filter is active or not.
1 parent ea1d375 commit 5871be8

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

tests/Gedmo/SoftDeleteable/SoftDeleteableEntityTest.php

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,52 @@ public function testSoftDeletedObjectIsRemovedPostFlush(): void
558558
static::assertNull($commentRepo->find($comment->getId()));
559559
}
560560

561+
public function testSoftDeletedObjectNotRemovedPostFlush(): void
562+
{
563+
$this->em->getFilters()->disable(self::SOFT_DELETEABLE_FILTER_NAME);
564+
565+
$repo = $this->em->getRepository(Article::class);
566+
$commentRepo = $this->em->getRepository(Comment::class);
567+
568+
$comment = new Comment();
569+
$commentValue = 'Comment 1';
570+
$comment->setComment($commentValue);
571+
572+
$art0 = new Article();
573+
$field = 'title';
574+
$value = 'Title 1';
575+
$art0->setTitle($value);
576+
$art0->addComment($comment);
577+
578+
$this->em->persist($art0);
579+
$this->em->flush();
580+
581+
$art = $repo->findOneBy([$field => $value]);
582+
583+
static::assertNull($art->getDeletedAt());
584+
static::assertNull($comment->getDeletedAt());
585+
static::assertCount(1, $art->getComments());
586+
587+
$this->em->remove($comment);
588+
589+
// The Comment has been marked for removal, but not yet flushed. This means the
590+
// Comment should still be available.
591+
$sameComment = $commentRepo->find($comment->getId());
592+
static::assertInstanceOf(Comment::class, $sameComment);
593+
static::assertSame($comment, $sameComment);
594+
595+
$this->em->flush();
596+
597+
// Now that we've flushed, but the soft-deleteable filter is
598+
// deactivated. Hence the comment should still be available and find()
599+
// should return the same instance.
600+
$sameComment = $commentRepo->find($comment->getId());
601+
static::assertInstanceOf(Comment::class, $sameComment);
602+
static::assertSame($comment, $sameComment);
603+
604+
$this->em->getFilters()->enable(self::SOFT_DELETEABLE_FILTER_NAME);
605+
}
606+
561607
public function testPostSoftDeleteEventIsDispatched(): void
562608
{
563609
$this->em->getEventManager()->addEventSubscriber(new WithPreAndPostSoftDeleteEventArgsTypeListener());

0 commit comments

Comments
 (0)