1<?php 2/* 3 * $Id$ 4 * 5 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 6 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 7 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 8 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 9 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 10 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 11 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 12 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 13 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 14 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 15 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 16 * 17 * This software consists of voluntary contributions made by many individuals 18 * and is licensed under the LGPL. For more information, see 19 * <http://www.doctrine-project.org>. 20 */ 21 22/** 23 * Doctrine_Ticket_1280_TestCase 24 * 25 * @package Doctrine 26 * @author Konsta Vesterinen <kvesteri@cc.hut.fi> 27 * @license http://www.opensource.org/licenses/lgpl-license.php LGPL 28 * @category Object Relational Mapping 29 * @link www.doctrine-project.org 30 * @since 1.0 31 * @version $Revision$ 32 */ 33class Doctrine_Ticket_1131_TestCase extends Doctrine_UnitTestCase 34{ 35 public function prepareTables() 36 { 37 //$this->tables = array(); 38 $this->tables[] = 'Ticket_1131_User'; 39 $this->tables[] = 'Ticket_1131_Group'; 40 $this->tables[] = 'Ticket_1131_Role'; 41 parent::prepareTables(); 42 } 43 44 45 public function prepareData() 46 { 47 parent::prepareData(); 48 49 $role = new Ticket_1131_Role(); 50 $role->name = 'Role One'; 51 $role->save(); 52 $this->role_one = $role->id; 53 $role->free(); 54 55 $role = new Ticket_1131_Role(); 56 $role->name = 'Role Two'; 57 $role->save(); 58 $this->role_two = $role->id; 59 $role->free(); 60 61 $group = new Ticket_1131_Group(); 62 $group->role_id = $this->role_one; 63 $group->name = 'Core Dev'; 64 $group->save(); 65 66 $user = new Ticket_1131_User(); 67 $user->Group = $group; 68 $user->role_id = $this->role_two; 69 $user->name = 'jwage'; 70 $user->save(); 71 72 $group->free(); 73 $user->free(); 74 } 75 76 public function testTicket() 77 { 78 $user = Doctrine_Query::create() 79 ->from('Ticket_1131_User u') 80 ->where('u.id = ?')->fetchOne(array(1)); 81 82 $this->assertEqual($user->Group->id, 1); 83 $this->assertFalse($user->get('group_id') instanceof Doctrine_Record); 84 } 85 86 public function testTicketWithOverloadingAndTwoQueries() 87 { 88 $orig = Doctrine_Manager::getInstance()->getAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE); 89 Doctrine_Manager::getInstance()->setAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE, true); 90 91 $user = Doctrine_Query::create() 92 ->from('Ticket_1131_User u') 93 ->where('u.id = ?')->fetchOne(array(1)); 94 95 $user = Doctrine_Query::create() 96 ->from('Ticket_1131_UserWithOverloading u') 97 ->leftJoin('u.Group g') 98 ->leftJoin('u.Role r') 99 ->addWhere('u.id = ?')->fetchOne(array(1)); 100 101 $this->assertEqual($user->Role->id, 1); 102 $this->assertFalse($user->role_id instanceof Doctrine_Record); 103 104 Doctrine_Manager::getInstance()->setAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE, $orig); 105 } 106} 107 108class Ticket_1131_User extends Doctrine_Record 109{ 110 public function setTableDefinition() 111 { 112 $this->hasColumn('group_id', 'integer', 20, array( 113 'notnull' => false, 'default' => null 114 )); 115 $this->hasColumn('role_id', 'integer', 20, array( 116 'notnull' => false, 'default' => null 117 )); 118 $this->hasColumn('name', 'string', 255); 119 } 120 121 public function setUp() 122 { 123 $this->hasOne('Ticket_1131_Group as Group', array( 124 'local' => 'group_id', 125 'foreign' => 'id' 126 )); 127 128 $this->hasOne('Ticket_1131_Role as Role', array( 129 'local' => 'role_id', 130 'foreign' => 'id')); 131 } 132} 133 134class Ticket_1131_UserWithOverloading extends Ticket_1131_User 135{ 136 public function getRole() 137 { 138 return $this->Group->Role; 139 } 140 141 public function getRoleId() 142 { 143 return $this->Group->role_id; 144 } 145} 146 147class Ticket_1131_Group extends Doctrine_Record 148{ 149 public function setTableDefinition() 150 { 151 $this->hasColumn('role_id', 'integer', 20, array( 152 'notnull' => false, 'default' => null 153 )); 154 $this->hasColumn('name', 'string', 255); 155 } 156 157 public function setUp() 158 { 159 $this->hasOne('Ticket_1131_Role as Role', array( 160 'local' => 'role_id', 161 'foreign' => 'id')); 162 163 $this->hasMany('Ticket_1131_User as Users', array( 164 'local' => 'id', 165 'foreign' => 'group_id' 166 )); 167 } 168} 169 170class Ticket_1131_Role extends Doctrine_Record 171{ 172 public function setTableDefinition() 173 { 174 $this->hasColumn('name', 'string', 255); 175 } 176 177 public function setUp() 178 { 179 $this->hasMany('Ticket_1131_User as Users', array( 180 'local' => 'id', 181 'foreign' => 'role_id' 182 )); 183 $this->hasMany('Ticket_1131_Group as Groups', array( 184 'local' => 'id', 185 'foreign' => 'role_id' 186 )); 187 } 188}