[Listener] Use common AbstractListenerTest for ORM and MongoDB ODM
This commit is contained in:
parent
0f46f4b96d
commit
78a36c196d
153
Tests/Doctrine/AbstractListenerTest.php
Normal file
153
Tests/Doctrine/AbstractListenerTest.php
Normal file
|
@ -0,0 +1,153 @@
|
|||
<?php
|
||||
|
||||
namespace FOQ\ElasticaBundle\Tests\Doctrine;
|
||||
|
||||
/**
|
||||
* @author Richard Miller <info@limethinking.co.uk>
|
||||
*/
|
||||
abstract class AbstractListenerTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
public function testObjectInsertedOnPersist()
|
||||
{
|
||||
$persister = $this->getMockPersister();
|
||||
|
||||
$entity = new Listener\Entity(1);
|
||||
$eventArgs = $this->createLifecycleEventArgs($entity, $this->getMockObjectManager());
|
||||
|
||||
$persister->expects($this->once())
|
||||
->method('insertOne')
|
||||
->with($entity);
|
||||
|
||||
$listener = $this->createListener($persister, get_class($entity), array());
|
||||
$listener->postPersist($eventArgs);
|
||||
}
|
||||
|
||||
public function testObjectReplacedOnUpdate()
|
||||
{
|
||||
$persister = $this->getMockPersister();
|
||||
|
||||
$entity = new Listener\Entity(1);
|
||||
$eventArgs = $this->createLifecycleEventArgs($entity, $this->getMockObjectManager());
|
||||
|
||||
$persister->expects($this->once())
|
||||
->method('replaceOne')
|
||||
->with($entity);
|
||||
|
||||
$listener = $this->createListener($persister, get_class($entity), array());
|
||||
$listener->postUpdate($eventArgs);
|
||||
}
|
||||
|
||||
public function testObjectDeletedOnRemove()
|
||||
{
|
||||
$classMetadata = $this->getMockClassMetadata();
|
||||
$objectManager = $this->getMockObjectManager();
|
||||
$persister = $this->getMockPersister();
|
||||
|
||||
$entity = new Listener\Entity(78);
|
||||
$eventArgs = $this->createLifecycleEventArgs($entity, $objectManager);
|
||||
|
||||
$objectManager->expects($this->any())
|
||||
->method('getClassMetadata')
|
||||
->with(get_class($entity))
|
||||
->will($this->returnValue($classMetadata));
|
||||
|
||||
$classMetadata->expects($this->any())
|
||||
->method('getFieldValue')
|
||||
->with($entity, 'id')
|
||||
->will($this->returnValue($entity->getId()));
|
||||
|
||||
$persister->expects($this->once())
|
||||
->method('deleteById')
|
||||
->with($entity->getId());
|
||||
|
||||
$listener = $this->createListener($persister, get_class($entity), array());
|
||||
$listener->preRemove($eventArgs);
|
||||
$listener->postRemove($eventArgs);
|
||||
}
|
||||
|
||||
public function testObjectWithNonStandardIdentifierDeletedOnRemove()
|
||||
{
|
||||
$classMetadata = $this->getMockClassMetadata();
|
||||
$objectManager = $this->getMockObjectManager();
|
||||
$persister = $this->getMockPersister();
|
||||
|
||||
$entity = new Listener\Entity(826);
|
||||
$eventArgs = $this->createLifecycleEventArgs($entity, $objectManager);
|
||||
|
||||
$objectManager->expects($this->any())
|
||||
->method('getClassMetadata')
|
||||
->with(get_class($entity))
|
||||
->will($this->returnValue($classMetadata));
|
||||
|
||||
$classMetadata->expects($this->any())
|
||||
->method('getFieldValue')
|
||||
->with($entity, 'identifier')
|
||||
->will($this->returnValue($entity->getId()));
|
||||
|
||||
$persister->expects($this->once())
|
||||
->method('deleteById')
|
||||
->with($entity->getId());
|
||||
|
||||
$listener = $this->createListener($persister, get_class($entity), array(), 'identifier');
|
||||
$listener->preRemove($eventArgs);
|
||||
$listener->postRemove($eventArgs);
|
||||
}
|
||||
|
||||
abstract protected function getLifecycleEventArgsClass();
|
||||
|
||||
abstract protected function getListenerClass();
|
||||
|
||||
abstract protected function getObjectManagerClass();
|
||||
|
||||
abstract protected function getClassMetadataClass();
|
||||
|
||||
private function createLifecycleEventArgs()
|
||||
{
|
||||
$refl = new \ReflectionClass($this->getLifecycleEventArgsClass());
|
||||
|
||||
return $refl->newInstanceArgs(func_get_args());
|
||||
}
|
||||
|
||||
private function createListener()
|
||||
{
|
||||
$refl = new \ReflectionClass($this->getListenerClass());
|
||||
|
||||
return $refl->newInstanceArgs(func_get_args());
|
||||
}
|
||||
|
||||
private function getMockClassMetadata()
|
||||
{
|
||||
return $this->getMockBuilder($this->getClassMetadataClass())
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
}
|
||||
|
||||
private function getMockObjectManager()
|
||||
{
|
||||
return $this->getMockBuilder($this->getObjectManagerClass())
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
}
|
||||
|
||||
private function getMockPersister()
|
||||
{
|
||||
return $this->getMock('FOQ\ElasticaBundle\Persister\ObjectPersisterInterface');
|
||||
}
|
||||
}
|
||||
|
||||
namespace FOQ\ElasticaBundle\Tests\Doctrine\Listener;
|
||||
|
||||
class Entity
|
||||
{
|
||||
private $id;
|
||||
|
||||
public function __construct($id)
|
||||
{
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
public function getId()
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
}
|
|
@ -2,166 +2,34 @@
|
|||
|
||||
namespace FOQ\ElasticaBundle\Tests\Doctrine\MongoDB;
|
||||
|
||||
use FOQ\ElasticaBundle\Doctrine\MongoDB\Listener;
|
||||
use FOQ\ElasticaBundle\Tests\Doctrine\AbstractListenerTest;
|
||||
|
||||
class Document{}
|
||||
|
||||
/**
|
||||
* @author Richard Miller <info@limethinking.co.uk>
|
||||
*/
|
||||
class ListenerTest extends \PHPUnit_Framework_TestCase
|
||||
class ListenerTest extends AbstractListenerTest
|
||||
{
|
||||
public function setUp()
|
||||
{
|
||||
if (!class_exists('Doctrine\ODM\MongoDB\DocumentManager')) {
|
||||
$this->markTestSkipped('Doctrine MongoDB ODM is not available.');
|
||||
}
|
||||
if (!class_exists('Doctrine\ODM\MongoDB\DocumentManager')) {
|
||||
$this->markTestSkipped('Doctrine MongoDB ODM is not available.');
|
||||
}
|
||||
}
|
||||
|
||||
public function testObjectInsertedOnPersist()
|
||||
protected function getClassMetadataClass()
|
||||
{
|
||||
$persisterMock = $this->getMockBuilder('FOQ\ElasticaBundle\Persister\ObjectPersisterInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$eventArgsMock = $this->getMockBuilder('Doctrine\ODM\MongoDB\Event\LifecycleEventArgs')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$objectName = 'FOQ\ElasticaBundle\Tests\Doctrine\MongoDB\Document';
|
||||
$document = new Document();
|
||||
|
||||
$eventArgsMock->expects($this->once())
|
||||
->method('getDocument')
|
||||
->will($this->returnValue($document));
|
||||
|
||||
$persisterMock->expects($this->once())
|
||||
->method('insertOne')
|
||||
->with($this->equalTo($document));
|
||||
|
||||
$listener = new Listener($persisterMock, $objectName, array());
|
||||
$listener->postPersist($eventArgsMock);
|
||||
return 'Doctrine\ODM\MongoDB\Mapping\ClassMetadata';
|
||||
}
|
||||
|
||||
public function testObjectReplacedOnUpdate()
|
||||
protected function getLifecycleEventArgsClass()
|
||||
{
|
||||
$persisterMock = $this->getMockBuilder('FOQ\ElasticaBundle\Persister\ObjectPersisterInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$eventArgsMock = $this->getMockBuilder('Doctrine\ODM\MongoDB\Event\LifecycleEventArgs')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$objectName = 'FOQ\ElasticaBundle\Tests\Doctrine\MongoDB\Document';
|
||||
$document = new Document();
|
||||
|
||||
$eventArgsMock->expects($this->once())
|
||||
->method('getDocument')
|
||||
->will($this->returnValue($document));
|
||||
|
||||
$persisterMock->expects($this->once())
|
||||
->method('replaceOne')
|
||||
->with($this->equalTo($document));
|
||||
|
||||
$listener = new Listener($persisterMock, $objectName, array());
|
||||
$listener->postUpdate($eventArgsMock);
|
||||
return 'Doctrine\ODM\MongoDB\Event\LifecycleEventArgs';
|
||||
}
|
||||
|
||||
public function testObjectDeletedOnRemove()
|
||||
protected function getListenerClass()
|
||||
{
|
||||
$persisterMock = $this->getMockBuilder('FOQ\ElasticaBundle\Persister\ObjectPersisterInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$eventArgsMock = $this->getMockBuilder('Doctrine\ODM\MongoDB\Event\LifecycleEventArgs')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$documentManagerMock = $this->getMockBuilder('Doctrine\ODM\MongoDB\DocumentManager')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$metadataMock = $this->getMockBuilder('Doctrine\ODM\MongoDB\Mapping\ClassMetadata')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$objectName = 'FOQ\ElasticaBundle\Tests\Doctrine\MongoDB\Document';
|
||||
$document = new Document();
|
||||
$documentId = 78;
|
||||
|
||||
$eventArgsMock->expects($this->any())
|
||||
->method('getDocument')
|
||||
->will($this->returnValue($document));
|
||||
|
||||
$eventArgsMock->expects($this->any())
|
||||
->method('getDocumentManager')
|
||||
->will($this->returnValue($documentManagerMock));
|
||||
|
||||
$documentManagerMock->expects($this->any())
|
||||
->method('getClassMetadata')
|
||||
->will($this->returnValue($metadataMock));
|
||||
|
||||
$metadataMock->expects($this->any())
|
||||
->method('getFieldValue')
|
||||
->with($this->equalTo($document), $this->equalTo('id'))
|
||||
->will($this->returnValue($documentId));
|
||||
|
||||
$persisterMock->expects($this->once())
|
||||
->method('deleteById')
|
||||
->with($this->equalTo($documentId));
|
||||
|
||||
$listener = new Listener($persisterMock, $objectName, array());
|
||||
$listener->preRemove($eventArgsMock);
|
||||
$listener->postRemove($eventArgsMock);
|
||||
return 'FOQ\ElasticaBundle\Doctrine\MongoDB\Listener';
|
||||
}
|
||||
|
||||
public function testObjectWithNonStandardIdentifierDeletedOnRemove()
|
||||
protected function getObjectManagerClass()
|
||||
{
|
||||
$persisterMock = $this->getMockBuilder('FOQ\ElasticaBundle\Persister\ObjectPersisterInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$eventArgsMock = $this->getMockBuilder('Doctrine\ODM\MongoDB\Event\LifecycleEventArgs')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$documentManagerMock = $this->getMockBuilder('Doctrine\ODM\MongoDB\DocumentManager')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$metadataMock = $this->getMockBuilder('Doctrine\ODM\MongoDB\Mapping\ClassMetadata')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$objectName = 'FOQ\ElasticaBundle\Tests\Doctrine\MongoDB\Document';
|
||||
$document = new Document();
|
||||
$documentIdentifier = 826;
|
||||
$identifierField = 'identifier';
|
||||
|
||||
$eventArgsMock->expects($this->any())
|
||||
->method('getDocument')
|
||||
->will($this->returnValue($document));
|
||||
|
||||
$eventArgsMock->expects($this->any())
|
||||
->method('getDocumentManager')
|
||||
->will($this->returnValue($documentManagerMock));
|
||||
|
||||
$documentManagerMock->expects($this->any())
|
||||
->method('getClassMetadata')
|
||||
->will($this->returnValue($metadataMock));
|
||||
|
||||
$metadataMock->expects($this->any())
|
||||
->method('getFieldValue')
|
||||
->with($this->equalTo($document), $this->equalTo($identifierField))
|
||||
->will($this->returnValue($documentIdentifier));
|
||||
|
||||
$persisterMock->expects($this->once())
|
||||
->method('deleteById')
|
||||
->with($this->equalTo($documentIdentifier));
|
||||
|
||||
$listener = new Listener($persisterMock, $objectName, array(), 'identifier');
|
||||
$listener->preRemove($eventArgsMock);
|
||||
$listener->postRemove($eventArgsMock);
|
||||
return 'Doctrine\ODM\MongoDB\DocumentManager';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,166 +2,34 @@
|
|||
|
||||
namespace FOQ\ElasticaBundle\Tests\Doctrine\ORM;
|
||||
|
||||
use FOQ\ElasticaBundle\Doctrine\ORM\Listener;
|
||||
use FOQ\ElasticaBundle\Tests\Doctrine\AbstractListenerTest;
|
||||
|
||||
class Entity{}
|
||||
|
||||
/**
|
||||
* @author Richard Miller <info@limethinking.co.uk>
|
||||
*/
|
||||
class ListenerTest extends \PHPUnit_Framework_TestCase
|
||||
class ListenerTest extends AbstractListenerTest
|
||||
{
|
||||
public function setUp()
|
||||
{
|
||||
if (!class_exists('Doctrine\ORM\EntityManager')) {
|
||||
$this->markTestSkipped('Doctrine ORM is not available.');
|
||||
}
|
||||
if (!class_exists('Doctrine\ORM\EntityManager')) {
|
||||
$this->markTestSkipped('Doctrine ORM is not available.');
|
||||
}
|
||||
}
|
||||
|
||||
public function testObjectInsertedOnPersist()
|
||||
protected function getClassMetadataClass()
|
||||
{
|
||||
$persisterMock = $this->getMockBuilder('FOQ\ElasticaBundle\Persister\ObjectPersisterInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$eventArgsMock = $this->getMockBuilder('Doctrine\ORM\Event\LifecycleEventArgs')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$objectName = 'FOQ\ElasticaBundle\Tests\Doctrine\ORM\Entity';
|
||||
$entity = new Entity;
|
||||
|
||||
$eventArgsMock->expects($this->once())
|
||||
->method('getEntity')
|
||||
->will($this->returnValue($entity));
|
||||
|
||||
$persisterMock->expects($this->once())
|
||||
->method('insertOne')
|
||||
->with($this->equalTo($entity));
|
||||
|
||||
$listener = new Listener($persisterMock, $objectName, array());
|
||||
$listener->postPersist($eventArgsMock);
|
||||
return 'Doctrine\ORM\Mapping\ClassMetadata';
|
||||
}
|
||||
|
||||
public function testObjectReplacedOnUpdate()
|
||||
protected function getLifecycleEventArgsClass()
|
||||
{
|
||||
$persisterMock = $this->getMockBuilder('FOQ\ElasticaBundle\Persister\ObjectPersisterInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$eventArgsMock = $this->getMockBuilder('Doctrine\ORM\Event\LifecycleEventArgs')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$objectName = 'FOQ\ElasticaBundle\Tests\Doctrine\ORM\Entity';
|
||||
$entity = new Entity;
|
||||
|
||||
$eventArgsMock->expects($this->once())
|
||||
->method('getEntity')
|
||||
->will($this->returnValue($entity));
|
||||
|
||||
$persisterMock->expects($this->once())
|
||||
->method('replaceOne')
|
||||
->with($this->equalTo($entity));
|
||||
|
||||
$listener = new Listener($persisterMock, $objectName, array());
|
||||
$listener->postUpdate($eventArgsMock);
|
||||
return 'Doctrine\ORM\Event\LifecycleEventArgs';
|
||||
}
|
||||
|
||||
public function testObjectDeletedOnRemove()
|
||||
protected function getListenerClass()
|
||||
{
|
||||
$persisterMock = $this->getMockBuilder('FOQ\ElasticaBundle\Persister\ObjectPersisterInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$eventArgsMock = $this->getMockBuilder('Doctrine\ORM\Event\LifecycleEventArgs')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$entityManagerMock = $this->getMockBuilder('Doctrine\ORM\EntityManager')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$metadataMock = $this->getMockBuilder('Doctrine\ORM\Mapping\ClassMetadata')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$objectName = 'FOQ\ElasticaBundle\Tests\Doctrine\ORM\Entity';
|
||||
$entity = new Entity;
|
||||
$entityId = 21;
|
||||
|
||||
$eventArgsMock->expects($this->any())
|
||||
->method('getEntity')
|
||||
->will($this->returnValue($entity));
|
||||
|
||||
$eventArgsMock->expects($this->any())
|
||||
->method('getEntityManager')
|
||||
->will($this->returnValue($entityManagerMock));
|
||||
|
||||
$entityManagerMock->expects($this->any())
|
||||
->method('getClassMetadata')
|
||||
->will($this->returnValue($metadataMock));
|
||||
|
||||
$metadataMock->expects($this->any())
|
||||
->method('getFieldValue')
|
||||
->with($this->equalTo($entity), $this->equalTo('id'))
|
||||
->will($this->returnValue($entityId));
|
||||
|
||||
$persisterMock->expects($this->once())
|
||||
->method('deleteById')
|
||||
->with($this->equalTo($entityId));
|
||||
|
||||
$listener = new Listener($persisterMock, $objectName, array());
|
||||
$listener->preRemove($eventArgsMock);
|
||||
$listener->postRemove($eventArgsMock);
|
||||
return 'FOQ\ElasticaBundle\Doctrine\ORM\Listener';
|
||||
}
|
||||
|
||||
public function testObjectWithNonStandardIdentifierDeletedOnRemove()
|
||||
protected function getObjectManagerClass()
|
||||
{
|
||||
$persisterMock = $this->getMockBuilder('FOQ\ElasticaBundle\Persister\ObjectPersisterInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$eventArgsMock = $this->getMockBuilder('Doctrine\ORM\Event\LifecycleEventArgs')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$entityManagerMock = $this->getMockBuilder('Doctrine\ORM\EntityManager')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$metadataMock = $this->getMockBuilder('Doctrine\ORM\Mapping\ClassMetadata')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$objectName = 'FOQ\ElasticaBundle\Tests\Doctrine\ORM\Entity';
|
||||
$entity = new Entity;
|
||||
$entityIdentifier = 924;
|
||||
$identifierField = 'identifier';
|
||||
|
||||
$eventArgsMock->expects($this->any())
|
||||
->method('getEntity')
|
||||
->will($this->returnValue($entity));
|
||||
|
||||
$eventArgsMock->expects($this->any())
|
||||
->method('getEntityManager')
|
||||
->will($this->returnValue($entityManagerMock));
|
||||
|
||||
$entityManagerMock->expects($this->any())
|
||||
->method('getClassMetadata')
|
||||
->will($this->returnValue($metadataMock));
|
||||
|
||||
$metadataMock->expects($this->any())
|
||||
->method('getFieldValue')
|
||||
->with($this->equalTo($entity), $this->equalTo($identifierField))
|
||||
->will($this->returnValue($entityIdentifier));
|
||||
|
||||
$persisterMock->expects($this->once())
|
||||
->method('deleteById')
|
||||
->with($this->equalTo($entityIdentifier));
|
||||
|
||||
$listener = new Listener($persisterMock, $objectName, array(), $identifierField);
|
||||
$listener->preRemove($eventArgsMock);
|
||||
$listener->postRemove($eventArgsMock);
|
||||
return 'Doctrine\ORM\EntityManager';
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue