From 9caef624896c1f7ac181038f899e02aa18dd8154 Mon Sep 17 00:00:00 2001 From: Mathieu De Zutter Date: Wed, 5 Nov 2014 07:08:17 +0100 Subject: [PATCH] Test case for merging entities with associations to identical entities. --- .../Functional/MergeSharedEntitiesTest.php | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php new file mode 100644 index 000000000..e367e5277 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php @@ -0,0 +1,125 @@ +_schemaTool->createSchema( + array( + $this->_em->getClassMetadata(__NAMESPACE__ . '\MSEFile'), + $this->_em->getClassMetadata(__NAMESPACE__ . '\MSEPicture'), + ) + ); + } catch (ToolsException $ignored) { + } + } + + public function testMergeSharedNewEntities() + { + + /** @var MSEPicture $picture */ + $file = new MSEFile; + + $picture = new MSEPicture; + $picture->file = $file; + $picture->otherFile = $file; + + $em = $this->_em; + + $picture = $em->merge($picture); + + $this->assertEquals($picture->file, $picture->otherFile, "Identical entities must remain identical"); + } + + public function testMergeSharedManagedEntities() + { + + /** @var MSEPicture $picture */ + $file = new MSEFile; + + $picture = new MSEPicture; + $picture->file = $file; + $picture->otherFile = $file; + + $em = $this->_em; + $em->persist($file); + $em->flush(); + $em->clear(); + + $picture = $em->merge($picture); + + $this->assertEquals($picture->file, $picture->otherFile, "Identical entities must remain identical"); + } + + public function testMergeSharedManagedEntitiesSerialize() + { + + /** @var MSEPicture $picture */ + $file = new MSEFile; + + $picture = new MSEPicture; + $picture->file = $file; + $picture->otherFile = $file; + + $serializedPicture = serialize($picture); + + $em = $this->_em; + $em->persist($file); + $em->flush(); + $em->clear(); + + $picture = unserialize($serializedPicture); + $picture = $em->merge($picture); + + $this->assertEquals($picture->file, $picture->otherFile, "Identical entities must remain identical"); + } + +} + +/** + * @Entity + */ +class MSEPicture +{ + /** + * @Column(name="picture_id", type="integer") + * @Id @GeneratedValue + */ + public $pictureId; + + /** + * @ManyToOne(targetEntity="MSEFile", cascade={"persist", "merge"}) + * @JoinColumn(name="file_id", referencedColumnName="file_id") + */ + public $file; + + /** + * @ManyToOne(targetEntity="MSEFile", cascade={"persist", "merge"}) + * @JoinColumn(name="other_file_id", referencedColumnName="file_id") + */ + public $otherFile; +} + +/** + * @Entity + */ +class MSEFile +{ + /** + * @Column(name="file_id", type="integer") + * @Id + * @GeneratedValue(strategy="AUTO") + */ + public $fileId; + +}