Explorar el Código

Integrating new data fixtures code.

Jonathan H. Wage hace 14 años
padre
commit
ff683a694e

+ 9 - 8
autoload.php.dist

@@ -6,13 +6,14 @@ use Symfony\Component\HttpFoundation\UniversalClassLoader;
 
 $loader = new UniversalClassLoader();
 $loader->registerNamespaces(array(
-    'Symfony'                    => __DIR__.'/src',
-    'Doctrine\\ODM\\MongoDB'     => __DIR__.'/vendor/doctrine-mongodb/lib',
-    'Doctrine\\Common'           => __DIR__.'/vendor/doctrine-common/lib',
-    'Doctrine\\DBAL\\Migrations' => __DIR__.'/vendor/doctrine-migrations/lib',
-    'Doctrine\\DBAL'             => __DIR__.'/vendor/doctrine-dbal/lib',
-    'Doctrine'                   => __DIR__.'/vendor/doctrine/lib',
-    'Zend'                       => __DIR__.'/vendor/zend/library',
+    'Symfony'                     => __DIR__.'/src',
+    'Doctrine\\ODM\\MongoDB'      => __DIR__.'/vendor/doctrine-mongodb/lib',
+    'Doctrine\\Common'            => __DIR__.'/vendor/doctrine-common/lib',
+    'Doctrine\\DBAL\\Migrations'  => __DIR__.'/vendor/doctrine-migrations/lib',
+    'Doctrine\\DBAL'              => __DIR__.'/vendor/doctrine-dbal/lib',
+    'Doctrine\\ORM\\DataFixtures' => __DIR__.'/vendor/doctrine-orm-data-fixtures',
+    'Doctrine'                    => __DIR__.'/vendor/doctrine/lib',
+    'Zend'                        => __DIR__.'/vendor/zend/library',
 ));
 $loader->registerPrefixes(array(
     'Swift_' => __DIR__.'/vendor/swiftmailer/lib/classes',
@@ -26,4 +27,4 @@ set_include_path(
     __DIR__.'/vendor/phing/classes'.PATH_SEPARATOR.
     __DIR__.'/vendor/propel/runtime/lib'.PATH_SEPARATOR.
     get_include_path()
-);
+);

+ 3 - 0
install_vendors.sh

@@ -12,6 +12,9 @@ cd vendor
 # Doctrine ORM
 git clone git://github.com/doctrine/doctrine2.git doctrine
 
+# Doctrine ORM Data Fixtures Extension
+git clone git://github.com/doctrine/orm-data-fixtures doctrine-orm-data-fixtures
+
 # Doctrine DBAL
 git clone git://github.com/doctrine/dbal.git doctrine-dbal
 

+ 13 - 129
src/Symfony/Bundle/DoctrineBundle/Command/LoadDataFixturesDoctrineCommand.php

@@ -39,6 +39,7 @@ class LoadDataFixturesDoctrineCommand extends DoctrineCommand
             ->setDescription('Load data fixtures to your database.')
             ->addOption('fixtures', null, InputOption::PARAMETER_OPTIONAL | InputOption::PARAMETER_IS_ARRAY, 'The directory or file to load data fixtures from.')
             ->addOption('append', null, InputOption::PARAMETER_OPTIONAL, 'Whether or not to append the data fixtures.', false)
+            ->addOption('em', null, InputOption::PARAMETER_REQUIRED, 'The entity manager to use for this command.')
             ->setHelp(<<<EOT
 The <info>doctrine:data:load</info> command loads data fixtures from your bundles:
 
@@ -57,7 +58,10 @@ EOT
 
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $defaultEm = $this->container->getDoctrine_ORM_EntityManagerService();
+        $emName = $input->getOption('em');
+        $emName = $emName ? $emName : 'default';
+        $emServiceName = sprintf('doctrine.orm.%s_entity_manager', $emName);
+        $em = $this->container->get($emServiceName);
         $dirOrFile = $input->getOption('fixtures');
         if ($dirOrFile) {
             $paths = is_array($dirOrFile) ? $dirOrFile : array($dirOrFile);
@@ -69,139 +73,19 @@ EOT
                 $namespace = str_replace('/', '\\', dirname($tmp));
                 $class = basename($tmp);
 
-                if (isset($bundleDirs[$namespace]) && is_dir($dir = $bundleDirs[$namespace].'/'.$class.'/Resources/data/fixtures/doctrine/orm')) {
+                if (isset($bundleDirs[$namespace]) && is_dir($dir = $bundleDirs[$namespace].'/'.$class.'/DataFixtures/ORM')) {
                     $paths[] = $dir;
                 }
             }
         }
 
-        $files = array();
+        $loader = new \Doctrine\Common\DataFixtures\Loader();
         foreach ($paths as $path) {
-            if (is_dir($path)) {
-                $finder = new Finder();
-                $found = iterator_to_array($finder
-                    ->files()
-                    ->name('*.php')
-                    ->in($path));
-            } else {
-                $found = array($path);
-            }
-            $files = array_merge($files, $found);
-        }
-
-        $ems = array();
-        $emEntities = array();
-        $files = array_unique($files);
-        foreach ($files as $file) {
-            $em = $defaultEm;
-            $output->writeln(sprintf('<info>Loading data fixtures from <comment>"%s"</comment></info>', $file));
-
-            $before = array_keys(get_defined_vars());
-            include($file);
-            $after = array_keys(get_defined_vars());
-            $new = array_diff($after, $before);
-            $params = $em->getConnection()->getParams();
-            $emName = isset($params['path']) ? $params['path']:$params['dbname'];
-
-            $ems[$emName] = $em;
-            $emEntities[$emName] = array();
-            $variables = array_values($new);
-
-            foreach ($variables as $variable) {
-                $value = $$variable;
-                if (!is_object($value) || $value instanceof \Doctrine\ORM\EntityManager) {
-                    continue;
-                }
-                $emEntities[$emName][] = $value;
-            }
-            foreach ($ems as $emName => $em) {
-                if (!$input->getOption('append')) {
-                    $output->writeln(sprintf('<info>Purging data from entity manager named <comment>"%s"</comment></info>', $emName));
-                    $this->purgeEntityManager($em);
-                }
-
-                $entities = $emEntities[$emName];
-                $numEntities = count($entities);
-                $output->writeln(sprintf('<info>Persisting "%s" '.($numEntities > 1 ? 'entities' : 'entity').'</info>', count($entities)));
-
-                foreach ($entities as $entity) {
-                    $em->persist($entity);
-                }
-                $output->writeln('<info>Flushing entity manager</info>');
-                $em->flush();
-            }
-        }
-    }
-
-    protected function purgeEntityManager(EntityManager $em)
-    {
-        $classes = array();
-        $metadatas = $em->getMetadataFactory()->getAllMetadata();
-
-        foreach ($metadatas as $metadata) {
-            if (!$metadata->isMappedSuperclass) {
-                $classes[] = $metadata;
-            }
+            $loader->loadFromDirectory($path);
         }
-
-        $commitOrder = $this->getCommitOrder($em, $classes);
-
-        // Drop association tables first
-        $orderedTables = $this->getAssociationTables($commitOrder);
-
-        // Drop tables in reverse commit order
-        for ($i = count($commitOrder) - 1; $i >= 0; --$i) {
-            $class = $commitOrder[$i];
-
-            if (($class->isInheritanceTypeSingleTable() && $class->name != $class->rootEntityName)
-                || $class->isMappedSuperclass) {
-                continue;
-            }
-
-            $orderedTables[] = $class->getTableName();
-        }
-
-        foreach($orderedTables as $tbl) {
-            $em->getConnection()->executeUpdate("DELETE FROM $tbl");
-        }
-    }
-
-    protected function getCommitOrder(EntityManager $em, array $classes)
-    {
-        $calc = new CommitOrderCalculator;
-
-        foreach ($classes as $class) {
-            $calc->addClass($class);
-
-            foreach ($class->associationMappings as $assoc) {
-                if ($assoc['isOwningSide']) {
-                    $targetClass = $em->getClassMetadata($assoc['targetEntity']);
-
-                    if ( ! $calc->hasClass($targetClass->name)) {
-                            $calc->addClass($targetClass);
-                    }
-
-                    // add dependency ($targetClass before $class)
-                    $calc->addDependency($targetClass, $class);
-                }
-            }
-        }
-
-        return $calc->getCommitOrder();
-    }
-
-    protected function getAssociationTables(array $classes)
-    {
-        $associationTables = array();
-
-        foreach ($classes as $class) {
-            foreach ($class->associationMappings as $assoc) {
-                if ($assoc['isOwningSide'] && $assoc['type'] == ClassMetadata::MANY_TO_MANY) {
-                    $associationTables[] = $assoc['joinTable']['name'];
-                }
-            }
-        }
-
-        return $associationTables;
+        $fixtures = $loader->getFixtures();
+        $purger = new \Doctrine\Common\DataFixtures\Purger\ORMPurger($em);
+        $executor = new \Doctrine\Common\DataFixtures\Executor\ORMExecutor($em, $purger);
+        $executor->execute($fixtures, $input->getOption('append'));
     }
-}
+}

+ 5 - 4
src/Symfony/Bundle/DoctrineBundle/Resources/config/dbal.xml

@@ -7,15 +7,16 @@
     <parameters>
         <parameter key="doctrine.dbal.default_connection">default</parameter>
         <parameter key="doctrine.dbal.connection_class">Doctrine\DBAL\Connection</parameter>
-
+        <parameter key="doctrine.dbal.logger.debug_class">Doctrine\DBAL\Logging\DebugStack</parameter>
+        <parameter key="doctrine.dbal.logger_class">Symfony\Bundle\DoctrineBundle\Logger\DbalLogger</parameter>
         <parameter key="doctrine.data_collector.class">Symfony\Bundle\DoctrineBundle\DataCollector\DoctrineDataCollector</parameter>
         <parameter key="doctrine.dbal.default_connection">default</parameter>
     </parameters>
 
     <services>
-        <service id="doctrine.dbal.logger.debug" class="Doctrine\DBAL\Logging\DebugStack" />
+        <service id="doctrine.dbal.logger.debug" class="%doctrine.dbal.logger.debug_class%" />
 
-        <service id="doctrine.dbal.logger" class="Symfony\Bundle\DoctrineBundle\Logger\DbalLogger">
+        <service id="doctrine.dbal.logger" class="%doctrine.dbal.logger_class%">
             <argument type="service" id="logger" on-invalid="null" />
         </service>
 
@@ -24,4 +25,4 @@
             <argument type="service" id="doctrine.dbal.logger" />
         </service>
     </services>
-</container>
+</container>

+ 4 - 5
src/Symfony/Bundle/DoctrineBundle/Resources/config/orm.xml

@@ -42,13 +42,12 @@
 
     <services>
         <!--- Annotation Metadata Driver Service -->
-        <service id="doctrine.orm.metadata_driver.annotation" class="Doctrine\ORM\Mapping\Driver\AnnotationDriver">
+        <service id="doctrine.orm.metadata_driver.annotation" class="%doctrine.orm.metadata.annotation_class%">
             <argument type="service" id="doctrine.orm.metadata_driver.annotation.reader" />
             <argument>%doctrine.orm.metadata_driver.entity_dirs%</argument>
         </service>
 
-        <service id="doctrine.orm.metadata_driver.annotation.reader" class="Doctrine\Common\Annotations\AnnotationReader">
-            <call method="setDefaultAnnotationNamespace"><argument>%doctrine.orm.metadata.annotation_default_namespace%</argument></call>
+        <service id="doctrine.orm.metadata_driver.annotation.reader" class="%doctrine.orm.metadata.annotation_reader_class%">
             <call method="setAnnotationNamespaceAlias">
               <argument>Doctrine\ORM\Mapping\</argument>
               <argument>orm</argument>
@@ -56,12 +55,12 @@
         </service>
 
         <!--- XML Metadata Driver Service -->
-        <service id="doctrine.orm.metadata_driver.xml" class="Doctrine\ORM\Mapping\Driver\XmlDriver">
+        <service id="doctrine.orm.metadata_driver.xml" class="%doctrine.orm.metadata.xml_class%">
             <argument>%doctrine.orm.metadata_driver.mapping_dirs%</argument>
         </service>
 
         <!--- YAML Metadata Driver Service -->
-        <service id="doctrine.orm.metadata_driver.yml" class="Doctrine\ORM\Mapping\Driver\YamlDriver">
+        <service id="doctrine.orm.metadata_driver.yml" class="%doctrine.orm.metadata.yml_class%">
             <argument>%doctrine.orm.metadata_driver.mapping_dirs%</argument>
         </service>
     </services>

+ 62 - 0
src/Symfony/Bundle/DoctrineBundle/Tests/ContainerTest.php

@@ -0,0 +1,62 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Bundle\DoctrineBundle\Tests;
+
+use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
+use Symfony\Bundle\DoctrineBundle\DependencyInjection\DoctrineExtension;
+use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
+
+class ContainerTest extends TestCase
+{
+    public function getContainer()
+    {
+        $container = new ContainerBuilder(new ParameterBag(array(
+            'kernel.bundle_dirs' => array(),
+            'kernel.bundles'     => array(),
+            'kernel.cache_dir'   => sys_get_temp_dir(),
+        )));
+        $loader = new DoctrineExtension();
+        $container->registerExtension($loader);
+        $loader->dbalLoad(array(), $container);
+        $loader->ormLoad(array(), $container);
+
+        $dumper = new PhpDumper($container);
+        $code = $dumper->dump();
+        eval(str_replace('<?php', null, $code));
+        return new \ProjectServiceContainer;
+    }
+
+    public function testContainer()
+    {
+        $container = $this->getContainer();
+        $this->assertInstanceOf('Doctrine\DBAL\Logging\DebugStack', $container->get('doctrine.dbal.logger.debug'));
+        $this->assertInstanceOf('Doctrine\DBAL\Logging\DebugStack', $container->get('doctrine.dbal.logger'));
+        $this->assertInstanceOf('Symfony\Bundle\DoctrineBundle\DataCollector\DoctrineDataCollector', $container->get('doctrine.data_collector'));
+        $this->assertInstanceOf('Doctrine\DBAL\Configuration', $container->get('doctrine.dbal.default_connection.configuration'));
+        $this->assertInstanceOf('Doctrine\Common\EventManager', $container->get('doctrine.dbal.default_connection.event_manager'));
+        $this->assertInstanceOf('Doctrine\DBAL\Connection', $container->get('doctrine.dbal.default_connection'));
+        $this->assertInstanceOf('Doctrine\ORM\Mapping\Driver\AnnotationDriver', $container->get('doctrine.orm.metadata_driver.annotation'));
+        $this->assertInstanceOf('Doctrine\Common\Annotations\AnnotationReader', $container->get('doctrine.orm.metadata_driver.annotation.reader'));
+        $this->assertInstanceOf('Doctrine\ORM\Mapping\Driver\XmlDriver', $container->get('doctrine.orm.metadata_driver.xml'));
+        $this->assertInstanceOf('Doctrine\ORM\Mapping\Driver\YamlDriver', $container->get('doctrine.orm.metadata_driver.yml'));
+        $this->assertInstanceOf('Doctrine\ORM\Configuration', $container->get('doctrine.orm.default_configuration'));
+        $this->assertInstanceOf('Doctrine\ORM\Mapping\Driver\DriverChain', $container->get('doctrine.orm.metadata_driver'));
+        $this->assertInstanceOf('Doctrine\Common\Cache\ArrayCache', $container->get('doctrine.orm.default_metadata_cache'));
+        $this->assertInstanceOf('Doctrine\Common\Cache\ArrayCache', $container->get('doctrine.orm.default_query_cache'));
+        $this->assertInstanceOf('Doctrine\Common\Cache\ArrayCache', $container->get('doctrine.orm.default_result_cache'));
+        $this->assertInstanceOf('Doctrine\ORM\EntityManager', $container->get('doctrine.orm.default_entity_manager'));
+        $this->assertInstanceOf('Doctrine\DBAL\Connection', $container->get('database_connection'));
+        $this->assertInstanceOf('Doctrine\ORM\EntityManager', $container->get('doctrine.orm.entity_manager'));
+    }
+}

+ 4 - 4
src/Symfony/Bundle/DoctrineMongoDBBundle/Command/CreateSchemaDoctrineODMCommand.php

@@ -21,16 +21,16 @@ class CreateSchemaDoctrineODMCommand extends CreateCommand
         parent::configure();
 
         $this
-            ->setName('doctrine:odm:schema:create')
+            ->setName('doctrine:mongodb:schema:create')
             ->addOption('dm', null, InputOption::PARAMETER_REQUIRED, 'The document manager to use for this command.')
             ->setHelp(<<<EOT
-The <info>doctrine:odm:schema:create</info> command creates the default document manager's schema:
+The <info>doctrine:mongodb:schema:create</info> command creates the default document manager's schema:
 
-  <info>./symfony doctrine:odm:schema:create</info>
+  <info>./symfony doctrine:mongodb:schema:create</info>
 
 You can also optionally specify the name of a document manager to create the schema for:
 
-  <info>./symfony doctrine:odm:schema:create --dm=default</info>
+  <info>./symfony doctrine:mongodb:schema:create --dm=default</info>
 EOT
         );
     }

+ 4 - 4
src/Symfony/Bundle/DoctrineMongoDBBundle/Command/DropSchemaDoctrineODMCommand.php

@@ -21,16 +21,16 @@ class DropSchemaDoctrineODMCommand extends DropCommand
         parent::configure();
 
         $this
-            ->setName('doctrine:odm:schema:drop')
+            ->setName('doctrine:mongodb:schema:drop')
             ->addOption('dm', null, InputOption::PARAMETER_REQUIRED, 'The document manager to use for this command.')
             ->setHelp(<<<EOT
-The <info>doctrine:odm:schema:drop</info> command drops the default document manager's schema:
+The <info>doctrine:mongodb:schema:drop</info> command drops the default document manager's schema:
 
-  <info>./symfony doctrine:odm:schema:drop</info>
+  <info>./symfony doctrine:mongodb:schema:drop</info>
 
 You can also optionally specify the name of a document manager to drop the schema for:
 
-  <info>./symfony doctrine:odm:schema:drop --dm=default</info>
+  <info>./symfony doctrine:mongodb:schema:drop --dm=default</info>
 EOT
         );
     }

+ 91 - 0
src/Symfony/Bundle/DoctrineMongoDBBundle/Command/LoadDataFixturesDoctrineODMCommand.php

@@ -0,0 +1,91 @@
+<?php
+
+namespace Symfony\Bundle\DoctrineMongoDBBundle\Command;
+
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Output\Output;
+use Symfony\Component\Finder\Finder;
+use Symfony\Bundle\FrameworkBundle\Util\Filesystem;
+use Doctrine\Common\Cli\Configuration;
+use Doctrine\Common\Cli\CliController as DoctrineCliController;
+use Doctrine\ODM\MongoDB\DocumentManager;
+use Doctrine\ODM\MongoDB\Internal\CommitOrderCalculator;
+use Doctrine\ODM\MongoDB\Mapping\ClassMetadata;
+
+/*
+ * This file is part of the Symfony framework.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+/**
+ * Load data fixtures from bundles.
+ *
+ * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
+ * @author     Jonathan H. Wage <jonwage@gmail.com>
+ */
+class LoadDataFixturesDoctrineODMCommand extends DoctrineODMCommand
+{
+    protected function configure()
+    {
+        $this
+            ->setName('doctrine:mongodb:data:load')
+            ->setDescription('Load data fixtures to your database.')
+            ->addOption('fixtures', null, InputOption::PARAMETER_OPTIONAL | InputOption::PARAMETER_IS_ARRAY, 'The directory or file to load data fixtures from.')
+            ->addOption('append', null, InputOption::PARAMETER_OPTIONAL, 'Whether or not to append the data fixtures.', false)
+            ->addOption('dm', null, InputOption::PARAMETER_REQUIRED, 'The document manager to use for this command.')
+            ->setHelp(<<<EOT
+The <info>doctrine:mongodb:data:load</info> command loads data fixtures from your bundles:
+
+  <info>./symfony doctrine:mongodb:data:load</info>
+
+You can also optionally specify the path to fixtures with the <info>--fixtures</info> option:
+
+  <info>./symfony doctrine:mongodb:data:load --fixtures=/path/to/fixtures1 --fixtures=/path/to/fixtures2</info>
+
+If you want to append the fixtures instead of flushing the database first you can use the <info>--append</info> option:
+
+  <info>./symfony doctrine:mongodb:data:load --append</info>
+EOT
+        );
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $dmName = $input->getOption('dm');
+        $dmName = $dmName ? $dmName : 'default';
+        $dmServiceName = sprintf('doctrine.odm.mongodb.%s_document_manager', $dmName);
+        $dm = $this->container->get($dmServiceName);
+        $dirOrFile = $input->getOption('fixtures');
+        if ($dirOrFile) {
+            $paths = is_array($dirOrFile) ? $dirOrFile : array($dirOrFile);
+        } else {
+            $paths = array();
+            $bundleDirs = $this->container->getKernelService()->getBundleDirs();
+            foreach ($this->container->getKernelService()->getBundles() as $bundle) {
+                $tmp = dirname(str_replace('\\', '/', get_class($bundle)));
+                $namespace = str_replace('/', '\\', dirname($tmp));
+                $class = basename($tmp);
+
+                if (isset($bundleDirs[$namespace]) && is_dir($dir = $bundleDirs[$namespace].'/'.$class.'/DataFixtures/MongoDB')) {
+                    $paths[] = $dir;
+                }
+            }
+        }
+
+        $loader = new \Doctrine\Common\DataFixtures\Loader();
+        foreach ($paths as $path) {
+            $loader->loadFromDirectory($path);
+        }
+        $fixtures = $loader->getFixtures();
+        $purger = new \Doctrine\Common\DataFixtures\Purger\MongoDBPurger($dm);
+        $executor = new \Doctrine\Common\DataFixtures\Executor\MongoDBExecutor($dm, $purger);
+        $executor->execute($fixtures, $input->getOption('append'));
+    }
+}

+ 1 - 2
src/Symfony/Bundle/DoctrineMongoDBBundle/Resources/config/mongodb.xml

@@ -56,7 +56,6 @@
     </service>
     <service id="doctrine.odm.mongodb.metadata.annotation_reader" class="%doctrine.odm.mongodb.metadata.annotation_reader_class%">
       <argument type="service" id="doctrine.odm.mongodb.cache" />
-      <call method="setDefaultAnnotationNamespace"><argument>%doctrine.odm.mongodb.metadata.annotation_default_namespace%</argument></call>
       <call method="setAnnotationNamespaceAlias">
         <argument>Doctrine\ODM\MongoDB\Mapping\</argument>
         <argument>mongodb</argument>
@@ -77,4 +76,4 @@
       <argument type="service" id="doctrine.odm.mongodb.logger" />
     </service>
   </services>
-</container>
+</container>

+ 58 - 0
src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/ContainerTest.php

@@ -0,0 +1,58 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Bundle\DoctrineBundle\Tests;
+
+use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
+use Symfony\Bundle\DoctrineMongoDBBundle\DependencyInjection\DoctrineMongoDBExtension;
+use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
+
+class ContainerTest extends TestCase
+{
+    public function getContainer()
+    {
+        $container = new ContainerBuilder(new ParameterBag(array(
+            'kernel.bundle_dirs' => array(),
+            'kernel.bundles'     => array(),
+            'kernel.cache_dir'   => sys_get_temp_dir(),
+        )));
+        $loader = new DoctrineMongoDBExtension();
+        $container->registerExtension($loader);
+        $loader->mongodbLoad(array(), $container);
+
+        $dumper = new PhpDumper($container);
+        $code = $dumper->dump();
+        eval(str_replace('<?php', null, $code));
+        return new \ProjectServiceContainer;
+    }
+
+    public function testContainer()
+    {
+        $container = $this->getContainer();
+        $this->assertInstanceOf('Doctrine\ODM\MongoDB\Mapping\Driver\DriverChain', $container->get('doctrine.odm.mongodb.metadata.chain'));
+        $this->assertInstanceOf('Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver', $container->get('doctrine.odm.mongodb.metadata.annotation'));
+        $this->assertInstanceOf('Doctrine\Common\Annotations\AnnotationReader', $container->get('doctrine.odm.mongodb.metadata.annotation_reader'));
+        $this->assertInstanceOf('Doctrine\ODM\MongoDB\Mapping\Driver\XmlDriver', $container->get('doctrine.odm.mongodb.metadata.xml'));
+        $this->assertInstanceOf('Doctrine\ODM\MongoDB\Mapping\Driver\YamlDriver', $container->get('doctrine.odm.mongodb.metadata.yml'));
+        $this->assertInstanceOf('Doctrine\Common\Cache\ArrayCache', $container->get('doctrine.odm.mongodb.cache.array'));
+        $this->assertInstanceOf('Symfony\Bundle\DoctrineMongoDBBundle\Logger\DoctrineMongoDBLogger', $container->get('doctrine.odm.mongodb.logger'));
+        $this->assertInstanceOf('Symfony\Bundle\DoctrineMongoDBBundle\DataCollector\DoctrineMongoDBDataCollector', $container->get('doctrine.odm.mongodb.data_collector'));
+        $this->assertInstanceOf('Doctrine\ODM\MongoDB\Mongo', $container->get('doctrine.odm.mongodb.default_connection'));
+        $this->assertInstanceOf('Doctrine\ODM\MongoDB\Configuration', $container->get('doctrine.odm.mongodb.default_configuration'));
+        $this->assertInstanceOf('Doctrine\ODM\MongoDB\Mapping\Driver\DriverChain', $container->get('doctrine.odm.mongodb.metadata'));
+        $this->assertInstanceOf('Doctrine\Common\Cache\ArrayCache', $container->get('doctrine.odm.mongodb.default_metadata_cache'));
+        $this->assertInstanceOf('Doctrine\ODM\MongoDB\DocumentManager', $container->get('doctrine.odm.mongodb.default_document_manager'));
+        $this->assertInstanceOf('Doctrine\Common\Cache\ArrayCache', $container->get('doctrine.odm.mongodb.cache'));
+        $this->assertInstanceOf('Doctrine\ODM\MongoDB\DocumentManager', $container->get('doctrine.odm.mongodb.document_manager'));
+    }
+}

+ 3 - 0
update_vendors.sh

@@ -5,6 +5,9 @@ CURRENT=`pwd`/vendor
 # Doctrine ORM
 cd $CURRENT/doctrine && git pull
 
+# Doctrine ORM Data Fixtures Extension
+cd $CURRENT/doctrine-orm-data-fixtures && git pull
+
 # Doctrine DBAL
 cd $CURRENT/doctrine-dbal && git pull