AbstractMappingDriverTest.php 6.77 KB
Newer Older
1 2 3 4
<?php

namespace Doctrine\Tests\ORM\Mapping;

5 6 7
use Doctrine\ORM\Mapping\ClassMetadata,
    Doctrine\ORM\Mapping\Driver\XmlDriver,
    Doctrine\ORM\Mapping\Driver\YamlDriver;
8 9

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

abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase
12
{
13 14 15
    abstract protected function _loadDriver();

    public function testLoadMapping()
16
    {
17
        $className = 'Doctrine\Tests\ORM\Mapping\User';
18 19
        $mappingDriver = $this->_loadDriver();

20
        $class = new ClassMetadata($className);
21 22 23 24 25 26

        $this->assertFalse($mappingDriver->isTransient($className));

        $mappingDriver->loadMetadataForClass($className, $class);

        return $class;
27
    }
28 29 30 31 32 33

    /**
     * @depends testLoadMapping
     * @param ClassMetadata $class
     */
    public function testEntityTableNameAndInheritance($class)
34
    {
35 36
        $this->assertEquals('cms_users', $class->getTableName());
        $this->assertEquals(ClassMetadata::INHERITANCE_TYPE_NONE, $class->getInheritanceType());
37 38 39 40 41 42 43 44 45 46 47

        return $class;
    }

    /**
     * @depends testEntityTableNameAndInheritance
     * @param ClassMetadata $class
     */
    public function testFieldMappings($class)
    {
        $this->assertEquals(3, count($class->fieldMappings));
48 49
        $this->assertTrue(isset($class->fieldMappings['id']));
        $this->assertTrue(isset($class->fieldMappings['name']));
50 51
        $this->assertTrue(isset($class->fieldMappings['email']));

52
        $this->assertEquals('string', $class->fieldMappings['name']['type']);
53 54
        $this->assertTrue($class->fieldMappings['name']['nullable']);
        $this->assertTrue($class->fieldMappings['name']['unique']);
55 56 57 58 59 60 61 62 63 64 65
        $this->assertEquals("user_email", $class->fieldMappings['email']['columnName']);

        return $class;
    }

    /**
     * @depends testFieldMappings
     * @param ClassMetadata $class
     */
    public function testIdentifier($class)
    {
66 67
        $this->assertEquals(array('id'), $class->identifier);
        $this->assertEquals(ClassMetadata::GENERATOR_TYPE_AUTO, $class->getIdGeneratorType());
68 69 70 71 72 73 74 75 76 77

        return $class;
    }

    /**
     * @depends testIdentifier
     * @param ClassMetadata $class
     */
    public function testAssocations($class)
    {
78 79
        $this->assertEquals(3, count($class->associationMappings));
        $this->assertEquals(1, count($class->inverseMappings));
80 81 82 83 84 85 86 87 88 89

        return $class;
    }

    /**
     * @depends testAssocations
     * @param ClassMetadata $class
     */
    public function testOwningOneToOneAssocation($class)
    {
90 91 92
        $this->assertTrue($class->associationMappings['address'] instanceof \Doctrine\ORM\Mapping\OneToOneMapping);
        $this->assertTrue(isset($class->associationMappings['address']));
        $this->assertTrue($class->associationMappings['address']->isOwningSide);
93 94 95 96 97 98
        // Check cascading
        $this->assertTrue($class->associationMappings['address']->isCascadeRemove);
        $this->assertFalse($class->associationMappings['address']->isCascadePersist);
        $this->assertFalse($class->associationMappings['address']->isCascadeRefresh);
        $this->assertFalse($class->associationMappings['address']->isCascadeDetach);
        $this->assertFalse($class->associationMappings['address']->isCascadeMerge);
99 100 101 102 103 104 105 106 107 108

        return $class;
    }

    /**
     * @depends testOwningOneToOneAssocation
     * @param ClassMetadata $class
     */
    public function testInverseOneToManyAssociation($class)
    {
109 110 111 112
        $this->assertTrue($class->associationMappings['phonenumbers'] instanceof \Doctrine\ORM\Mapping\OneToManyMapping);
        $this->assertTrue(isset($class->associationMappings['phonenumbers']));
        $this->assertFalse($class->associationMappings['phonenumbers']->isOwningSide);
        $this->assertTrue($class->associationMappings['phonenumbers']->isInverseSide());
113
        $this->assertTrue($class->associationMappings['phonenumbers']->isCascadePersist);
114 115 116 117
        $this->assertFalse($class->associationMappings['phonenumbers']->isCascadeRemove);
        $this->assertFalse($class->associationMappings['phonenumbers']->isCascadeRefresh);
        $this->assertFalse($class->associationMappings['phonenumbers']->isCascadeDetach);
        $this->assertFalse($class->associationMappings['phonenumbers']->isCascadeMerge);
118 119 120 121 122 123 124 125 126 127

        return $class;
    }

    /**
     * @depends testInverseOneToManyAssociation
     * @param ClassMetadata $class
     */
    public function testManyToManyAssociationWithCascadeAll($class)
    {
128 129 130
        $this->assertTrue($class->associationMappings['groups'] instanceof \Doctrine\ORM\Mapping\ManyToManyMapping);
        $this->assertTrue(isset($class->associationMappings['groups']));
        $this->assertTrue($class->associationMappings['groups']->isOwningSide);
131 132 133 134 135 136
        // Make sure that cascade-all works as expected
        $this->assertTrue($class->associationMappings['groups']->isCascadeRemove);
        $this->assertTrue($class->associationMappings['groups']->isCascadePersist);
        $this->assertTrue($class->associationMappings['groups']->isCascadeRefresh);
        $this->assertTrue($class->associationMappings['groups']->isCascadeDetach);
        $this->assertTrue($class->associationMappings['groups']->isCascadeMerge);
137

138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
        return $class;
    }

    /**
     * @depends testManyToManyAssociationWithCascadeAll
     * @param ClassMetadata $class
     */
    public function testLifecycleCallbacks($class)
    {
        $this->assertEquals(count($class->lifecycleCallbacks), 2);
        $this->assertEquals($class->lifecycleCallbacks['prePersist'][0], 'doStuffOnPrePersist');
        $this->assertEquals($class->lifecycleCallbacks['postPersist'][0], 'doStuffOnPostPersist');

        return $class;
    }

    /**
     * @depends testLifecycleCallbacks
     * @param ClassMetadata $class
     */
    public function testJoinColumnUniqueAndNullable($class)
    {
160 161 162
        // Non-Nullability of Join Column
        $this->assertFalse($class->associationMappings['groups']->joinTable['joinColumns'][0]['nullable']);
        $this->assertFalse($class->associationMappings['groups']->joinTable['joinColumns'][0]['unique']);
163 164 165 166 167 168 169 170 171 172 173 174 175 176

        return $class;
    }

    /**
     * @depends testJoinColumnUniqueAndNullable
     * @param ClassMetadata $class
     */
    public function testColumnDefinition($class)
    {
        $this->assertEquals("CHAR(32) NOT NULL", $class->fieldMappings['email']['columnDefinition']);
        $this->assertEquals("INT NULL", $class->associationMappings['groups']->joinTable['inverseJoinColumns'][0]['columnDefinition']);

        return $class;
177
    }
178
}
179

180 181 182
class User {
    private $id;
    private $name;
183
    private $email;
184 185 186
    private $address;
    private $phonenumbers;
    private $groups;
187

188
    // ... rest of code omitted, irrelevant for the mapping tests
189 190 191 192 193 194 195

    public function doStuffOnPrePersist()
    {
    }

    public function doStuffOnPostPersist()
    {
196

197
    }
198
}