/**
* @dataProvider entityManagerDataProvider
* @param EntityManager $em
*/
public function testIntercepts(EntityManager $em)
{
$em->getDispatcher()->addListener(Event::PRE_RETRIEVE, function (RetrieveEvent $event) {
// Return something completely different instead
$event->setReturnValue(new Article());
$event->setAbort(true);
});
$em->getDispatcher()->addListener(Event::POST_PERSIST, function (PersistEvent $event) {
/** @var Product $entity */
$entity = $event->getEntity();
$this->assertTrue($entity instanceof Product);
$entity->setName('Persisted Product');
});
$product = new Product();
$product->setId(111)->setName('New Product')->setCreateTime(new \DateTime());
$em->persist($product);
$em->flush();
$this->assertEquals('Persisted Product', $product->getName());
$retrieved = $em->retrieve(Product::class, 111);
$this->assertTrue($retrieved instanceof Article);
}