ClassMetadataFactoryTest.php 2.68 KB
Newer Older
1 2
<?php

3 4 5 6 7 8
namespace Doctrine\Tests\ORM\Mapping;

use Doctrine\Tests\Mocks\MetadataDriverMock;
use Doctrine\Tests\Mocks\DatabasePlatformMock;
use Doctrine\ORM\Mapping\ClassMetadata;

9
require_once __DIR__ . '/../../TestInit.php';
10

11 12
class ClassMetadataFactoryTest extends \Doctrine\Tests\OrmTestCase
{
romanb's avatar
romanb committed
13

14 15
    public function testGetMetadataForSingleClass()
    {
16 17
        $mockPlatform = new DatabasePlatformMock();
        $mockDriver = new MetadataDriverMock();
18 19
        $mockPlatform->setPrefersSequences(true);
        $mockPlatform->setPrefersIdentityColumns(false);
romanb's avatar
romanb committed
20 21

        // Self-made metadata
22
        $cm1 = new ClassMetadata('Doctrine\Tests\ORM\Mapping\TestEntity1');
romanb's avatar
romanb committed
23
        // Add a mapped field
romanb's avatar
romanb committed
24
        $cm1->mapField(array('fieldName' => 'name', 'type' => 'varchar'));
25 26
        // Add a mapped field
        $cm1->mapField(array('fieldName' => 'id', 'type' => 'integer', 'id' => true));
romanb's avatar
romanb committed
27 28 29 30 31 32 33
        // and a mapped association
        $cm1->mapOneToOne(array('fieldName' => 'other', 'targetEntity' => 'Other', 'mappedBy' => 'this'));
        // and an id generator type
        $cm1->setIdGeneratorType('auto');

        // SUT
        $cmf = new ClassMetadataFactoryTestSubject($mockDriver, $mockPlatform);
34
        $cmf->setMetadataForClass('Doctrine\Tests\ORM\Mapping\TestEntity1', $cm1);
romanb's avatar
romanb committed
35 36 37 38 39 40 41 42 43

        // Prechecks
        $this->assertEquals(array(), $cm1->getParentClasses());
        $this->assertEquals('none', $cm1->getInheritanceType());
        $this->assertTrue($cm1->hasField('name'));
        $this->assertEquals(1, count($cm1->getAssociationMappings()));
        $this->assertEquals('auto', $cm1->getIdGeneratorType());

        // Go
44
        $cm1 = $cmf->getMetadataFor('Doctrine\Tests\ORM\Mapping\TestEntity1');
romanb's avatar
romanb committed
45 46 47

        $this->assertEquals(array(), $cm1->getParentClasses());
        $this->assertTrue($cm1->hasField('name'));
48
        $this->assertEquals('sequence', $cm1->getIdGeneratorType());
49 50 51 52
    }
}

/* Test subject class with overriden factory method for mocking purposes */
53 54
class ClassMetadataFactoryTestSubject extends \Doctrine\ORM\Mapping\ClassMetadataFactory
{
55 56
    private $_mockMetadata = array();
    private $_requestedClasses = array();
57

58
    /** @override */
59 60
    protected function _newClassMetadataInstance($className)
    {
61 62 63 64 65 66
        $this->_requestedClasses[] = $className;
        if ( ! isset($this->_mockMetadata[$className])) {
            throw new InvalidArgumentException("No mock metadata found for class $className.");
        }
        return $this->_mockMetadata[$className];
    }
67 68 69

    public function setMetadataForClass($className, $metadata)
    {
70 71
        $this->_mockMetadata[$className] = $metadata;
    }
72 73 74 75 76

    public function getRequestedClasses()
    {
        return $this->_requestedClasses;
    }
77
}