128 lines
4.4 KiB
PHP
128 lines
4.4 KiB
PHP
<?php
|
|
|
|
/*
|
|
* Copyright 2016 Johannes M. Schmitt <schmittjoh@gmail.com>
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
namespace JMS\Serializer\Tests\Metadata\Driver;
|
|
|
|
use Doctrine\Common\Annotations\AnnotationReader;
|
|
use Doctrine\ODM\PHPCR\Configuration;
|
|
use Doctrine\ODM\PHPCR\DocumentManager;
|
|
use Doctrine\ODM\PHPCR\Mapping\Driver\AnnotationDriver as DoctrinePHPCRDriver;
|
|
use JMS\Serializer\Metadata\Driver\AnnotationDriver;
|
|
use JMS\Serializer\Metadata\Driver\DoctrinePHPCRTypeDriver;
|
|
|
|
class DoctrinePHPCRDriverTest extends \PHPUnit_Framework_TestCase
|
|
{
|
|
public function getMetadata()
|
|
{
|
|
$refClass = new \ReflectionClass('JMS\Serializer\Tests\Fixtures\DoctrinePHPCR\BlogPost');
|
|
$metadata = $this->getDoctrinePHPCRDriver()->loadMetadataForClass($refClass);
|
|
|
|
return $metadata;
|
|
}
|
|
|
|
public function testTypelessPropertyIsGivenTypeFromDoctrineMetadata()
|
|
{
|
|
$metadata = $this->getMetadata();
|
|
$this->assertEquals(
|
|
array('name' => 'DateTime', 'params' => array()),
|
|
$metadata->propertyMetadata['createdAt']->type
|
|
);
|
|
}
|
|
|
|
public function testSingleValuedAssociationIsProperlyHinted()
|
|
{
|
|
$metadata = $this->getMetadata();
|
|
$this->assertEquals(
|
|
array('name' => 'JMS\Serializer\Tests\Fixtures\DoctrinePHPCR\Author', 'params' => array()),
|
|
$metadata->propertyMetadata['author']->type
|
|
);
|
|
}
|
|
|
|
public function testMultiValuedAssociationIsProperlyHinted()
|
|
{
|
|
$metadata = $this->getMetadata();
|
|
|
|
$this->assertEquals(
|
|
array('name' => 'ArrayCollection', 'params' => array(
|
|
array('name' => 'JMS\Serializer\Tests\Fixtures\DoctrinePHPCR\Comment', 'params' => array()))
|
|
),
|
|
$metadata->propertyMetadata['comments']->type
|
|
);
|
|
}
|
|
|
|
public function testTypeGuessByDoctrineIsOverwrittenByDelegateDriver()
|
|
{
|
|
$metadata = $this->getMetadata();
|
|
|
|
// This would be guessed as boolean but we've overridden it to integer
|
|
$this->assertEquals(
|
|
array('name' => 'integer', 'params' => array()),
|
|
$metadata->propertyMetadata['published']->type
|
|
);
|
|
}
|
|
|
|
public function testNonDoctrineDocumentClassIsNotModified()
|
|
{
|
|
// Note: Using regular BlogPost fixture here instead of Doctrine fixture
|
|
// because it has no Doctrine metadata.
|
|
$refClass = new \ReflectionClass('JMS\Serializer\Tests\Fixtures\BlogPost');
|
|
|
|
$plainMetadata = $this->getAnnotationDriver()->loadMetadataForClass($refClass);
|
|
$doctrineMetadata = $this->getDoctrinePHPCRDriver()->loadMetadataForClass($refClass);
|
|
|
|
// Do not compare timestamps
|
|
if (abs($doctrineMetadata->createdAt - $plainMetadata->createdAt) < 2) {
|
|
$plainMetadata->createdAt = $doctrineMetadata->createdAt;
|
|
}
|
|
|
|
$this->assertEquals($plainMetadata, $doctrineMetadata);
|
|
}
|
|
|
|
protected function getDocumentManager()
|
|
{
|
|
$config = new Configuration();
|
|
$config->setProxyDir(sys_get_temp_dir() . '/JMSDoctrineTestProxies');
|
|
$config->setProxyNamespace('JMS\Tests\Proxies');
|
|
$config->setMetadataDriverImpl(
|
|
new DoctrinePHPCRDriver(new AnnotationReader(), __DIR__ . '/../../Fixtures/DoctrinePHPCR')
|
|
);
|
|
|
|
$session = $this->getMockBuilder('PHPCR\SessionInterface')->getMock();
|
|
|
|
return DocumentManager::create($session, $config);
|
|
}
|
|
|
|
public function getAnnotationDriver()
|
|
{
|
|
return new AnnotationDriver(new AnnotationReader());
|
|
}
|
|
|
|
protected function getDoctrinePHPCRDriver()
|
|
{
|
|
$registry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
|
|
$registry->expects($this->atLeastOnce())
|
|
->method('getManagerForClass')
|
|
->will($this->returnValue($this->getDocumentManager()));
|
|
|
|
return new DoctrinePHPCRTypeDriver(
|
|
$this->getAnnotationDriver(),
|
|
$registry
|
|
);
|
|
}
|
|
}
|