[Listener] Use common AbstractListenerTest for ORM and MongoDB ODM

This commit is contained in:
Jeremy Mikola 2012-04-10 14:18:20 -04:00
parent 0f46f4b96d
commit 78a36c196d
3 changed files with 179 additions and 290 deletions

View 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;
}
}

View file

@ -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';
}
}

View file

@ -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';
}
}