PageRenderTime 80ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php

https://github.com/gnat42/doctrine2
PHP | 108 lines | 80 code | 20 blank | 8 comment | 0 complexity | 08036086c04f4eeb021e2b0ed8a01527 MD5 | raw file
Possible License(s): LGPL-2.1
  1. <?php
  2. namespace Doctrine\Tests\ORM\Tools;
  3. use Doctrine\ORM\Tools\SchemaTool,
  4. Doctrine\ORM\Tools\EntityGenerator,
  5. Doctrine\ORM\Tools\Export\ClassMetadataExporter,
  6. Doctrine\ORM\Mapping\ClassMetadataInfo;
  7. require_once __DIR__ . '/../../TestInit.php';
  8. class EntityGeneratorTest extends \Doctrine\Tests\OrmTestCase
  9. {
  10. private $_generator;
  11. public function setUp()
  12. {
  13. $this->_generator = new EntityGenerator();
  14. $this->_generator->setGenerateAnnotations(true);
  15. $this->_generator->setGenerateStubMethods(true);
  16. $this->_generator->setRegenerateEntityIfExists(false);
  17. $this->_generator->setUpdateEntityIfExists(true);
  18. }
  19. public function testWriteEntityClass()
  20. {
  21. $metadata = new ClassMetadataInfo('EntityGeneratorBook');
  22. $metadata->table['name'] = 'book';
  23. $metadata->mapField(array('fieldName' => 'name', 'type' => 'string'));
  24. $metadata->mapField(array('fieldName' => 'status', 'type' => 'string', 'default' => 'published'));
  25. $metadata->mapField(array('fieldName' => 'id', 'type' => 'integer', 'id' => true));
  26. $metadata->mapOneToOne(array('fieldName' => 'author', 'targetEntity' => 'Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor', 'mappedBy' => 'book'));
  27. $joinColumns = array(
  28. array('name' => 'author_id', 'referencedColumnName' => 'id')
  29. );
  30. $metadata->mapManyToMany(array(
  31. 'fieldName' => 'comments',
  32. 'targetEntity' => 'Doctrine\Tests\ORM\Tools\EntityGeneratorComment',
  33. 'joinTable' => array(
  34. 'name' => 'book_comment',
  35. 'joinColumns' => array(array('name' => 'book_id', 'referencedColumnName' => 'id')),
  36. 'inverseJoinColumns' => array(array('name' => 'comment_id', 'referencedColumnName' => 'id')),
  37. ),
  38. ));
  39. $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO);
  40. $this->_generator->writeEntityClass($metadata, __DIR__);
  41. $path = __DIR__ . '/EntityGeneratorBook.php';
  42. $this->assertTrue(file_exists($path));
  43. require_once $path;
  44. return $metadata;
  45. }
  46. /**
  47. * @depends testWriteEntityClass
  48. * @param ClassMetadata $metadata
  49. */
  50. public function testGeneratedEntityClass($metadata)
  51. {
  52. $this->assertTrue(method_exists('\EntityGeneratorBook', 'getId'));
  53. $this->assertTrue(method_exists('\EntityGeneratorBook', 'setName'));
  54. $this->assertTrue(method_exists('\EntityGeneratorBook', 'getName'));
  55. $this->assertTrue(method_exists('\EntityGeneratorBook', 'setAuthor'));
  56. $this->assertTrue(method_exists('\EntityGeneratorBook', 'getAuthor'));
  57. $this->assertTrue(method_exists('\EntityGeneratorBook', 'getComments'));
  58. $this->assertTrue(method_exists('\EntityGeneratorBook', 'addComments'));
  59. $book = new \EntityGeneratorBook();
  60. $this->assertEquals('published', $book->getStatus());
  61. $book->setName('Jonathan H. Wage');
  62. $this->assertEquals('Jonathan H. Wage', $book->getName());
  63. $author = new EntityGeneratorAuthor();
  64. $book->setAuthor($author);
  65. $this->assertEquals($author, $book->getAuthor());
  66. $comment = new EntityGeneratorComment();
  67. $book->addComments($comment);
  68. $this->assertEquals(array($comment), $book->getComments());
  69. return $metadata;
  70. }
  71. /**
  72. * @depends testGeneratedEntityClass
  73. * @param ClassMetadata $metadata
  74. */
  75. public function testEntityUpdatingWorks($metadata)
  76. {
  77. $metadata->mapField(array('fieldName' => 'test', 'type' => 'string'));
  78. $this->_generator->writeEntityClass($metadata, __DIR__);
  79. $code = file_get_contents(__DIR__ . '/EntityGeneratorBook.php');
  80. $this->assertTrue(strstr($code, 'private $test;') !== false);
  81. $this->assertTrue(strstr($code, 'private $test;') !== false);
  82. $this->assertTrue(strstr($code, 'public function getTest(') !== false);
  83. $this->assertTrue(strstr($code, 'public function setTest(') !== false);
  84. unlink(__DIR__ . '/EntityGeneratorBook.php');
  85. }
  86. }
  87. class EntityGeneratorAuthor {}
  88. class EntityGeneratorComment {}