DDC1643Test.php 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. namespace Doctrine\Tests\ORM\Functional\Ticket;
  3. use Doctrine\Tests\Models\CMS\CmsUser;
  4. use Doctrine\Tests\Models\CMS\CmsGroup;
  5. /**
  6. * @group DDC-1643
  7. */
  8. class DDC1643Test extends \Doctrine\Tests\OrmFunctionalTestCase
  9. {
  10. private $user1;
  11. private $user2;
  12. public function setUp()
  13. {
  14. $this->useModelSet('cms');
  15. parent::setUp();
  16. $user1 = new CmsUser();
  17. $user1->username = "beberlei";
  18. $user1->name = "Benjamin";
  19. $user1->status = "active";
  20. $group1 = new CmsGroup();
  21. $group1->name = "test";
  22. $group2 = new CmsGroup();
  23. $group2->name = "test";
  24. $user1->addGroup($group1);
  25. $user1->addGroup($group2);
  26. $user2 = new CmsUser();
  27. $user2->username = "romanb";
  28. $user2->name = "Roman";
  29. $user2->status = "active";
  30. $this->_em->persist($user1);
  31. $this->_em->persist($user2);
  32. $this->_em->persist($group1);
  33. $this->_em->persist($group2);
  34. $this->_em->flush();
  35. $this->_em->clear();
  36. $this->user1 = $this->_em->find(get_class($user1), $user1->id);
  37. $this->user2 = $this->_em->find(get_class($user1), $user2->id);
  38. }
  39. public function testClonePersistentCollectionAndReuse()
  40. {
  41. $user1 = $this->user1;
  42. $user1->groups = clone $user1->groups;
  43. $this->_em->flush();
  44. $this->_em->clear();
  45. $user1 = $this->_em->find(get_class($user1), $user1->id);
  46. $this->assertEquals(2, count($user1->groups));
  47. }
  48. public function testClonePersistentCollectionAndShare()
  49. {
  50. $user1 = $this->user1;
  51. $user2 = $this->user2;
  52. $user2->groups = clone $user1->groups;
  53. $this->_em->flush();
  54. $this->_em->clear();
  55. $user1 = $this->_em->find(get_class($user1), $user1->id);
  56. $user2 = $this->_em->find(get_class($user1), $user2->id);
  57. $this->assertEquals(2, count($user1->groups));
  58. $this->assertEquals(2, count($user2->groups));
  59. }
  60. public function testCloneThenDirtyPersistentCollection()
  61. {
  62. $user1 = $this->user1;
  63. $user2 = $this->user2;
  64. $group3 = new CmsGroup();
  65. $group3->name = "test";
  66. $user2->groups = clone $user1->groups;
  67. $user2->groups->add($group3);
  68. $this->_em->persist($group3);
  69. $this->_em->flush();
  70. $this->_em->clear();
  71. $user1 = $this->_em->find(get_class($user1), $user1->id);
  72. $user2 = $this->_em->find(get_class($user1), $user2->id);
  73. $this->assertEquals(3, count($user2->groups));
  74. $this->assertEquals(2, count($user1->groups));
  75. }
  76. public function testNotCloneAndPassAroundFlush()
  77. {
  78. $user1 = $this->user1;
  79. $user2 = $this->user2;
  80. $group3 = new CmsGroup();
  81. $group3->name = "test";
  82. $user2->groups = $user1->groups;
  83. $user2->groups->add($group3);
  84. $this->assertEQuals(1, count($user1->groups->getInsertDiff()));
  85. $this->_em->persist($group3);
  86. $this->_em->flush();
  87. $this->_em->clear();
  88. $user1 = $this->_em->find(get_class($user1), $user1->id);
  89. $user2 = $this->_em->find(get_class($user1), $user2->id);
  90. $this->assertEquals(3, count($user2->groups));
  91. $this->assertEquals(3, count($user1->groups));
  92. }
  93. }