Skip to content

Commit

Permalink
Merge pull request #32 from yannickl88/fix/non-owning-assocation-clone
Browse files Browse the repository at this point in the history
Made sure to also fill in associations
  • Loading branch information
linaori authored Oct 16, 2017
2 parents bd132aa + b126271 commit dd76c75
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 9 deletions.
10 changes: 5 additions & 5 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "hostnet/entity-tracker-component",
"description": "Provides an event when a Tracked entity changes",
"license": "MIT",
"name": "hostnet/entity-tracker-component",
"description": "Provides an event when a Tracked entity changes",
"license": "MIT",
"require": {
"php": "5.*,>=5.6||7.*",
"doctrine/annotations": "1.*,>=1.2.0",
Expand All @@ -10,10 +10,10 @@
"psr/log": "^1.0.0"
},
"require-dev": {
"hostnet/database-test-lib": "^1.0",
"hostnet/database-test-lib": "^1.0.5",
"hostnet/phpcs-tool": "^4.0.8",
"phpunit/phpunit": "^5.5.0",
"symfony/var-dumper": "^3.1"
"symfony/var-dumper": "^3.1"
},
"minimum-stability": "stable",
"autoload": {
Expand Down
6 changes: 3 additions & 3 deletions src/Provider/EntityMutationMetadataProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,10 @@ public function createOriginalEntity(EntityManagerInterface $em, $entity)
foreach ($fields as $field) {
if (isset($data[$field])) {
$metadata->setFieldValue($original, $field, $data[$field]);
continue;
}
if (isset($id_data[$field]) && $metadata->isIdentifier($field) && $metadata->isIdGeneratorIdentity()) {
} elseif (isset($id_data[$field]) && $metadata->isIdentifier($field) && $metadata->isIdGeneratorIdentity()) {
$metadata->setFieldValue($original, $field, $id_data[$field]);
} elseif ($metadata->isAssociationInverseSide($field)) {
$metadata->setFieldValue($original, $field, $metadata->getFieldValue($entity, $field));
}
}

Expand Down
65 changes: 65 additions & 0 deletions test/Provider/Entity/Visit.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<?php
namespace Hostnet\Component\EntityTracker\Provider\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity()
*/
class Visit
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;

/**
* @ORM\Column(type="datetime")
* @var \DateTime
*/
private $date;

/**
* @ORM\ManyToOne(targetEntity="Visitor", inversedBy="visits")
* @var Visitor
*/
private $visitor;

/**
* @param \DateTime $date
* @param Visitor $visitor
*/
public function __construct(\DateTime $date, Visitor $visitor)
{
$this->date = $date;
$this->visitor = $visitor;
}

/**
* @return \DateTime
*/
public function getDate()
{
return $this->date;
}

/**
* @param \DateTime $date
*/
public function setDate($date)
{
$this->date = $date;
}

/**
* @return Visitor
*/
public function getVisitor()
{
return $this->visitor;
}
}
30 changes: 29 additions & 1 deletion test/Provider/Entity/Visitor.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php
namespace Hostnet\Component\EntityTracker\Provider\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
Expand All @@ -24,10 +25,37 @@ class Visitor
private $name;

/**
* @param string $name
* @ORM\OneToMany(targetEntity="Visit", mappedBy="visitor", cascade={"persist"})
* @var ArrayCollection|Visit[]
*/
private $visits;

/**
* @param string $name
*/
public function __construct($name)
{
$this->name = $name;
$this->visits = new ArrayCollection();
}

public function getName()
{
return $this->name;
}

public function setName($name)
{
$this->name = $name;
}

public function getVisits()
{
return $this->visits;
}

public function addVisit(Visit $visit)
{
$this->visits->add($visit);
}
}
20 changes: 20 additions & 0 deletions test/Provider/EntityMutationMetadataProviderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
use Hostnet\Component\EntityTracker\Provider\Entity\Gallery;
use Hostnet\Component\EntityTracker\Provider\Entity\Node;
use Hostnet\Component\EntityTracker\Provider\Entity\Painting;
use Hostnet\Component\EntityTracker\Provider\Entity\Visit;
use Hostnet\Component\EntityTracker\Provider\Entity\Visitor;

/**
* @covers \Hostnet\Component\EntityTracker\Provider\EntityMutationMetadataProvider
Expand Down Expand Up @@ -89,6 +91,24 @@ public function testCreateOriginalEntityIdentity()
self::assertSame($gallery->getId(), $original->getId());
}

public function testCreateOriginalEntityNonOwning()
{
$visitor = new Visitor('Henk de Vries');
$visitor->addVisit(new Visit(new \DateTime('2016-10-10 10:10:10'), $visitor));

$this->em->persist($visitor);
$this->em->flush();

$visitor->setName('foobar');

$this->em->flush();

$original = $this->provider->createOriginalEntity($this->em, $visitor);

self::assertSame($visitor->getName(), $original->getName());
self::assertSame($visitor->getVisits(), $original->getVisits());
}

/**
* @depends testCreateOriginalEntity
*/
Expand Down

0 comments on commit dd76c75

Please sign in to comment.