2010-05-12 01:08:36 +04:00
< ? php
namespace Doctrine\Tests\ORM\Tools ;
use Doctrine\ORM\Tools\SchemaValidator ;
require_once __DIR__ . '/../../TestInit.php' ;
class SchemaValidatorTest extends \Doctrine\Tests\OrmTestCase
{
/**
* @ var EntityManager
*/
private $em = null ;
/**
* @ var SchemaValidator
*/
private $validator = null ;
public function setUp ()
{
$this -> em = $this -> _getTestEntityManager ();
$this -> validator = new SchemaValidator ( $this -> em );
}
public function testCmsModelSet ()
{
$this -> em -> getConfiguration () -> getMetadataDriverImpl () -> addPaths ( array (
__DIR__ . " /../../Models/CMS "
));
$this -> validator -> validateMapping ();
}
public function testCompanyModelSet ()
{
$this -> em -> getConfiguration () -> getMetadataDriverImpl () -> addPaths ( array (
__DIR__ . " /../../Models/Company "
));
$this -> validator -> validateMapping ();
}
public function testECommerceModelSet ()
{
$this -> em -> getConfiguration () -> getMetadataDriverImpl () -> addPaths ( array (
__DIR__ . " /../../Models/ECommerce "
));
$this -> validator -> validateMapping ();
}
public function testForumModelSet ()
{
$this -> em -> getConfiguration () -> getMetadataDriverImpl () -> addPaths ( array (
__DIR__ . " /../../Models/Forum "
));
$this -> validator -> validateMapping ();
}
public function testNavigationModelSet ()
{
$this -> em -> getConfiguration () -> getMetadataDriverImpl () -> addPaths ( array (
__DIR__ . " /../../Models/Navigation "
));
$this -> validator -> validateMapping ();
}
public function testRoutingModelSet ()
{
$this -> em -> getConfiguration () -> getMetadataDriverImpl () -> addPaths ( array (
__DIR__ . " /../../Models/Routing "
));
$this -> validator -> validateMapping ();
}
2011-10-31 23:49:28 +04:00
/**
* @ group DDC - 1439
*/
public function testInvalidManyToManyJoinColumnSchema ()
{
$class1 = $this -> em -> getClassMetadata ( __NAMESPACE__ . '\InvalidEntity1' );
$class2 = $this -> em -> getClassMetadata ( __NAMESPACE__ . '\InvalidEntity2' );
$ce = $this -> validator -> validateClass ( $class1 );
$this -> assertEquals (
array (
" The inverse join columns of the many-to-many table 'Entity1Entity2' have to contain to ALL identifier columns of the target entity 'Doctrine \T ests \ ORM \T ools \ InvalidEntity2', however 'key4' are missing. " ,
" The join columns of the many-to-many table 'Entity1Entity2' have to contain to ALL identifier columns of the source entity 'Doctrine \T ests \ ORM \T ools \ InvalidEntity1', however 'key2' are missing. "
),
$ce
);
}
/**
* @ group DDC - 1439
*/
public function testInvalidToOneJoinColumnSchema ()
{
$class1 = $this -> em -> getClassMetadata ( __NAMESPACE__ . '\InvalidEntity1' );
$class2 = $this -> em -> getClassMetadata ( __NAMESPACE__ . '\InvalidEntity2' );
$ce = $this -> validator -> validateClass ( $class2 );
$this -> assertEquals (
array (
2012-01-15 15:12:08 +04:00
" The referenced column name 'id' has to be a primary key column on the target entity class 'Doctrine \T ests \ ORM \T ools \ InvalidEntity1'. " ,
" The join columns of the association 'assoc' have to match to ALL identifier columns of the target entity 'Doctrine \T ests \ ORM \T ools \ InvalidEntity2', however 'key1, key2' are missing. "
2011-10-31 23:49:28 +04:00
),
$ce
);
}
2012-01-17 07:31:14 +04:00
/**
* @ group DDC - 1587
*/
public function testValidOneToOneAsIdentifierSchema ()
{
$class1 = $this -> em -> getClassMetadata ( __NAMESPACE__ . '\DDC1587ValidEntity2' );
$class2 = $this -> em -> getClassMetadata ( __NAMESPACE__ . '\DDC1587ValidEntity1' );
$ce = $this -> validator -> validateClass ( $class1 );
$this -> assertEquals ( array (), $ce );
}
2012-02-20 18:34:02 +04:00
/**
* @ group DDC - 1649
*/
public function testInvalidTripleAssociationAsKeyMapping ()
{
$classThree = $this -> em -> getClassMetadata ( __NAMESPACE__ . '\DDC1649Three' );
$ce = $this -> validator -> validateClass ( $classThree );
$this -> assertEquals ( Array (
" Cannot map association 'Doctrine \T ests \ ORM \T ools \ DDC1649Three#two as identifier, because the target entity 'Doctrine \T ests \ ORM \T ools \ DDC1649Two' also maps an association as identifier. " ,
" The referenced column name 'id' has to be a primary key column on the target entity class 'Doctrine \T ests \ ORM \T ools \ DDC1649Two'. "
), $ce );
}
2011-10-31 23:49:28 +04:00
}
/**
* @ Entity
*/
class InvalidEntity1
{
/**
* @ Id @ Column
*/
protected $key1 ;
/**
* @ Id @ Column
*/
protected $key2 ;
/**
* @ ManyToMany ( targetEntity = " InvalidEntity2 " )
* @ JoinTable ( name = " Entity1Entity2 " ,
* joinColumns = { @ JoinColumn ( name = " key1 " , referencedColumnName = " key1 " )},
* inverseJoinColumns = { @ JoinColumn ( name = " key3 " , referencedColumnName = " key3 " )}
* )
*/
protected $entity2 ;
}
/**
* @ Entity
*/
class InvalidEntity2
{
/**
* @ Id @ Column
*/
protected $key3 ;
/**
* @ Id @ Column
*/
protected $key4 ;
/**
* @ ManyToOne ( targetEntity = " InvalidEntity1 " )
*/
protected $assoc ;
2011-12-18 03:32:35 +04:00
}
2012-01-17 07:31:14 +04:00
/**
* @ Entity ( repositoryClass = " Entity \R epository \ Agent " )
* @ Table ( name = " agent " )
*/
class DDC1587ValidEntity1
{
/**
* @ var int
*
* @ Id @ GeneratedValue
* @ Column ( name = " pk " , type = " integer " )
*/
private $pk ;
/**
* @ var string
*
* @ Column ( name = " name " , type = " string " , length = 32 )
*/
private $name ;
/**
* @ var Identifier
*
* @ OneToOne ( targetEntity = " DDC1587ValidEntity2 " , cascade = { " all " }, mappedBy = " agent " )
* @ JoinColumn ( name = " pk " , referencedColumnName = " pk_agent " )
*/
private $identifier ;
}
/**
* @ Entity
* @ Table
*/
class DDC1587ValidEntity2
{
/**
* @ var DDC1587ValidEntity1
*
* @ Id
* @ OneToOne ( targetEntity = " DDC1587ValidEntity1 " , inversedBy = " identifier " )
* @ JoinColumn ( name = " pk_agent " , referencedColumnName = " pk " , nullable = false )
*/
private $agent ;
/**
* @ var string
*
* @ Column ( name = " num " , type = " string " , length = 16 , nullable = true )
*/
private $num ;
}
2012-02-20 18:34:02 +04:00
/**
* @ Entity
*/
class DDC1649One
{
/**
* @ Id @ Column @ GeneratedValue
*/
public $id ;
}
/**
* @ Entity
*/
class DDC1649Two
{
/** @Id @ManyToOne(targetEntity="DDC1649One")@JoinColumn(name="id", referencedColumnName="id") */
public $one ;
}
/**
* @ Entity
*/
class DDC1649Three
{
/** @ Id @ ManyToOne ( targetEntity = " DDC1649Two " ) @ JoinColumn ( name = " id " ,
* referencedColumnName = " id " ) */
private $two ;
}