|
18 | 18 | use ApiPlatform\Core\Bridge\Doctrine\EventListener\PurgeHttpCacheListener;
|
19 | 19 | use ApiPlatform\Core\HttpCache\PurgerInterface;
|
20 | 20 | use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\Dummy;
|
| 21 | +use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\RelatedDummy; |
21 | 22 | use Doctrine\ORM\EntityManagerInterface;
|
22 | 23 | use Doctrine\ORM\Event\OnFlushEventArgs;
|
| 24 | +use Doctrine\ORM\Event\PreUpdateEventArgs; |
23 | 25 | use Doctrine\ORM\Mapping\ClassMetadata;
|
24 | 26 | use Doctrine\ORM\UnitOfWork;
|
25 | 27 | use Prophecy\Argument;
|
|
29 | 31 | */
|
30 | 32 | class PurgeHttpCacheListenerTest extends \PHPUnit_Framework_TestCase
|
31 | 33 | {
|
32 |
| - public function test() |
| 34 | + public function testOnFlush() |
33 | 35 | {
|
34 | 36 | $toInsert1 = new Dummy();
|
35 | 37 | $toInsert2 = new Dummy();
|
@@ -71,4 +73,41 @@ public function test()
|
71 | 73 | $listener->onFlush($eventArgs);
|
72 | 74 | $listener->postFlush();
|
73 | 75 | }
|
| 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 | + } |
74 | 113 | }
|
0 commit comments