From 39f732ab9101ca58f3a8a21a2768680f449f080e Mon Sep 17 00:00:00 2001 From: Benjamin Eberlei Date: Tue, 21 Sep 2010 23:53:26 +0200 Subject: [PATCH] Refactored DDC-671 model to become a first-class modelset, we dont have one with mapped superclass yet. --- .../DirectoryTree/AbstractContentItem.php | 49 +++++++++++++++++++ .../Tests/Models/DirectoryTree/Directory.php | 39 +++++++++++++++ .../Tests/Models/DirectoryTree/File.php | 30 ++++++++++++ .../ORM/Mapping/AbstractMappingDriverTest.php | 45 ----------------- .../ORM/Mapping/AnnotationDriverTest.php | 27 +++++----- .../ORM/Mapping/YamlMappingDriverTest.php | 27 +++++----- ....DirectoryTree.AbstractContentItem.dcm.yml | 14 ++++++ ...ts.Models.DirectoryTree.Directory.dcm.yml} | 9 ++-- ...e.Tests.Models.DirectoryTree.File.dcm.yml} | 3 +- ...ts.ORM.Mapping.AbstractContentItem.dcm.yml | 16 ------ 10 files changed, 159 insertions(+), 100 deletions(-) create mode 100644 tests/Doctrine/Tests/Models/DirectoryTree/AbstractContentItem.php create mode 100644 tests/Doctrine/Tests/Models/DirectoryTree/Directory.php create mode 100644 tests/Doctrine/Tests/Models/DirectoryTree/File.php create mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.AbstractContentItem.dcm.yml rename tests/Doctrine/Tests/ORM/Mapping/yaml/{Doctrine.Tests.ORM.Mapping.Directory.dcm.yml => Doctrine.Tests.Models.DirectoryTree.Directory.dcm.yml} (55%) rename tests/Doctrine/Tests/ORM/Mapping/yaml/{Doctrine.Tests.ORM.Mapping.Page.dcm.yml => Doctrine.Tests.Models.DirectoryTree.File.dcm.yml} (55%) delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.AbstractContentItem.dcm.yml diff --git a/tests/Doctrine/Tests/Models/DirectoryTree/AbstractContentItem.php b/tests/Doctrine/Tests/Models/DirectoryTree/AbstractContentItem.php new file mode 100644 index 000000000..16a212c61 --- /dev/null +++ b/tests/Doctrine/Tests/Models/DirectoryTree/AbstractContentItem.php @@ -0,0 +1,49 @@ +. + */ + +namespace Doctrine\Tests\Models\DirectoryTree; + +/** + * @MappedSuperclass + */ +abstract class AbstractContentItem +{ + /** + * @Id @Column(type="integer") @GeneratedValue + */ + private $id; + + /** + * @ManyToOne(targetEntity="Directory") + */ + protected $parentDirectory; + + /** @column(type="string") */ + protected $name; + + public function __get($name) + { + return $this->$name; + } + + public function __set($name, $value) + { + $this->$name = $value; + } +} diff --git a/tests/Doctrine/Tests/Models/DirectoryTree/Directory.php b/tests/Doctrine/Tests/Models/DirectoryTree/Directory.php new file mode 100644 index 000000000..d337389ef --- /dev/null +++ b/tests/Doctrine/Tests/Models/DirectoryTree/Directory.php @@ -0,0 +1,39 @@ +. + */ + +namespace Doctrine\Tests\Models\DirectoryTree; + +/** + * @Entity + */ +class Directory extends AbstractContentItem +{ + /** + * @OneToMany(targetEntity="Directory", mappedBy="parent") + */ + protected $subDirectories; + /** + * @OneToMany(targetEntity="File", mappedBy="parent") + */ + protected $containedFiles; + /** + * @Column(type="string") + */ + protected $path; +} diff --git a/tests/Doctrine/Tests/Models/DirectoryTree/File.php b/tests/Doctrine/Tests/Models/DirectoryTree/File.php new file mode 100644 index 000000000..bae6323e3 --- /dev/null +++ b/tests/Doctrine/Tests/Models/DirectoryTree/File.php @@ -0,0 +1,30 @@ +. + */ + + +namespace Doctrine\Tests\Models\DirectoryTree; + +/** + * @Entity + */ +class File extends AbstractContentItem +{ + /** @Column(type="string") */ + protected $extension = "html"; +} \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index ad1fa3d5c..12ccfb32f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -459,48 +459,3 @@ class User )); } } - -abstract class AbstractContentItem -{ - - /** - * Doctrine2 entity id - * @var integer - */ - private $id; - /** - * The parent directory - * @var Directory - */ - protected $parentDirectory; - /** - * Filename (without extension) or directory name - * @var string - */ - protected $name; -} - -class Directory extends AbstractContentItem -{ - - protected $subDirectories; - /** - * This is a collection of files that are contained in this Directory. Files, for example, could be Pages, but even other files - * like media files (css, images etc) are possible. - * - * @var \Doctrine\Common\Collections\Collection - * @access protected - */ - protected $containedFiles; - /** - * @var string - */ - protected $url; -} - -class Page extends AbstractContentItem -{ - - protected $extension = "html"; - -} diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php index f28f7a6d4..b34d727a7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php @@ -117,25 +117,20 @@ class AnnotationDriverTest extends AbstractMappingDriverTest */ public function testJoinTablesWithMappedSuperclassForAnnotationDriver() { + $annotationDriver = $this->_loadDriver(); + $annotationDriver->addPaths(array(__DIR__ . '/../../Models/DirectoryTree/')); + $em = $this->_getTestEntityManager(); - $em->getConfiguration()->setMetadataDriverImpl($this->_loadDriver()); + $em->getConfiguration()->setMetadataDriverImpl($annotationDriver); + $factory = new \Doctrine\ORM\Mapping\ClassMetadataFactory($em); - $classPage = $em->getClassMetadata('Doctrine\Tests\ORM\Mapping\Page'); - $this->assertEquals('Doctrine\Tests\ORM\Mapping\Page', $classPage->associationMappings['parentDirectory']['sourceEntity']); - $classDirectory = $em->getClassMetadata('Doctrine\Tests\ORM\Mapping\Directory'); - $this->assertEquals('Doctrine\Tests\ORM\Mapping\Directory', $classDirectory->associationMappings['parentDirectory']['sourceEntity']); + $classPage = new ClassMetadata('Doctrine\Tests\Models\DirectoryTree\File'); + $classPage = $factory->getMetadataFor('Doctrine\Tests\Models\DirectoryTree\File'); + $this->assertEquals('Doctrine\Tests\Models\DirectoryTree\File', $classPage->associationMappings['parentDirectory']['sourceEntity']); - $dql = "SELECT f FROM Doctrine\Tests\ORM\Mapping\Page f JOIN f.parentDirectory d " . - "WHERE (d.url = :url) AND (f.extension = :extension)"; - - $query = $em->createQuery($dql) - ->setParameter('url', "test") - ->setParameter('extension', "extension"); - - $this->assertEquals( - 'SELECT c0_.id AS id0, c0_.extension AS extension1, c0_.parent_directory_id AS parent_directory_id2 FROM core_content_pages c0_ INNER JOIN core_content_directories c1_ ON c0_.parent_directory_id = c1_.id WHERE (c1_.url = ?) AND (c0_.extension = ?)', - $query->getSql() - ); + $classDirectory = new ClassMetadata('Doctrine\Tests\Models\DirectoryTree\Directory'); + $classDirectory = $factory->getMetadataFor('Doctrine\Tests\Models\DirectoryTree\Directory'); + $this->assertEquals('Doctrine\Tests\Models\DirectoryTree\Directory', $classDirectory->associationMappings['parentDirectory']['sourceEntity']); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/YamlMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/YamlMappingDriverTest.php index 46e3ff15b..4e58485f1 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/YamlMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/YamlMappingDriverTest.php @@ -26,25 +26,20 @@ class YamlMappingDriverTest extends AbstractMappingDriverTest */ public function testJoinTablesWithMappedSuperclassForYamlDriver() { + $yamlDriver = $this->_loadDriver(); + $yamlDriver->addPaths(array(__DIR__ . DIRECTORY_SEPARATOR . 'yaml')); + $em = $this->_getTestEntityManager(); - $em->getConfiguration()->setMetadataDriverImpl($this->_loadDriver()); + $em->getConfiguration()->setMetadataDriverImpl($yamlDriver); + $factory = new \Doctrine\ORM\Mapping\ClassMetadataFactory($em); - $classPage = $em->getClassMetadata('Doctrine\Tests\ORM\Mapping\Page'); - $this->assertEquals('Doctrine\Tests\ORM\Mapping\Page', $classPage->associationMappings['parentDirectory']['sourceEntity']); - $classDirectory = $em->getClassMetadata('Doctrine\Tests\ORM\Mapping\Directory'); - $this->assertEquals('Doctrine\Tests\ORM\Mapping\Directory', $classDirectory->associationMappings['parentDirectory']['sourceEntity']); + $classPage = new ClassMetadata('Doctrine\Tests\Models\DirectoryTree\File'); + $classPage = $factory->getMetadataFor('Doctrine\Tests\Models\DirectoryTree\File'); + $this->assertEquals('Doctrine\Tests\Models\DirectoryTree\File', $classPage->associationMappings['parentDirectory']['sourceEntity']); - $dql = "SELECT f FROM Doctrine\Tests\ORM\Mapping\Page f JOIN f.parentDirectory d " . - "WHERE (d.url = :url) AND (f.extension = :extension)"; - - $query = $em->createQuery($dql) - ->setParameter('url', "test") - ->setParameter('extension', "extension"); - - $this->assertEquals( - 'SELECT c0_.id AS id0, c0_.extension AS extension1, c0_.parent_directory_id AS parent_directory_id2 FROM core_content_pages c0_ INNER JOIN core_content_directories c1_ ON c0_.parent_directory_id = c1_.id WHERE (c1_.url = ?) AND (c0_.extension = ?)', - $query->getSql() - ); + $classDirectory = new ClassMetadata('Doctrine\Tests\Models\DirectoryTree\Directory'); + $classDirectory = $factory->getMetadataFor('Doctrine\Tests\Models\DirectoryTree\Directory'); + $this->assertEquals('Doctrine\Tests\Models\DirectoryTree\Directory', $classDirectory->associationMappings['parentDirectory']['sourceEntity']); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.AbstractContentItem.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.AbstractContentItem.dcm.yml new file mode 100644 index 000000000..9c573a561 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.AbstractContentItem.dcm.yml @@ -0,0 +1,14 @@ +Doctrine\Tests\Models\DirectoryTree\AbstractContentItem: + type: mappedSuperclass + id: + id: + type: integer + unsigned: true + generator: + strategy: AUTO + fields: + name: + type: string + manyToOne: + parentDirectory: + targetEntity: Doctrine\Tests\Models\DirectoryTree\Directory diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Directory.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.Directory.dcm.yml similarity index 55% rename from tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Directory.dcm.yml rename to tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.Directory.dcm.yml index 129ae6b28..c8393ee0f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Directory.dcm.yml +++ b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.Directory.dcm.yml @@ -1,17 +1,16 @@ -Doctrine\Tests\ORM\Mapping\Directory: +Doctrine\Tests\Models\DirectoryTree\Directory: type: entity - table: core_content_directories fields: - url: + path: type: string length: 255 oneToMany: subDirectories: - targetEntity: Doctrine\Tests\ORM\Mapping\Directory + targetEntity: Doctrine\Tests\Models\DirectoryTree\Directory mappedBy: parentDirectory cascade: [ all ] containedFiles: - targetEntity: Doctrine\Tests\ORM\Mapping\Page + targetEntity: Doctrine\Tests\Models\DirectoryTree\File mappedBy: parentDirectory cascade: [ remove ] diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Page.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.File.dcm.yml similarity index 55% rename from tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Page.dcm.yml rename to tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.File.dcm.yml index a3b0fb836..cbc8edfec 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Page.dcm.yml +++ b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.File.dcm.yml @@ -1,6 +1,5 @@ -Doctrine\Tests\ORM\Mapping\Page: +Doctrine\Tests\Models\DirectoryTree\File: type: entity - table: core_content_pages fields: extension: type: string diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.AbstractContentItem.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.AbstractContentItem.dcm.yml deleted file mode 100644 index 9137619ec..000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.AbstractContentItem.dcm.yml +++ /dev/null @@ -1,16 +0,0 @@ -Doctrine\Tests\ORM\Mapping\AbstractContentItem: - type: mappedSuperclass - id: - id: - type: integer - unsigned: true - generator: - strategy: AUTO - fields: - # FilesystemIdentifier - manyToOne: - parentDirectory: - targetEntity: Doctrine\Tests\ORM\Mapping\Directory - joinColumn: - name: parent_directory_id - referencedColumnName: id