SingleTableTestCase.php 3.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
<?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()
    { 
20 21 22 23
        $userClass = $this->conn->getClassMetadata('STI_User');
        $superManagerClass = $this->conn->getClassMetadata('STI_SuperManager');
        $managerClass = $this->conn->getClassMetadata('STI_Manager');
        $customerClass = $this->conn->getClassMetadata('STI_Customer');
24
        
25 26 27
        $this->assertEqual(4, count($userClass->getMappedColumns()));
        $this->assertEqual('sti_entity', $userClass->getTableName());
        $this->assertEqual('sti_entity', $managerClass->getTableName());
28 29
        
        // check inheritance map
30 31 32
        $this->assertEqual(array(1 => 'STI_User',
              2 => 'STI_Manager',
              3 => 'STI_Customer',
33
              4 => 'STI_SuperManager'), $userClass->getInheritanceOption('discriminatorMap'));
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
        
        //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());
        }
    }
53 54 55 56 57 58 59 60 61 62
    
    public function testQuery()
    {
        //$this->_createManager();
        $query = $this->conn->createQuery();
        $query->select("m.*")->from("STI_Manager m");
        //echo $query->getSql();
        //$managers = $query->execute();
        
    }
63 64 65
}


66
class STI_User extends Doctrine_Entity
67
{
68
    public static function initMetadata($class)
69
    {
romanb's avatar
romanb committed
70
        $class->setInheritanceType(Doctrine::INHERITANCE_TYPE_SINGLE_TABLE, array(
71 72 73 74 75 76
                'discriminatorColumn' => 'type',
                'discriminatorMap' => array(
                      1 => 'STI_User',
                      2 => 'STI_Manager',
                      3 => 'STI_Customer',
                      4 => 'STI_SuperManager'))
77
        );
78 79 80 81 82 83
        $class->setSubclasses(array('STI_Manager', 'STI_Customer', 'STI_SuperManager'));
        $class->setTableName('sti_entity');
        $class->setColumn('sti_id as id', 'integer', 4, array('primary' => true, 'autoincrement' => true));
        $class->setColumn('sti_foo as foo', 'integer', 4);
        $class->setColumn('sti_name as name', 'varchar', 50);
        $class->setColumn('type', 'integer', 4);
84 85 86 87 88
    }
}

class STI_Manager extends STI_User 
{
89
    public static function initMetadata($class)
90
    {
91 92
        $class->setSubclasses(array('STI_SuperManager'));
        $class->setColumn('stim_salary as salary', 'varchar', 50, array());
93 94 95 96 97
    }
}

class STI_Customer extends STI_User
{
98
    public static function initMetadata($class)
99
    {
100
        $class->setColumn('stic_bonuspoints as bonuspoints', 'varchar', 50, array());
101 102 103 104 105
    }
}

class STI_SuperManager extends STI_Manager
{
106
    public static function initMetadata($class)
107
    {
108
        $class->setColumn('stism_gosutitle as gosutitle', 'varchar', 50, array());
109 110
    }
}