Skip to content

Commit

Permalink
Rewrite test to use EntityManager instead of UoW directly
Browse files Browse the repository at this point in the history
  • Loading branch information
olsavmic committed Dec 30, 2021
1 parent fa3916c commit 1c25889
Show file tree
Hide file tree
Showing 5 changed files with 158 additions and 69 deletions.
44 changes: 44 additions & 0 deletions tests/Doctrine/Tests/Models/Issue9300/Issue9300Child.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php

declare(strict_types=1);

namespace Doctrine\Tests\Models\Issue9300;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\GeneratedValue;
use Doctrine\ORM\Mapping\Id;
use Doctrine\ORM\Mapping\ManyToMany;

/**
* @Entity
*/
class Issue9300Child
{
/**
* @var int
* @Id
* @Column(type="integer")
* @GeneratedValue
*/
public $id;

/**
* @var Collection|Issue9300Parent
* @ManyToMany(targetEntity="Issue9300Parent")
*/
public $parents;

/**
* @var string
* @Column(type="string")
*/
public $name;

public function __construct()
{
$this->parents = new ArrayCollection();
}
}
31 changes: 31 additions & 0 deletions tests/Doctrine/Tests/Models/Issue9300/Issue9300Parent.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

declare(strict_types=1);

namespace Doctrine\Tests\Models\Issue9300;

use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\GeneratedValue;
use Doctrine\ORM\Mapping\Id;

/**
* @Entity
*/
class Issue9300Parent
{

/**
* @var int
* @Id
* @Column(type="integer")
* @GeneratedValue
*/
public $id;

/**
* @var string
* @Column(type="string")
*/
public $name;
}
79 changes: 79 additions & 0 deletions tests/Doctrine/Tests/ORM/Functional/Ticket/Issue9300Test.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
<?php

declare(strict_types=1);

namespace Doctrine\Tests\ORM\Functional\Ticket;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Tests\Models\Issue9300\Issue9300Child;
use Doctrine\Tests\Models\Issue9300\Issue9300Parent;
use Doctrine\Tests\OrmFunctionalTestCase;

/**
* @group 9300
*/
class Issue9300Test extends OrmFunctionalTestCase
{
protected function setUp(): void
{
$this->useModelSet('issue9300');
parent::setUp();
}

/**
* @group #9300
*/
public function testPersistedCollectionIsPresentInOriginalDataAfterFlush(): void
{
$parent = new Issue9300Parent();
$child = new Issue9300Child();
$child->parents->add($parent);

$parent->name = 'abc';
$child->name = 'abc';

$this->_em->persist($parent);
$this->_em->persist($child);
$this->_em->flush();

$parent->name = 'abcd';
$child->name = 'abcd';

$this->_em->flush();

self::assertArrayHasKey('parents', $this->_em->getUnitOfWork()->getOriginalEntityData($child));
}

/**
* @group #9300
*/
public function testPersistingCollectionAfterFlushWorksAsExpected(): void
{
$parentOne = new Issue9300Parent();
$parentTwo = new Issue9300Parent();
$childOne = new Issue9300Child();

$parentOne->name = 'abc';
$parentTwo->name = 'abc';
$childOne->name = 'abc';
$childOne->parents = new ArrayCollection([$parentOne]);

$this->_em->persist($parentOne);
$this->_em->persist($parentTwo);
$this->_em->persist($childOne);
$this->_em->flush();

// Recalculate change-set -> new original data
$childOne->name = 'abcd';
$this->_em->flush();

$childOne->parents = new ArrayCollection([$parentTwo]);

$this->_em->flush();
$this->_em->clear();

$childOneFresh = $this->_em->find(Issue9300Child::class, $childOne->id);
self::assertCount(1, $childOneFresh->parents);
self::assertEquals($parentTwo->id, $childOneFresh->parents[0]->id);
}
}
69 changes: 0 additions & 69 deletions tests/Doctrine/Tests/ORM/UnitOfWorkTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -828,75 +828,6 @@ public function testItThrowsWhenLookingUpIdentifierForUnknownEntity(): void
$this->expectException(EntityNotFoundException::class);
$this->_unitOfWork->getEntityIdentifier(new stdClass());
}

/**
* @group #9300
*/
public function testPersistedCollectionIsPresentInOriginalDataAfterComputeChangeset(): void
{
$entity = new EntityWithCollection();
$entity->children->add(new ChildEntity());
$entity->name = 'abc';

$this->_unitOfWork->persist($entity);
$this->_unitOfWork->commit();

$entity->name = 'abcd';
$this->_unitOfWork->computeChangeSets();

self::assertArrayHasKey('children', $this->_unitOfWork->getOriginalEntityData($entity));
}
}

/**
* @Entity
*/
class EntityWithCollection
{
/**
* @var Collection|ChildEntity[]
* @OneToMany(targetEntity="ChildEntity", mappedBy="parent", cascade={"persist"})
*/
public $children;

/**
* @var int
* @Id
* @Column(type="integer")
* @GeneratedValue
*/
public $id;

/**
* @var string
* @Column(type="string")
*/
public $name;

public function __construct()
{
$this->children = new ArrayCollection();
}
}

/**
* @Entity
*/
class ChildEntity
{
/**
* @var int
* @Id
* @Column(type="integer")
* @GeneratedValue
*/
public $id;

/**
* @var int
* @ManyToOne(targetEntity="EntityWithCollection", inversedBy="children")
*/
public $parent;
}

/**
Expand Down
4 changes: 4 additions & 0 deletions tests/Doctrine/Tests/OrmFunctionalTestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,10 @@ abstract class OrmFunctionalTestCase extends OrmTestCase
Models\Issue5989\Issue5989Employee::class,
Models\Issue5989\Issue5989Manager::class,
],
'issue9300' => [
Models\Issue9300\Issue9300Child::class,
Models\Issue9300\Issue9300Parent::class,
],
];

protected function useModelSet(string $setName): void
Expand Down

0 comments on commit 1c25889

Please sign in to comment.