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:
parent
8a87fa2d01
commit
12b5e79ff2
27
tests/Doctrine/Tests/Models/Issue5989/Issue5989Employee.php
Normal file
27
tests/Doctrine/Tests/Models/Issue5989/Issue5989Employee.php
Normal 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;
|
||||
}
|
||||
}
|
27
tests/Doctrine/Tests/Models/Issue5989/Issue5989Manager.php
Normal file
27
tests/Doctrine/Tests/Models/Issue5989/Issue5989Manager.php
Normal 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;
|
||||
}
|
||||
}
|
29
tests/Doctrine/Tests/Models/Issue5989/Issue5989Person.php
Normal file
29
tests/Doctrine/Tests/Models/Issue5989/Issue5989Person.php
Normal 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;
|
||||
}
|
||||
}
|
51
tests/Doctrine/Tests/ORM/Functional/Ticket/Issue5989Test.php
Normal file
51
tests/Doctrine/Tests/ORM/Functional/Ticket/Issue5989Test.php
Normal 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());
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user