Skip to content

Commit

Permalink
Fix mongodb changeset (#1277)
Browse files Browse the repository at this point in the history
  • Loading branch information
IonBazan committed Mar 18, 2023
1 parent 22cb9ea commit 8655c36
Show file tree
Hide file tree
Showing 15 changed files with 122 additions and 137 deletions.
6 changes: 6 additions & 0 deletions UPGRADE.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
Upgrading from v1.21.0 to v1.22.0
=================================

- the `AdapterInterface` no longer requires `getObjectFromArgs` method.
- the `AdapterInterface::recomputeChangeSet()` accepts `Doctrine\Persistence\Event\LifecycleEventArgs` as argument.

Upgrading from v1.17.0 to v1.18.0
=================================

Expand Down
4 changes: 2 additions & 2 deletions phpstan-baseline.neon
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
parameters:
ignoreErrors:
-
message: "#^Method Vich\\\\UploaderBundle\\\\Adapter\\\\AdapterInterface\\:\\:recomputeChangeSet\\(\\) has no return type specified\\.$#"
message: "#^Call to an undefined method Doctrine\\\\Persistence\\\\ObjectManager\\:\\:getUnitOfWork\\(\\)\\.$#"
count: 1
path: src/Adapter/AdapterInterface.php
path: src/Adapter/PHPCR/PHPCRAdapter.php

-
message: "#^Call to an undefined method Symfony\\\\Component\\\\Config\\\\Definition\\\\Builder\\\\NodeDefinition\\:\\:children\\(\\)\\.$#"
Expand Down
15 changes: 3 additions & 12 deletions src/Adapter/AdapterInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

namespace Vich\UploaderBundle\Adapter;

use Doctrine\Persistence\Event\LifecycleEventArgs;

/**
* AdapterInterface.
*
Expand All @@ -11,19 +13,8 @@
*/
interface AdapterInterface
{
/**
* Gets the mapped object from an event.
*
* @param object $event The event
*
* @return object The mapped object
*/
public function getObjectFromArgs($event);

/**
* Recomputes the change set for the object.
*
* @param object $event The event
*/
public function recomputeChangeSet($event);
public function recomputeChangeSet(LifecycleEventArgs $event): void;
}
14 changes: 7 additions & 7 deletions src/Adapter/ODM/MongoDB/MongoDBAdapter.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

namespace Vich\UploaderBundle\Adapter\ODM\MongoDB;

use Doctrine\ODM\MongoDB\Event\LifecycleEventArgs;
use Doctrine\Persistence\Event\LifecycleEventArgs as BaseLifecycleEventArgs;
use Vich\UploaderBundle\Adapter\AdapterInterface;

/**
Expand All @@ -14,14 +16,12 @@
*/
class MongoDBAdapter implements AdapterInterface
{
public function getObjectFromArgs($event)
/**
* @param LifecycleEventArgs $event
*/
public function recomputeChangeSet(BaseLifecycleEventArgs $event): void
{
return $event->getDocument();
}

public function recomputeChangeSet($event): void
{
$object = $this->getObjectFromArgs($event);
$object = $event->getObject();

$dm = $event->getDocumentManager();
$uow = $dm->getUnitOfWork();
Expand Down
16 changes: 5 additions & 11 deletions src/Adapter/ORM/DoctrineORMAdapter.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

namespace Vich\UploaderBundle\Adapter\ORM;

use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\Persistence\Event\LifecycleEventArgs as BaseLifecycleEventArgs;
use Vich\UploaderBundle\Adapter\AdapterInterface;

/**
Expand All @@ -15,19 +17,11 @@
class DoctrineORMAdapter implements AdapterInterface
{
/**
* @param \Doctrine\ORM\Event\LifecycleEventArgs $event
* @param LifecycleEventArgs $event
*/
public function getObjectFromArgs($event)
public function recomputeChangeSet(BaseLifecycleEventArgs $event): void
{
return $event->getEntity();
}

/**
* @param \Doctrine\ORM\Event\PreUpdateEventArgs $event
*/
public function recomputeChangeSet($event): void
{
$object = $this->getObjectFromArgs($event);
$object = $event->getObject();

$em = $event->getEntityManager();
$uow = $em->getUnitOfWork();
Expand Down
14 changes: 5 additions & 9 deletions src/Adapter/PHPCR/PHPCRAdapter.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Vich\UploaderBundle\Adapter\PHPCR;

use Doctrine\Persistence\Event\LifecycleEventArgs;
use Vich\UploaderBundle\Adapter\AdapterInterface;

/**
Expand All @@ -12,17 +13,12 @@
*/
class PHPCRAdapter implements AdapterInterface
{
public function getObjectFromArgs($event)
public function recomputeChangeSet(LifecycleEventArgs $event): void
{
return $event->getObject();
}

public function recomputeChangeSet($event): void
{
$object = $this->getObjectFromArgs($event);
$object = $event->getObject();

$dm = $event->getObjectManager();
$uow = $dm->getUnitOfWork();
$objectManager = $event->getObjectManager();
$uow = $objectManager->getUnitOfWork();
$uow->computeSingleDocumentChangeSet($object);
}
}
9 changes: 3 additions & 6 deletions src/EventListener/Doctrine/CleanListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Vich\UploaderBundle\EventListener\Doctrine;

use Doctrine\Common\EventArgs;
use Doctrine\Persistence\Event\LifecycleEventArgs;

/**
* CleanListener.
Expand All @@ -25,12 +25,9 @@ public function getSubscribedEvents(): array
];
}

/**
* @param EventArgs|\Doctrine\ORM\Event\PreUpdateEventArgs $event
*/
public function preUpdate(EventArgs $event): void
public function preUpdate(LifecycleEventArgs $event): void
{
$object = $this->adapter->getObjectFromArgs($event);
$object = $event->getObject();

if (!$this->isUploadable($object)) {
return;
Expand Down
8 changes: 4 additions & 4 deletions src/EventListener/Doctrine/InjectListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Vich\UploaderBundle\EventListener\Doctrine;

use Doctrine\Common\EventArgs;
use Doctrine\Persistence\Event\LifecycleEventArgs;

/**
* InjectListener.
Expand All @@ -26,13 +26,13 @@ public function getSubscribedEvents(): array
}

/**
* @param EventArgs $event The event
* @param LifecycleEventArgs $event The event
*
* @throws \Vich\UploaderBundle\Exception\MappingNotFoundException
*/
public function postLoad(EventArgs $event): void
public function postLoad(LifecycleEventArgs $event): void
{
$object = $this->adapter->getObjectFromArgs($event);
$object = $event->getObject();

if (!$this->isUploadable($object)) {
return;
Expand Down
8 changes: 4 additions & 4 deletions src/EventListener/Doctrine/RemoveListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Vich\UploaderBundle\EventListener\Doctrine;

use Doctrine\Common\EventArgs;
use Doctrine\Persistence\Event\LifecycleEventArgs;
use Doctrine\Persistence\Proxy;

/**
Expand Down Expand Up @@ -33,11 +33,11 @@ public function getSubscribedEvents(): array
/**
* Ensures a proxy will be usable in the postFlush (when transaction has ended).
*
* @param EventArgs $event The event
* @param LifecycleEventArgs $event The event
*/
public function preRemove(EventArgs $event): void
public function preRemove(LifecycleEventArgs $event): void
{
$object = $this->adapter->getObjectFromArgs($event);
$object = $event->getObject();

if ($this->isUploadable($object)) {
if ($object instanceof Proxy) {
Expand Down
14 changes: 7 additions & 7 deletions src/EventListener/Doctrine/UploadListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Vich\UploaderBundle\EventListener\Doctrine;

use Doctrine\Common\EventArgs;
use Doctrine\Persistence\Event\LifecycleEventArgs;

/**
* UploadListener.
Expand All @@ -27,13 +27,13 @@ public function getSubscribedEvents(): array
}

/**
* @param EventArgs $event The event
* @param LifecycleEventArgs $event The event
*
* @throws \Vich\UploaderBundle\Exception\MappingNotFoundException
*/
public function prePersist(EventArgs $event): void
public function prePersist(LifecycleEventArgs $event): void
{
$object = $this->adapter->getObjectFromArgs($event);
$object = $event->getObject();

if (!$this->isUploadable($object)) {
return;
Expand All @@ -45,13 +45,13 @@ public function prePersist(EventArgs $event): void
}

/**
* @param EventArgs|\Doctrine\ORM\Event\PreUpdateEventArgs $event The event
* @param LifecycleEventArgs $event The event
*
* @throws \Vich\UploaderBundle\Exception\MappingNotFoundException
*/
public function preUpdate(EventArgs $event): void
public function preUpdate(LifecycleEventArgs $event): void
{
$object = $this->adapter->getObjectFromArgs($event);
$object = $event->getObject();

if (!$this->isUploadable($object)) {
return;
Expand Down
53 changes: 39 additions & 14 deletions tests/Adapter/ODM/MongoDB/MongoDBAdapterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

namespace Vich\UploaderBundle\Tests\Adapter\ODM\MongoDB;

use Doctrine\ODM\MongoDB\Event\LifecycleEventArgs;
use Doctrine\Common\EventManager;
use Doctrine\ODM\MongoDB\Configuration;
use Doctrine\ODM\MongoDB\DocumentManager;
use Doctrine\ODM\MongoDB\Event\PreUpdateEventArgs;
use Doctrine\ODM\MongoDB\Hydrator\HydratorFactory;
use Doctrine\ODM\MongoDB\Mapping\ClassMetadata;
use Doctrine\ODM\MongoDB\UnitOfWork;
use PHPUnit\Framework\TestCase;
use Vich\UploaderBundle\Adapter\ODM\MongoDB\MongoDBAdapter;
use Vich\UploaderBundle\Tests\DummyEntity;
Expand All @@ -14,23 +20,42 @@
*/
final class MongoDBAdapterTest extends TestCase
{
/**
* @requires function LifecycleEventArgs::getDocument
*/
public function testGetObjectFromArgs(): void
public function testRecomputeChangeSet(): void
{
$entity = new DummyEntity();

$args = $this->getMockBuilder(LifecycleEventArgs::class)
->disableOriginalConstructor()
->getMock();
$args
->expects(self::once())
->method('getDocument')
->willReturn($entity);
$changeSet = [
'fileName' => [
'test.csv',
'test2.csv',
],
];
$dm = $this->createStub(DocumentManager::class);
$dm->method('getClassMetadata')->willReturn(new ClassMetadata(DummyEntity::class));
$event = new PreUpdateEventArgs($entity, $dm, $changeSet);

$adapter = new MongoDBAdapter();
$uow = $this->getUnitOfWork($dm);
$dm->method('getUnitOfWork')->willReturn($uow);
$uow->persist($entity);

$uow->setDocumentChangeSet($entity, $changeSet);

self::assertSame($changeSet, $uow->getDocumentChangeSet($entity));
$adapter->recomputeChangeSet($event);
self::assertSame([], $uow->getDocumentChangeSet($entity));
}

protected function getUnitOfWork(DocumentManager $documentManager): UnitOfWork
{
$eventManager = $this->createStub(EventManager::class);
$hydratorFactory = new HydratorFactory(
$documentManager,
$eventManager,
'/tmp',
'Hydrator',
Configuration::AUTOGENERATE_NEVER
);

self::assertEquals($entity, $adapter->getObjectFromArgs($args));
return new UnitOfWork($documentManager, $eventManager, $hydratorFactory);
}
}
39 changes: 25 additions & 14 deletions tests/Adapter/ORM/DoctrineORMAdapterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

namespace Vich\UploaderBundle\Tests\Adapter\ORM;

use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Event\PreUpdateEventArgs;
use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\UnitOfWork;
use PHPUnit\Framework\TestCase;
use Vich\UploaderBundle\Adapter\ORM\DoctrineORMAdapter;
use Vich\UploaderBundle\Tests\DummyEntity;
Expand All @@ -14,23 +17,31 @@
*/
final class DoctrineORMAdapterTest extends TestCase
{
/**
* @requires function LifecycleEventArgs::getEntity
*/
public function testGetObjectFromArgs(): void
public function testRecomputeChangeSet(): void
{
$entity = new DummyEntity();
$changeSet = [];

$args = $this->getMockBuilder(LifecycleEventArgs::class)
->disableOriginalConstructor()
->getMock();
$args
->expects(self::once())
->method('getEntity')
->willReturn($entity);
$uow = $this->createMock(UnitOfWork::class);
$em = $this->createMock(EntityManager::class);
$metadata = $this->createMock(ClassMetadata::class);

$adapter = new DoctrineORMAdapter();
$em->expects(self::once())
->method('getUnitOfWork')
->willReturn($uow);

$em->expects(self::once())
->method('getClassMetadata')
->with(DummyEntity::class)
->willReturn($metadata);

$uow->expects(self::once())
->method('recomputeSingleEntityChangeSet')
->with($metadata, $entity);

self::assertEquals($entity, $adapter->getObjectFromArgs($args));
$event = new PreUpdateEventArgs($entity, $em, $changeSet);

$adapter = new DoctrineORMAdapter();
$adapter->recomputeChangeSet($event);
}
}

0 comments on commit 8655c36

Please sign in to comment.