public function serializeObjectAsPropertyArraySerializesObjectPropertiesCorrectly()
{
$className1 = 'DummyClass1' . md5(uniqid(mt_rand(), true));
$className2 = 'DummyClass2' . md5(uniqid(mt_rand(), true));
eval('class ' . $className2 . '{}');
eval('class ' . $className1 . ' {
private $objectProperty;
public function __construct() {
$this->objectProperty = new ' . $className2 . '();
}
public function getObjectProperty() {
return $this->objectProperty;
}
}');
$mockReflectionService = $this->getMockBuilder(ReflectionService::class)->disableOriginalConstructor()->getMock();
$mockReflectionService->expects($this->at(0))->method('getClassPropertyNames')->with($className1)->will($this->returnValue(['objectProperty']));
$mockReflectionService->expects($this->at(2))->method('getClassPropertyNames')->with($className2)->will($this->returnValue([]));
$mockObjectManager = $this->getMockBuilder(ObjectManager::class)->disableOriginalConstructor()->getMock();
$mockObjectManager->expects($this->once())->method('getObjectNameByClassName')->with($className2)->will($this->returnValue('objectName2'));
$mockObjectManager->expects($this->once())->method('getScope')->with('objectName2')->will($this->returnValue(Configuration::SCOPE_PROTOTYPE));
$mockPersistenceManager = $this->createMock(PersistenceManagerInterface::class);
$objectSerializer = $this->getMockBuilder(ObjectSerializer::class)->disableOriginalConstructor()->setMethods(['dummy'])->getMock();
$objectSerializer->injectReflectionService($mockReflectionService);
$objectSerializer->injectObjectManager($mockObjectManager);
$objectSerializer->injectPersistenceManager($mockPersistenceManager);
$someObject = new $className1();
$expectedPropertyArray = [\spl_object_hash($someObject) => [ObjectSerializer::CLASSNAME => $className1, ObjectSerializer::PROPERTIES => ['objectProperty' => [ObjectSerializer::TYPE => 'object', ObjectSerializer::VALUE => spl_object_hash($someObject->getObjectProperty())]]], spl_object_hash($someObject->getObjectProperty()) => [ObjectSerializer::CLASSNAME => $className2, ObjectSerializer::PROPERTIES => []]];
$this->assertEquals($expectedPropertyArray, $objectSerializer->serializeObjectAsPropertyArray($someObject), 'The object property was not serialized correctly.');
}