Rajout de doctrine/orm
[zf2.biz/application_blanche.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Functional / OneToOneUnidirectionalAssociationTest.php
diff --git a/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php b/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php
new file mode 100644 (file)
index 0000000..1ffae6b
--- /dev/null
@@ -0,0 +1,125 @@
+<?php
+
+namespace Doctrine\Tests\ORM\Functional;
+
+use Doctrine\Tests\Models\ECommerce\ECommerceProduct;
+use Doctrine\Tests\Models\ECommerce\ECommerceShipping;
+use Doctrine\ORM\Mapping\AssociationMapping;
+use Doctrine\ORM\Mapping\ClassMetadata;
+use Doctrine\ORM\Query;
+
+require_once __DIR__ . '/../../TestInit.php';
+
+/**
+ * Tests a unidirectional one-to-one association mapping (without inheritance).
+ * Inverse side is not present.
+ */
+class OneToOneUnidirectionalAssociationTest extends \Doctrine\Tests\OrmFunctionalTestCase
+{
+    private $product;
+    private $shipping;
+
+    protected function setUp()
+    {
+        $this->useModelSet('ecommerce');
+        parent::setUp();
+        $this->product = new ECommerceProduct();
+        $this->product->setName('Doctrine 2 Manual');
+        $this->shipping = new ECommerceShipping();
+        $this->shipping->setDays('5');
+    }
+
+    public function testSavesAOneToOneAssociationWithCascadeSaveSet() {
+        $this->product->setShipping($this->shipping);
+        $this->_em->persist($this->product);
+        $this->_em->flush();
+
+        $this->assertForeignKeyIs($this->shipping->getId());
+    }
+
+    public function testRemovesOneToOneAssociation()
+    {
+        $this->product->setShipping($this->shipping);
+        $this->_em->persist($this->product);
+        $this->product->removeShipping();
+
+        $this->_em->flush();
+
+        $this->assertForeignKeyIs(null);
+    }
+
+    public function _testEagerLoad()
+    {
+        $this->_createFixture();
+
+        $query = $this->_em->createQuery('select p, s from Doctrine\Tests\Models\ECommerce\ECommerceProduct p left join p.shipping s');
+        $result = $query->getResult();
+        $product = $result[0];
+
+        $this->assertInstanceOf('Doctrine\Tests\Models\ECommerce\ECommerceShipping', $product->getShipping());
+        $this->assertEquals(1, $product->getShipping()->getDays());
+    }
+
+    public function testLazyLoadsObjects() {
+        $this->_createFixture();
+        $metadata = $this->_em->getClassMetadata('Doctrine\Tests\Models\ECommerce\ECommerceProduct');
+        $metadata->associationMappings['shipping']['fetch'] = ClassMetadata::FETCH_LAZY;
+
+        $query = $this->_em->createQuery('select p from Doctrine\Tests\Models\ECommerce\ECommerceProduct p');
+        $result = $query->getResult();
+        $product = $result[0];
+
+        $this->assertInstanceOf('Doctrine\Tests\Models\ECommerce\ECommerceShipping', $product->getShipping());
+        $this->assertEquals(1, $product->getShipping()->getDays());
+    }
+
+    public function testDoesNotLazyLoadObjectsIfConfigurationDoesNotAllowIt() {
+        $this->_createFixture();
+
+        $query = $this->_em->createQuery('select p from Doctrine\Tests\Models\ECommerce\ECommerceProduct p');
+        $query->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true);
+
+        $result = $query->getResult();
+        $product = $result[0];
+
+        $this->assertNull($product->getShipping());
+    }
+
+    protected function _createFixture()
+    {
+        $product = new ECommerceProduct;
+        $product->setName('Php manual');
+        $shipping = new ECommerceShipping;
+        $shipping->setDays('1');
+        $product->setShipping($shipping);
+
+        $this->_em->persist($product);
+
+        $this->_em->flush();
+        $this->_em->clear();
+    }
+
+    public function assertForeignKeyIs($value) {
+        $foreignKey = $this->_em->getConnection()->executeQuery(
+            'SELECT shipping_id FROM ecommerce_products WHERE id=?',
+            array($this->product->getId())
+        )->fetchColumn();
+        $this->assertEquals($value, $foreignKey);
+    }
+
+    /**
+     * @group DDC-762
+     */
+    public function testNullForeignKey()
+    {
+        $product = new ECommerceProduct();
+        $product->setName('Doctrine 2 Manual');
+
+        $this->_em->persist($product);
+        $this->_em->flush();
+
+        $product = $this->_em->find(get_class($product), $product->getId());
+
+        $this->assertNull($product->getShipping());
+    }
+}