diff --git a/tests/Doctrine/Tests/ORM/ConfigurationTest.php b/tests/Doctrine/Tests/ORM/ConfigurationTest.php new file mode 100644 index 000000000..20feb49b1 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/ConfigurationTest.php @@ -0,0 +1,261 @@ + + */ +class ConfigurationTest extends PHPUnit_Framework_TestCase +{ + /** + * @var Configuration + */ + private $configuration; + + protected function setUp() + { + parent::setUp(); + $this->configuration = new Configuration(); + } + + public function testSetGetProxyDir() + { + $this->assertSame(null, $this->configuration->getProxyDir()); // defaults + + $this->configuration->setProxyDir(__DIR__); + $this->assertSame(__DIR__, $this->configuration->getProxyDir()); + } + + public function testSetGetAutoGenerateProxyClasses() + { + $this->assertSame(true, $this->configuration->getAutoGenerateProxyClasses()); // defaults + + $this->configuration->setAutoGenerateProxyClasses(false); + $this->assertSame(false, $this->configuration->getAutoGenerateProxyClasses()); + } + + public function testSetGetProxyNamespace() + { + $this->assertSame(null, $this->configuration->getProxyNamespace()); // defaults + + $this->configuration->setProxyNamespace(__NAMESPACE__); + $this->assertSame(__NAMESPACE__, $this->configuration->getProxyNamespace()); + } + + public function testSetGetMetadataDriverImpl() + { + $this->assertSame(null, $this->configuration->getMetadataDriverImpl()); // defaults + + $metadataDriver = $this->getMock('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver'); + $this->configuration->setMetadataDriverImpl($metadataDriver); + $this->assertSame($metadataDriver, $this->configuration->getMetadataDriverImpl()); + } + + public function testNewDefaultAnnotationDriver() + { + $paths = array(__DIR__); + $reflectionClass = new ReflectionClass(__NAMESPACE__ . '\ConfigurationTestAnnotationReaderChecker'); + + $annotationDriver = $this->configuration->newDefaultAnnotationDriver($paths); + $reader = $annotationDriver->getReader(); + $annotation = $reader->getMethodAnnotation( + $reflectionClass->getMethod('namespacedAnnotationMethod'), + 'Doctrine\ORM\Mapping\PrePersist' + ); + $this->assertInstanceOf('Doctrine\ORM\Mapping\PrePersist', $annotation); + + $annotationDriver = $this->configuration->newDefaultAnnotationDriver($paths, true); + $reader = $annotationDriver->getReader(); + $annotation = $reader->getMethodAnnotation( + $reflectionClass->getMethod('simpleAnnotationMethod'), + 'Doctrine\ORM\Mapping\PrePersist' + ); + $this->assertInstanceOf('Doctrine\ORM\Mapping\PrePersist', $annotation); + } + + public function testSetGetEntityNamespace() + { + $this->configuration->addEntityNamespace('TestNamespace', __NAMESPACE__); + $this->assertSame(__NAMESPACE__, $this->configuration->getEntityNamespace('TestNamespace')); + $namespaces = array('OtherNamespace' => __NAMESPACE__); + $this->configuration->setEntityNamespaces($namespaces); + $this->assertSame($namespaces, $this->configuration->getEntityNamespaces()); + $this->setExpectedException('Doctrine\ORM\ORMException'); + $this->configuration->getEntityNamespace('NonExistingNamespace'); + } + + public function testSetGetQueryCacheImpl() + { + $this->assertSame(null, $this->configuration->getQueryCacheImpl()); // defaults + $queryCacheImpl = $this->getMock('Doctrine\Common\Cache\Cache'); + $this->configuration->setQueryCacheImpl($queryCacheImpl); + $this->assertSame($queryCacheImpl, $this->configuration->getQueryCacheImpl()); + } + + public function testSetGetHydrationCacheImpl() + { + $this->assertSame(null, $this->configuration->getHydrationCacheImpl()); // defaults + $queryCacheImpl = $this->getMock('Doctrine\Common\Cache\Cache'); + $this->configuration->setHydrationCacheImpl($queryCacheImpl); + $this->assertSame($queryCacheImpl, $this->configuration->getHydrationCacheImpl()); + } + + public function testSetGetMetadataCacheImpl() + { + $this->assertSame(null, $this->configuration->getMetadataCacheImpl()); // defaults + $queryCacheImpl = $this->getMock('Doctrine\Common\Cache\Cache'); + $this->configuration->setMetadataCacheImpl($queryCacheImpl); + $this->assertSame($queryCacheImpl, $this->configuration->getMetadataCacheImpl()); + } + + public function testAddGetNamedQuery() + { + $dql = 'SELECT u FROM User u'; + $this->configuration->addNamedQuery('QueryName', $dql); + $this->assertSame($dql, $this->configuration->getNamedQuery('QueryName')); + $this->setExpectedException('Doctrine\ORM\ORMException'); + $this->configuration->getNamedQuery('NonExistingQuery'); + } + + public function testAddGetNamedNativeQuery() + { + $sql = 'SELECT * FROM user'; + $rsm = $this->getMock('Doctrine\ORM\Query\ResultSetMapping'); + $this->configuration->addNamedNativeQuery('QueryName', $sql, $rsm); + $fetched = $this->configuration->getNamedNativeQuery('QueryName'); + $this->assertSame($sql, $fetched[0]); + $this->assertSame($rsm, $fetched[1]); + $this->setExpectedException('Doctrine\ORM\ORMException'); + $this->configuration->getNamedQuery('NonExistingQuery'); + } + + public function ensureProductionSettings() + { + $cache = $this->getMock('Doctrine\Common\Cache\Cache'); + $this->configuration->setAutoGenerateProxyClasses(true); + + try { + $this->configuration->ensureProductionSettings(); + $this->fail('Didn\'t check all production settings'); + } catch (ORMException $e) {} + + $this->configuration->setQueryCacheImpl($cache); + + try { + $this->configuration->ensureProductionSettings(); + $this->fail('Didn\'t check all production settings'); + } catch (ORMException $e) {} + + $this->configuration->setMetadataCacheImpl($cache); + + try { + $this->configuration->ensureProductionSettings(); + $this->fail('Didn\'t check all production settings'); + } catch (ORMException $e) {} + + $this->configuration->setAutoGenerateProxyClasses(false); + $this->configuration->ensureProductionSettings(); + } + + public function testAddGetCustomStringFunction() + { + $this->configuration->addCustomStringFunction('FunctionName', __CLASS__); + $this->assertSame(__CLASS__, $this->configuration->getCustomStringFunction('FunctionName')); + $this->assertSame(null, $this->configuration->getCustomStringFunction('NonExistingFunction')); + $this->configuration->setCustomStringFunctions(array('OtherFunctionName' => __CLASS__)); + $this->assertSame(__CLASS__, $this->configuration->getCustomStringFunction('OtherFunctionName')); + $this->setExpectedException('Doctrine\ORM\ORMException'); + $this->configuration->addCustomStringFunction('concat', __CLASS__); + } + + public function testAddGetCustomNumericFunction() + { + $this->configuration->addCustomNumericFunction('FunctionName', __CLASS__); + $this->assertSame(__CLASS__, $this->configuration->getCustomNumericFunction('FunctionName')); + $this->assertSame(null, $this->configuration->getCustomNumericFunction('NonExistingFunction')); + $this->configuration->setCustomNumericFunctions(array('OtherFunctionName' => __CLASS__)); + $this->assertSame(__CLASS__, $this->configuration->getCustomNumericFunction('OtherFunctionName')); + $this->setExpectedException('Doctrine\ORM\ORMException'); + $this->configuration->addCustomNumericFunction('abs', __CLASS__); + } + + public function testAddGetCustomDatetimeFunction() + { + $this->configuration->addCustomDatetimeFunction('FunctionName', __CLASS__); + $this->assertSame(__CLASS__, $this->configuration->getCustomDatetimeFunction('FunctionName')); + $this->assertSame(null, $this->configuration->getCustomDatetimeFunction('NonExistingFunction')); + $this->configuration->setCustomDatetimeFunctions(array('OtherFunctionName' => __CLASS__)); + $this->assertSame(__CLASS__, $this->configuration->getCustomDatetimeFunction('OtherFunctionName')); + $this->setExpectedException('Doctrine\ORM\ORMException'); + $this->configuration->addCustomDatetimeFunction('date_add', __CLASS__); + } + + public function testAddGetCustomHydrationMode() + { + $this->assertSame(null, $this->configuration->getCustomHydrationMode('NonExisting')); + $this->configuration->addCustomHydrationMode('HydrationModeName', __CLASS__); + $this->assertSame(__CLASS__, $this->configuration->getCustomHydrationMode('HydrationModeName')); + } + + public function testSetGetClassMetadataFactoryName() + { + $this->assertSame('Doctrine\ORM\Mapping\ClassMetadataFactory', $this->configuration->getClassMetadataFactoryName()); + $this->configuration->setClassMetadataFactoryName(__CLASS__); + $this->assertSame(__CLASS__, $this->configuration->getClassMetadataFactoryName()); + } + + public function testAddGetFilters() + { + $this->assertSame(null, $this->configuration->getFilterClassName('NonExistingFilter')); + $this->configuration->addFilter('FilterName', __CLASS__); + $this->assertSame(__CLASS__, $this->configuration->getFilterClassName('FilterName')); + } + + public function setDefaultRepositoryClassName() + { + $this->assertSame('Doctrine\ORM\EntityRepository', $this->configuration->getDefaultRepositoryClassName()); + $repositoryClass = 'Doctrine\Tests\Models\DDC753\DDC753CustomRepository'; + $this->configuration->setDefaultRepositoryClassName($repositoryClass); + $this->assertSame($repositoryClass, $this->configuration->getDefaultRepositoryClassName()); + $this->setExpectedException('Doctrine\ORM\ORMException'); + $this->configuration->setDefaultRepositoryClassName(__CLASS__); + } + + public function testSetGetNamingStrategy() + { + $this->assertInstanceOf('Doctrine\ORM\Mapping\NamingStrategy', $this->configuration->getNamingStrategy()); + $namingStrategy = $this->getMock('Doctrine\ORM\Mapping\NamingStrategy'); + $this->configuration->setNamingStrategy($namingStrategy); + $this->assertSame($namingStrategy, $this->configuration->getNamingStrategy()); + } + + public function testSetGetQuoteStrategy() + { + $this->assertInstanceOf('Doctrine\ORM\Mapping\QuoteStrategy', $this->configuration->getQuoteStrategy()); + $quoteStrategy = $this->getMock('Doctrine\ORM\Mapping\QuoteStrategy'); + $this->configuration->setQuoteStrategy($quoteStrategy); + $this->assertSame($quoteStrategy, $this->configuration->getQuoteStrategy()); + } +} + +class ConfigurationTestAnnotationReaderChecker +{ + /** @PrePersist */ + public function simpleAnnotationMethod() + { + } + + /** @AnnotationNamespace\PrePersist */ + public function namespacedAnnotationMethod() + { + } +}