Explorar o código

fixed a bug when cache driver is not specified for metadata storage, thanks to zim32 for noticing on it

gediminasm %!s(int64=14) %!d(string=hai) anos
pai
achega
612c214cc3

+ 1 - 1
lib/Gedmo/Mapping/MappedEventSubscriber.php

@@ -62,7 +62,7 @@ abstract class MappedEventSubscriber
         } else {
             $cacheDriver = $em->getMetadataFactory()->getCacheDriver();
             $cacheId = ExtensionMetadataFactory::getCacheId($class, $this->_getNamespace());
-            if (($cached = $cacheDriver->fetch($cacheId)) !== false) {
+            if ($cacheDriver && ($cached = $cacheDriver->fetch($cacheId)) !== false) {
                 $this->_configurations[$class] = $cached;
                 $config = $cached;
             }

+ 1 - 3
lib/Gedmo/Sluggable/SluggableListener.php

@@ -8,9 +8,7 @@ use Doctrine\Common\EventSubscriber,
     Doctrine\ORM\Event\OnFlushEventArgs,
     Gedmo\Mapping\MappedEventSubscriber,
     Doctrine\ORM\EntityManager,
-    Doctrine\ORM\Query,
-    Doctrine\ORM\Mapping\ClassMetadata,
-    Doctrine\ORM\Mapping\ClassMetadataInfo;
+    Doctrine\ORM\Query;
 
 /**
  * The SluggableListener handles the generation of slugs

+ 1 - 2
lib/Gedmo/Timestampable/TimestampableListener.php

@@ -7,8 +7,7 @@ use Doctrine\Common\EventSubscriber,
     Doctrine\ORM\Event\LifecycleEventArgs,
     Doctrine\ORM\Event\OnFlushEventArgs,
     Gedmo\Mapping\MappedEventSubscriber,
-    Doctrine\ORM\EntityManager,
-    Gedmo\Mapping\ExtensionMetadataFactory;
+    Doctrine\ORM\EntityManager;
 
 /**
  * The Timestampable listener handles the update of

+ 3 - 5
lib/Gedmo/Translatable/TranslationListener.php

@@ -9,10 +9,8 @@ use Doctrine\Common\EventSubscriber,
     Gedmo\Mapping\MappedEventSubscriber,
     Doctrine\ORM\EntityManager,
     Doctrine\ORM\Query,
-    Doctrine\ORM\Mapping\ClassMetadata,
     Doctrine\ORM\Mapping\ClassMetadataInfo,
-    Gedmo\Translatable\Entity\Translation,
-    Gedmo\Mapping\ExtensionMetadataFactory;
+    Gedmo\Translatable\Entity\Translation;
 
 /**
  * The translation listener handles the generation and
@@ -126,10 +124,10 @@ class TranslationListener extends MappedEventSubscriber implements EventSubscrib
      * defined locale first..
      * 
      * @param object $entity
-     * @param ClassMetadata $meta
+     * @param ClassMetadataInfo $meta
      * @return string
      */
-    public function getTranslatableLocale($entity, ClassMetadata $meta)
+    public function getTranslatableLocale($entity, ClassMetadataInfo $meta)
     {
         $locale = $this->_locale;
         if (isset($this->_configurations[$meta->name]['locale'])) {

+ 3 - 5
lib/Gedmo/Tree/TreeListener.php

@@ -9,9 +9,7 @@ use Doctrine\Common\EventSubscriber,
     Gedmo\Mapping\MappedEventSubscriber,
     Doctrine\ORM\EntityManager,
     Doctrine\ORM\Query,
-    Doctrine\ORM\Mapping\ClassMetadata,
-    Doctrine\ORM\Mapping\ClassMetadataInfo,
-    Gedmo\Mapping\ExtensionMetadataFactory;
+    Doctrine\ORM\Mapping\ClassMetadataInfo;
 
 /**
  * The tree listener handles the synchronization of
@@ -200,11 +198,11 @@ class TreeListener extends MappedEventSubscriber implements EventSubscriber
     /**
      * Checks if $field type is valid
      * 
-     * @param ClassMetadata $meta
+     * @param ClassMetadataInfo $meta
      * @param string $field
      * @return boolean
      */
-    protected function _isValidField(ClassMetadata $meta, $field)
+    protected function _isValidField(ClassMetadataInfo $meta, $field)
     {
         return in_array($meta->getTypeOfField($field), $this->_validTypes);
     }

+ 70 - 0
tests/Gedmo/Mapping/MappingTest.php

@@ -0,0 +1,70 @@
+<?php
+
+namespace Gedmo\Mapping;
+
+use Doctrine\Common\Util\Debug,
+    Tree\Fixture\BehavioralCategory,
+    Gedmo\Mapping\ExtensionMetadataFactory;
+
+/**
+ * These are mapping extension tests
+ * 
+ * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
+ * @package Gedmo.Mapping
+ * @link http://www.gediminasm.org
+ * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
+ */
+class MappingTest extends \PHPUnit_Framework_TestCase
+{
+    const TEST_ENTITY_CATEGORY = "Tree\Fixture\BehavioralCategory";
+    const TEST_ENTITY_TRANSLATION = "Gedmo\Translatable\Entity\Translation";
+    
+    private $em;
+    private $timestampable;
+
+    public function setUp()
+    {        
+        $config = new \Doctrine\ORM\Configuration();
+        //$config->setMetadataCacheImpl(new \Doctrine\Common\Cache\ArrayCache);
+        //$config->setQueryCacheImpl(new \Doctrine\Common\Cache\ArrayCache);
+        $config->setProxyDir(__DIR__ . '/Proxy');
+        $config->setProxyNamespace('Gedmo\Mapping\Proxy');
+        $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver());
+
+        $conn = array(
+            'driver' => 'pdo_sqlite',
+            'memory' => true,
+        );
+
+        //$config->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger());
+        
+        $evm = new \Doctrine\Common\EventManager();
+        $evm->addEventSubscriber(new \Gedmo\Translatable\TranslationListener());
+        $this->timestampable = new \Gedmo\Timestampable\TimestampableListener();
+        $evm->addEventSubscriber($this->timestampable);
+        $evm->addEventSubscriber(new \Gedmo\Sluggable\SluggableListener());
+        $evm->addEventSubscriber(new \Gedmo\Tree\TreeListener());
+        $this->em = \Doctrine\ORM\EntityManager::create($conn, $config, $evm);
+
+        $schemaTool = new \Doctrine\ORM\Tools\SchemaTool($this->em);
+        $schemaTool->dropSchema(array());
+        $schemaTool->createSchema(array(
+            $this->em->getClassMetadata(self::TEST_ENTITY_CATEGORY),
+            $this->em->getClassMetadata(self::TEST_ENTITY_TRANSLATION)
+        ));
+    }
+    
+    public function testNoCacheImplementationMapping()
+    {
+        $food = new BehavioralCategory();
+        $food->setTitle('Food');
+        $this->em->persist($food);
+        $this->em->flush();
+        // assertion checks if configuration is read correctly without cache driver
+        $conf = $this->timestampable->getConfiguration(
+            $this->em, 
+            self::TEST_ENTITY_CATEGORY
+        );
+        $this->assertEquals(0, count($conf));
+    }
+}