1
0
mirror of synced 2025-02-02 21:41:45 +03:00

Create a failing test for issue #5989

Field with type=simple_array in a joined inheritance gets overridden by empty array in the hydrator
This commit is contained in:
Carl Vuorinen 2016-09-02 10:31:26 +03:00 committed by Marco Pivetta
parent 8a87fa2d01
commit 12b5e79ff2
5 changed files with 145 additions and 0 deletions

View File

@ -0,0 +1,27 @@
<?php
namespace Doctrine\Tests\Models\Issue5989;
/**
* @Entity
* @Table(name="issue5989_employees")
*/
class Issue5989Employee extends Issue5989Person
{
/**
* @column(type="simple_array", nullable=true)
*
* @var array
*/
private $tags;
public function getTags()
{
return $this->tags;
}
public function setTags(array $tags)
{
$this->tags = $tags;
}
}

View File

@ -0,0 +1,27 @@
<?php
namespace Doctrine\Tests\Models\Issue5989;
/**
* @Entity
* @Table(name="issue5989_managers")
*/
class Issue5989Manager extends Issue5989Person
{
/**
* @column(type="simple_array", nullable=true)
*
* @var array
*/
private $tags;
public function getTags()
{
return $this->tags;
}
public function setTags(array $tags)
{
$this->tags = $tags;
}
}

View File

@ -0,0 +1,29 @@
<?php
namespace Doctrine\Tests\Models\Issue5989;
/**
* @Entity
* @Table(name="issue5989_persons")
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({
* "person" = "Issue5989Person",
* "manager" = "Issue5989Manager",
* "employee" = "Issue5989Employee"
* })
*/
class Issue5989Person
{
/**
* @Id
* @Column(type="integer")
* @GeneratedValue
*/
private $id;
public function getId()
{
return $this->id;
}
}

View File

@ -0,0 +1,51 @@
<?php
namespace Doctrine\Tests\ORM\Functional\Ticket;
use Doctrine\Tests\Models\Issue5989\Issue5989Employee;
use Doctrine\Tests\Models\Issue5989\Issue5989Manager;
use Doctrine\Tests\Models\Issue5989\Issue5989Person;
/**
* @group issue-5989
*/
class Issue5989Test extends \Doctrine\Tests\OrmFunctionalTestCase
{
public function setUp()
{
$this->useModelSet('issue5989');
parent::setUp();
}
public function testSimpleArrayTypeHydratedCorrectlyInJoinedInheritance()
{
$manager = new Issue5989Manager();
$managerTags = array('tag1', 'tag2');
$manager->setTags($managerTags);
$this->_em->persist($manager);
$employee = new Issue5989Employee();
$employeeTags = array('tag2', 'tag3');
$employee->setTags($employeeTags);
$this->_em->persist($employee);
$this->_em->flush();
$managerId = $manager->getId();
$employeeId = $employee->getId();
// clear entity manager so that $repository->find actually fetches them and uses the hydrator
// instead of just returning the existing managed entities
$this->_em->clear();
$repository = $this->_em->getRepository(Issue5989Person::class);
$manager = $repository->find($managerId);
$employee = $repository->find($employeeId);
static::assertEquals($managerTags, $manager->getTags());
static::assertEquals($employeeTags, $employee->getTags());
}
}

View File

@ -295,6 +295,11 @@ abstract class OrmFunctionalTestCase extends OrmTestCase
'Doctrine\Tests\Models\VersionedManyToOne\Category',
'Doctrine\Tests\Models\VersionedManyToOne\Article',
),
'issue5989' => array(
'Doctrine\Tests\Models\Issue5989\Issue5989Person',
'Doctrine\Tests\Models\Issue5989\Issue5989Employee',
'Doctrine\Tests\Models\Issue5989\Issue5989Manager',
),
);
/**
@ -563,6 +568,12 @@ abstract class OrmFunctionalTestCase extends OrmTestCase
$conn->executeUpdate('DELETE FROM versioned_many_to_one_category');
}
if (isset($this->_usedModelSets['issue5989'])) {
$conn->executeUpdate('DELETE FROM issue5989_persons');
$conn->executeUpdate('DELETE FROM issue5989_employees');
$conn->executeUpdate('DELETE FROM issue5989_managers');
}
$this->_em->clear();
}