EntityGeneratorTest.php 4.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
<?php

namespace Doctrine\Tests\ORM\Tools;

use Doctrine\ORM\Tools\SchemaTool,
    Doctrine\ORM\Tools\EntityGenerator,
    Doctrine\ORM\Tools\Export\ClassMetadataExporter,
    Doctrine\ORM\Mapping\ClassMetadataInfo;

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

class EntityGeneratorTest extends \Doctrine\Tests\OrmTestCase
{
14 15 16 17 18 19 20 21 22 23 24
    private $_generator;

    public function setUp()
    {
        $this->_generator = new EntityGenerator();
        $this->_generator->setGenerateAnnotations(true);
        $this->_generator->setGenerateStubMethods(true);
        $this->_generator->setRegenerateEntityIfExists(false);
        $this->_generator->setUpdateEntityIfExists(true);
    }

25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
    public function testWriteEntityClass()
    {
        $metadata = new ClassMetadataInfo('EntityGeneratorBook');
        $metadata->primaryTable['name'] = 'book';
        $metadata->mapField(array('fieldName' => 'name', 'type' => 'varchar'));
        $metadata->mapField(array('fieldName' => 'id', 'type' => 'integer', 'id' => true));
        $metadata->mapOneToOne(array('fieldName' => 'other', 'targetEntity' => 'Other', 'mappedBy' => 'this'));
        $joinColumns = array(
            array('name' => 'other_id', 'referencedColumnName' => 'id')
        );
        $metadata->mapOneToOne(array('fieldName' => 'association', 'targetEntity' => 'Other', 'joinColumns' => $joinColumns));
        $metadata->mapManyToMany(array(
            'fieldName' => 'author',
            'targetEntity' => 'Author',
            'joinTable' => array(
                'name' => 'book_author',
                'joinColumns' => array(array('name' => 'bar_id', 'referencedColumnName' => 'id')),
                'inverseJoinColumns' => array(array('name' => 'baz_id', 'referencedColumnName' => 'id')),
            ),
        ));
        $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO);

47
        $this->_generator->writeEntityClass($metadata, __DIR__);
48 49 50 51

        $path = __DIR__ . '/EntityGeneratorBook.php';
        $this->assertTrue(file_exists($path));
        require_once $path;
52 53

        return $metadata;
54 55 56 57
    }

    /**
     * @depends testWriteEntityClass
58
     * @param ClassMetadata $metadata
59
     */
60
    public function testGeneratedEntityClassMethods($metadata)
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
    {
        $this->assertTrue(method_exists('\EntityGeneratorBook', 'getId'));
        $this->assertTrue(method_exists('\EntityGeneratorBook', 'setName'));
        $this->assertTrue(method_exists('\EntityGeneratorBook', 'getName'));
        $this->assertTrue(method_exists('\EntityGeneratorBook', 'setOther'));
        $this->assertTrue(method_exists('\EntityGeneratorBook', 'getOther'));
        $this->assertTrue(method_exists('\EntityGeneratorBook', 'setAssociation'));
        $this->assertTrue(method_exists('\EntityGeneratorBook', 'getAssociation'));
        $this->assertTrue(method_exists('\EntityGeneratorBook', 'getAuthor'));
        $this->assertTrue(method_exists('\EntityGeneratorBook', 'addAuthor'));

        $book = new \EntityGeneratorBook();

        $book->setName('Jonathan H. Wage');
        $this->assertEquals('Jonathan H. Wage', $book->getName());

        $book->setOther('Other');
        $this->assertEquals('Other', $book->getOther());

        $book->setAssociation('Test');
        $this->assertEquals('Test', $book->getAssociation());

        $book->addAuthor('Test');
        $this->assertEquals(array('Test'), $book->getAuthor());

86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
        return $metadata;
    }

    /**
     * @depends testGeneratedEntityClassMethods
     * @param ClassMetadata $metadata
     */
    public function testEntityUpdatingWorks($metadata)
    {
        $metadata->mapField(array('fieldName' => 'test', 'type' => 'varchar'));
        $this->_generator->writeEntityClass($metadata, __DIR__);

        $code = file_get_contents(__DIR__ . '/EntityGeneratorBook.php');
        $this->assertTrue(strstr($code, 'private $test;') !== false);
        $this->assertTrue(strstr($code, 'private $test;') !== false);
        $this->assertTrue(strstr($code, 'public function getTest(') !== false);
        $this->assertTrue(strstr($code, 'public function setTest(') !== false);

104 105 106
        unlink(__DIR__ . '/EntityGeneratorBook.php');
    }
}