123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- <?php
- namespace Tool;
- use Doctrine\Common\Annotations\AnnotationReader;
- use Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver;
- use Doctrine\ODM\MongoDB\DocumentManager;
- use Doctrine\Common\EventManager;
- use Doctrine\MongoDB\Connection;
- use Gedmo\Translatable\TranslatableListener;
- use Gedmo\Sluggable\SluggableListener;
- use Gedmo\Timestampable\TimestampableListener;
- use Gedmo\SoftDeleteable\SoftDeleteableListener;
- use Gedmo\Loggable\LoggableListener;
- /**
- * Base test case contains common mock objects
- * and functionality among all extensions using
- * ORM object manager
- *
- * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
- * @link http://www.gediminasm.org
- * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
- */
- abstract class BaseTestCaseMongoODM extends \PHPUnit_Framework_TestCase
- {
- /**
- * @var DocumentManager
- */
- protected $dm;
- /**
- * {@inheritdoc}
- */
- protected function setUp()
- {
- if (!class_exists('Mongo')) {
- $this->markTestSkipped('Missing Mongo extension.');
- }
- }
- /**
- * {@inheritdoc}
- */
- protected function tearDown()
- {
- if ($this->dm) {
- foreach ($this->dm->getDocumentDatabases() as $db) {
- foreach ($db->listCollections() as $collection) {
- $collection->drop();
- }
- }
- $this->dm->getConnection()->close();
- $this->dm = null;
- }
- }
- /**
- * DocumentManager mock object together with
- * annotation mapping driver and database
- *
- * @param EventManager $evm
- * @return DocumentManager
- */
- protected function getMockDocumentManager(EventManager $evm = null, $config = null)
- {
- $conn = new Connection();
- $config = $config ? $config : $this->getMockAnnotatedConfig();
- try {
- $this->dm = DocumentManager::create($conn, $config, $evm ?: $this->getEventManager());
- $this->dm->getConnection()->connect();
- } catch (\MongoException $e) {
- $this->markTestSkipped('Doctrine MongoDB ODM failed to connect');
- }
- return $this->dm;
- }
- /**
- * DocumentManager mock object with
- * annotation mapping driver
- *
- * @param EventManager $evm
- * @return DocumentManager
- */
- protected function getMockMappedDocumentManager(EventManager $evm = null, $config = null)
- {
- $conn = $this->getMock('Doctrine\\MongoDB\\Connection');
- $config = $config ? $config : $this->getMockAnnotatedConfig();
- $this->dm = DocumentManager::create($conn, $config, $evm ?: $this->getEventManager());
- return $this->dm;
- }
- /**
- * Creates default mapping driver
- *
- * @return \Doctrine\ORM\Mapping\Driver\Driver
- */
- protected function getMetadataDriverImplementation()
- {
- return new AnnotationDriver($_ENV['annotation_reader']);
- }
- /**
- * Build event manager
- *
- * @return EventManager
- */
- private function getEventManager()
- {
- $evm = new EventManager;
- $evm->addEventSubscriber(new SluggableListener);
- $evm->addEventSubscriber(new LoggableListener);
- $evm->addEventSubscriber(new TranslatableListener);
- $evm->addEventSubscriber(new TimestampableListener);
- $evm->addEventSubscriber(new SoftDeleteableListener());
- return $evm;
- }
- /**
- * Get annotation mapping configuration
- *
- * @return Doctrine\ORM\Configuration
- */
- protected function getMockAnnotatedConfig()
- {
- $config = $this->getMock('Doctrine\\ODM\\MongoDB\\Configuration');
- $config->expects($this->any())
- ->method('getFilterClassName')
- ->will($this->returnValue('Gedmo\\SoftDeleteable\\Filter\\ODM\\SoftDeleteableFilter'));
- $config->expects($this->once())
- ->method('getProxyDir')
- ->will($this->returnValue(__DIR__.'/../../temp'));
- $config->expects($this->once())
- ->method('getProxyNamespace')
- ->will($this->returnValue('Proxy'));
- $config->expects($this->once())
- ->method('getHydratorDir')
- ->will($this->returnValue(__DIR__.'/../../temp'));
- $config->expects($this->once())
- ->method('getHydratorNamespace')
- ->will($this->returnValue('Hydrator'));
- $config->expects($this->any())
- ->method('getDefaultDB')
- ->will($this->returnValue('gedmo_extensions_test'));
- $config->expects($this->once())
- ->method('getAutoGenerateProxyClasses')
- ->will($this->returnValue(true));
- $config->expects($this->once())
- ->method('getAutoGenerateHydratorClasses')
- ->will($this->returnValue(true));
- $config->expects($this->once())
- ->method('getClassMetadataFactoryName')
- ->will($this->returnValue('Doctrine\\ODM\\MongoDB\\Mapping\\ClassMetadataFactory'));
- $config
- ->expects($this->any())
- ->method('getMongoCmd')
- ->will($this->returnValue('$'))
- ;
- $config
- ->expects($this->any())
- ->method('getDefaultCommitOptions')
- ->will($this->returnValue(array('safe' => true)))
- ;
- $mappingDriver = $this->getMetadataDriverImplementation();
- $config->expects($this->any())
- ->method('getMetadataDriverImpl')
- ->will($this->returnValue($mappingDriver));
- return $config;
- }
- }
|