1
0
mirror of synced 2024-12-13 22:56:04 +03:00
doctrine2/tests/Inheritance/SingleTableTestCase.php

115 lines
3.8 KiB
PHP

<?php
class Doctrine_Inheritance_SingleTable_TestCase extends Doctrine_UnitTestCase
{
public function prepareData()
{ }
public function prepareTables()
{
$this->tables[] = 'STI_User';
$this->tables[] = 'STI_Manager';
$this->tables[] = 'STI_Customer';
$this->tables[] = 'STI_SuperManager';
parent::prepareTables();
}
public function testMetadataSetup()
{
$userTable = $this->conn->getTable('STI_User');
$superManagerTable = $this->conn->getTable('STI_SuperManager');
$managerTable = $this->conn->getTable('STI_Manager');
$customerTable = $this->conn->getTable('STI_Customer');
$this->assertTrue($superManagerTable === $userTable);
$this->assertTrue($customerTable === $managerTable);
$this->assertTrue($superManagerTable === $managerTable);
$this->assertTrue($userTable === $customerTable);
$this->assertEqual(7, count($userTable->getColumns()));
$this->assertEqual(array(), $userTable->getOption('joinedParents'));
$this->assertEqual(array(), $superManagerTable->getOption('joinedParents'));
$this->assertEqual(array(), $managerTable->getOption('joinedParents'));
$this->assertEqual(array(), $customerTable->getOption('joinedParents'));
// check inheritance map
$this->assertEqual(array(
'STI_User' => array('type' => 1),
'STI_Manager' => array('type' => 2),
'STI_Customer' => array('type' => 3),
'STI_SuperManager' => array('type' => 4)), $userTable->getOption('inheritanceMap'));
//var_dump($superManagerTable->getComponentName());
}
public function testSave()
{
$manager = new STI_Manager();
$manager->salary = 80000;
$manager->name = 'John Smith';
try {
$manager->save();
$this->assertEqual(1, $manager->id);
$this->assertEqual(80000, $manager->salary);
$this->assertEqual('John Smith', $manager->name);
$this->assertEqual(2, $manager->type);
} catch (Exception $e) {
$this->fail("Saving record in single table inheritance failed: " . $e->getMessage());
}
}
public function testQuery()
{
//$this->_createManager();
$query = $this->conn->createQuery();
$query->select("m.*")->from("STI_Manager m");
//echo $query->getSql();
//$managers = $query->execute();
}
}
class STI_User extends Doctrine_Record
{
public function setTableDefinition()
{
$this->setInheritanceType(Doctrine::INHERITANCETYPE_SINGLE_TABLE,
array('STI_User' => array('type' => 1),
'STI_Manager' => array('type' => 2),
'STI_Customer' => array('type' => 3),
'STI_SuperManager' => array('type' => 4))
);
$this->setTableName('sti_entity');
$this->hasColumn('sti_id as id', 'integer', 4, array('primary' => true, 'autoincrement' => true));
$this->hasColumn('sti_foo as foo', 'integer', 4);
$this->hasColumn('sti_name as name', 'varchar', 50);
$this->hasColumn('type', 'integer', 4);
}
}
class STI_Manager extends STI_User
{
public function setTableDefinition()
{
$this->hasColumn('stim_salary as salary', 'varchar', 50, array());
}
}
class STI_Customer extends STI_User
{
public function setTableDefinition()
{
$this->hasColumn('stic_bonuspoints as bonuspoints', 'varchar', 50, array());
}
}
class STI_SuperManager extends STI_Manager
{
public function setTableDefinition()
{
$this->hasColumn('stism_gosutitle as gosutitle', 'varchar', 50, array());
}
}