Skip to content

Commit d044bac

Browse files
committed
Improve coverage
1 parent 2503e85 commit d044bac

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

src/Bridge/Doctrine/EventListener/PurgeHttpCacheListener.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ public function __construct(PurgerInterface $purger, IriConverterInterface $iriC
4949
$this->propertyAccessor = $propertyAccessor ?? PropertyAccess::createPropertyAccessor();
5050
}
5151

52+
/**
53+
* Collects tags from the previous and the current version of the updated entities to purge related documents.
54+
*/
5255
public function preUpdate(PreUpdateEventArgs $eventArgs)
5356
{
5457
$object = $eventArgs->getObject();
@@ -67,6 +70,9 @@ public function preUpdate(PreUpdateEventArgs $eventArgs)
6770
}
6871
}
6972

73+
/**
74+
* Collects tags from inserted and deleted entities, including relations.
75+
*/
7076
public function onFlush(OnFlushEventArgs $eventArgs)
7177
{
7278
$em = $eventArgs->getEntityManager();
@@ -88,6 +94,9 @@ public function onFlush(OnFlushEventArgs $eventArgs)
8894
}
8995
}
9096

97+
/**
98+
* Purges tags collected during this request, and clears the tag list.
99+
*/
91100
public function postFlush()
92101
{
93102
$this->purger->purge($this->tags);

tests/Bridge/Doctrine/EventListener/PurgeHttpCacheListenerTest.php

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@
1818
use ApiPlatform\Core\Bridge\Doctrine\EventListener\PurgeHttpCacheListener;
1919
use ApiPlatform\Core\HttpCache\PurgerInterface;
2020
use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\Dummy;
21+
use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\RelatedDummy;
2122
use Doctrine\ORM\EntityManagerInterface;
2223
use Doctrine\ORM\Event\OnFlushEventArgs;
24+
use Doctrine\ORM\Event\PreUpdateEventArgs;
2325
use Doctrine\ORM\Mapping\ClassMetadata;
2426
use Doctrine\ORM\UnitOfWork;
2527
use Prophecy\Argument;
@@ -29,7 +31,7 @@
2931
*/
3032
class PurgeHttpCacheListenerTest extends \PHPUnit_Framework_TestCase
3133
{
32-
public function test()
34+
public function testOnFlush()
3335
{
3436
$toInsert1 = new Dummy();
3537
$toInsert2 = new Dummy();
@@ -71,4 +73,41 @@ public function test()
7173
$listener->onFlush($eventArgs);
7274
$listener->postFlush();
7375
}
76+
77+
public function testPreUpdate()
78+
{
79+
$oldRelatedDummy = new RelatedDummy();
80+
$oldRelatedDummy->setId(1);
81+
82+
$newRelatedDummy = new RelatedDummy();
83+
$newRelatedDummy->setId(2);
84+
85+
$dummy = new Dummy();
86+
$dummy->setId(1);
87+
88+
$purgerProphecy = $this->prophesize(PurgerInterface::class);
89+
$purgerProphecy->purge(['/dummies' => '/dummies', '/dummies/1' => '/dummies/1', '/related_dummies/old' => '/related_dummies/old', '/related_dummies/new' => '/related_dummies/new'])->shouldBeCalled();
90+
91+
$iriConverterProphecy = $this->prophesize(IriConverterInterface::class);
92+
$iriConverterProphecy->getIriFromResourceClass(Dummy::class)->willReturn('/dummies')->shouldBeCalled();
93+
$iriConverterProphecy->getIriFromItem($dummy)->willReturn('/dummies/1')->shouldBeCalled();
94+
$iriConverterProphecy->getIriFromItem($oldRelatedDummy)->willReturn('/related_dummies/old')->shouldBeCalled();
95+
$iriConverterProphecy->getIriFromItem($newRelatedDummy)->willReturn('/related_dummies/new')->shouldBeCalled();
96+
97+
$resourceClassResolverProphecy = $this->prophesize(ResourceClassResolverInterface::class);
98+
$resourceClassResolverProphecy->getResourceClass(Argument::type(Dummy::class))->willReturn(Dummy::class)->shouldBeCalled();
99+
100+
$emProphecy = $this->prophesize(EntityManagerInterface::class);
101+
102+
$classMetadata = new ClassMetadata(Dummy::class);
103+
$classMetadata->mapManyToOne(['fieldName' => 'relatedDummy', 'targetEntity' => RelatedDummy::class]);
104+
$emProphecy->getClassMetadata(Dummy::class)->willReturn($classMetadata)->shouldBeCalled();
105+
106+
$changeSet = ['relatedDummy' => [$oldRelatedDummy, $newRelatedDummy]];
107+
$eventArgs = new PreUpdateEventArgs($dummy, $emProphecy->reveal(), $changeSet);
108+
109+
$listener = new PurgeHttpCacheListener($purgerProphecy->reveal(), $iriConverterProphecy->reveal(), $resourceClassResolverProphecy->reveal());
110+
$listener->preUpdate($eventArgs);
111+
$listener->postFlush();
112+
}
74113
}

0 commit comments

Comments
 (0)