1
0
mirror of synced 2024-12-15 07:36:03 +03:00
doctrine2/website/plugins/sfDoctrinePlugin/test/unit/addon/sfDoctrineSchemaDoctrineLoaderTest.php
2007-09-12 21:56:14 +00:00

104 lines
4.1 KiB
PHP
Executable File

<?php
/*
* This file is part of the sfDoctrine package.
* (c) 2006-2007 Olivier Verdier <Olivier.Verdier@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* @package symfony.plugins
* @subpackage sfDoctrine
* @author Pavel Kunc
* @author Olivier Verdier <Olivier.Verdier@gmail.com>
* @version SVN: $Id: sfDoctrineSchemaDoctrineLoaderTest.php 3455 2007-02-14 16:17:48Z chtito $
*/
//We need bootStrap
require_once(dirname(__FILE__).'/../../bootstrap/unit.php');
$t = new lime_test(null,new lime_output_color());
class sfDoctrineSchemaDoctrineLoaderTestProxy extends sfDoctrineSchemaDoctrineLoader {
/**
* Lime test object
*
* @var lime_test
*/
private $t = null;
/**
* Constructor
*
* @param lime_test $testObject
*/
function __construct($testObject) {
$this->t = $testObject;
}
/**
* Test launcher
*
* @param string $schema Path to schema file
*/
function launchTests($schema) {
$this->t->diag('->load()');
$this->load($schema);
$this->process();
$yml = $this->asDoctrineYml();
$this->t->diag('->getClasses()');
$classes = $this->getClasses();
$nbClasses = 12;
$this->t->is(count($classes), $nbClasses,"->getClasses() should return $nbClasses classes from fixture.");
$this->t->diag('->getClass()');
$class = $this->getClass('TestClass');
#$this->t->ok($class->isTable(),"->getClass() should return return class instance.");
$this->t->diag('->parentTable()');
$table = $this->parentTable($class);
$this->t->is(get_class($table), 'sfDoctrineTableSchema', "->parentTable() should return table instance.");
$this->t->is($this->getClass('ColAggregation')->getTableName(), 'parent_table', 'inheritance gets the right parent table');
#$this->t->ok($this->getClass('SeparateTable')->isTable(), '"SeparateTable" is a table-class');
$this->t->is($this->getClass('BookI18n')->getColumn('culture')->getProperty('type'), 'string', 'culture field is defined (as a string)');
$rel = $this->getClass('BookI18n')->getRelation('id');
$this->t->is($rel->get('localName'), 'BookI18n', 'i18n relation name is not a plural');
$this->t->is($this->getClass('ColAggregation')->getTable()->getColumn('class_key')->getProperty('type'), 'integer', 'inheritance field is defined (as an integer)');
$c = $this->getClass('SeparateTable');
$SeparateTablePhp = $c->asPhp();
$SeparateTableSource = $SeparateTablePhp[0]['source'];
$this->t->like($SeparateTableSource, '/extends Parent/', 'The class "SeparateTable" extends Parent without having any class key field');
$this->t->like($SeparateTableSource, '@setTableName\(\'separate_table\'\)@', 'class "SeparateTable" has both a table and inheritance');
$this->t->like($SeparateTableSource, '@parent::setTableDefinition\(\);@', 'class "SeparateTable" calls parent::setTableDefinition');
$colAggregationPhp = $this->getClass('ColAggregation')->asPhp();
$this->t->like($colAggregationPhp[0]['source'], "@setInheritanceMap\(array\('class_key'=>1\)\)@", 'setInheritanceMap is properly set');
$this->t->diag('relationships');
$yangPhp = $this->getClass('Yin')->asPhp();
$this->t->like($yangPhp[0]['source'], "#hasOne\('Yang as Yang', 'Yin.yang_id', 'id'\)#", 'one to one relationships is properly declared');
$userPhp = $this->getClass('User')->asPhp();
$this->t->like($userPhp[0]['source'], "#hasMany\('Book as Books', 'Book.author_id'\)#", 'hasMany is properly declared');
$this->t->like($userPhp[0]['source'], "#hasMany\('Group as Groups', 'User2Group.group_id'\)#", 'has many to many properly declared');
$userGroupPhp = $this->getClass('User2Group')->asPhp();
$this->t->like($userGroupPhp[0]['source'], "#ownsOne\('User as User', 'User2Group.group_id', 'id'\)#", 'has many to many with cascade properly defined');
}
}
//Load doctrine schema from fixtures and run tests
$schemaFixture = dirname(__FILE__)."/fixtures/doctrineTestSchema.yml";
$schema = new sfDoctrineSchemaDoctrineLoaderTestProxy($t);
$schema->launchTests($schemaFixture);