From 4a7e8c16e57d848f001b6b22fb4189df0b4dc5df Mon Sep 17 00:00:00 2001 From: "Jonathan H. Wage" Date: Tue, 27 Jul 2010 19:27:46 -0500 Subject: [PATCH] Adding some additional inheritance tests. --- .../ODM/MongoDB/Mapping/ClassMetadata.php | 15 +++++++ .../MongoDB/Mapping/ClassMetadataFactory.php | 1 + .../Tests/Functional/FunctionalTest.php | 45 ++++++++++++------- tests/Documents/Agent.php | 18 ++++++++ tests/Documents/GuestServer.php | 8 ++++ tests/Documents/Server.php | 21 +++++++++ 6 files changed, 91 insertions(+), 17 deletions(-) create mode 100644 tests/Documents/Agent.php create mode 100644 tests/Documents/GuestServer.php create mode 100644 tests/Documents/Server.php diff --git a/lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadata.php b/lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadata.php index 51aa649af9..1b9896732f 100644 --- a/lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadata.php @@ -175,6 +175,13 @@ class ClassMetadata */ public $fieldMappings = array(); + /** + * READ-ONLY: The registered lifecycle callbacks for documents of this class. + * + * @var array + */ + public $lifecycleCallbacks = array(); + /** * READ-ONLY: The discriminator value of this class. * @@ -567,6 +574,14 @@ public function mapField(array $mapping) $mapping['targetDocument'] = $this->namespace . '\\' . $mapping['targetDocument']; } + if (isset($mapping['discriminatorMap'])) { + foreach ($mapping['discriminatorMap'] as $key => $class) { + if (strpos($class, '\\') === false && strlen($this->namespace)) { + $mapping['discriminatorMap'][$key] = $this->namespace . '\\' . $class; + } + } + } + if ($this->reflClass->hasProperty($mapping['fieldName'])) { $reflProp = $this->reflClass->getProperty($mapping['fieldName']); $reflProp->setAccessible(true); diff --git a/lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php index 875ee635fb..ce04aa26c7 100644 --- a/lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php @@ -192,6 +192,7 @@ private function _loadMetadata($className) $this->_addInheritedFields($class, $parent); $class->setIdentifier($parent->identifier); $class->setDiscriminatorMap($parent->discriminatorMap); + $class->setLifecycleCallbacks($parent->lifecycleCallbacks); } $this->_driver->loadMetadataForClass($className, $class); diff --git a/tests/Doctrine/ODM/MongoDB/Tests/Functional/FunctionalTest.php b/tests/Doctrine/ODM/MongoDB/Tests/Functional/FunctionalTest.php index 59e6c58edf..feb539cedd 100644 --- a/tests/Doctrine/ODM/MongoDB/Tests/Functional/FunctionalTest.php +++ b/tests/Doctrine/ODM/MongoDB/Tests/Functional/FunctionalTest.php @@ -10,9 +10,11 @@ Documents\Manager, Documents\Address, Documents\Group, - Documents\Project; - -use Documents\Functional\AlsoLoad, + Documents\Project, + Documents\Agent, + Documents\Server, + Documents\GuestServer, + Documents\Functional\AlsoLoad, Documents\Functional\EmbeddedTestLevel0, Documents\Functional\EmbeddedTestLevel1, Documents\Functional\EmbeddedTestLevel2, @@ -29,21 +31,30 @@ class FunctionalTest extends \Doctrine\ODM\MongoDB\Tests\BaseTest { - public function tearDown() + public function testPersistingNewDocumentWithOnlyOneReference() { - parent::tearDown(); - $documents = array( - 'Documents\Functional\AlsoLoad', - 'Documents\Functional\NotAnnotatedDocument', - 'Documents\Functional\NotSaved', - 'Documents\Functional\NullFieldValues', - 'Documents\Functional\SimpleEmbedAndReference', - 'Documents\Functional\FavoritesUser', - 'Documents\Functional\EmbeddedTestLevel0' - ); - foreach ($documents as $document) { - $this->dm->getDocumentCollection($document)->drop(); - } + $server = new \Documents\GuestServer(); + $server->name = 'test'; + $this->dm->persist($server); + $this->dm->flush(); + $id = $server->id; + + $this->dm->clear(); + + $server = $this->dm->getReference('Documents\GuestServer', $id); + + $agent = new \Documents\Agent(); + $agent->server = $server; + $this->dm->persist($agent); + $this->dm->flush(); + $this->dm->clear(); + + $test = $this->dm->getDocumentCollection('Documents\Agent')->findOne(); + + $this->assertEquals('servers', $test['server']['$ref']); + $this->assertTrue(isset($test['server']['$id'])); + $this->assertEquals('doctrine_odm_tests', $test['server']['$db']); + $this->assertEquals('server_guest', $test['server']['_doctrine_class_name']); } public function testCollection() diff --git a/tests/Documents/Agent.php b/tests/Documents/Agent.php new file mode 100644 index 0000000000..11ee69685e --- /dev/null +++ b/tests/Documents/Agent.php @@ -0,0 +1,18 @@ +