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_1077_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_1077_TestCase extends Doctrine_UnitTestCase 34{ 35 public function prepareTables() 36 { 37 $this->tables[] = 'Ticket_1077_User'; 38 $this->tables[] = 'Ticket_1077_Phonenumber'; 39 parent::prepareTables(); 40 } 41 42 public function testAutomaticAccessorsAndMutators() 43 { 44 $orig = Doctrine_Manager::getInstance()->getAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE); 45 Doctrine_Manager::getInstance()->setAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE, true); 46 $user = new Ticket_1077_User(); 47 $user->username = 'jwage'; 48 $user->password = 'changeme'; 49 $user->save(); 50 $this->assertEqual($user->getPassword(), '4cb9c8a8048fd02294477fcb1a41191a'); 51 $this->assertEqual($user->getUsername(), 'Username: jwage'); 52 $this->assertEqual($user->username, $user->getUsername()); 53 54 try { 55 $phonenumbers = $user->Phonenumbers; 56 $this->fail(); 57 } catch (Exception $e) { 58 $this->assertEqual($e->getMessage(), 'Testing that getPhonenumbers() is invoked'); 59 } 60 61 $numbers = new Doctrine_Collection('Phonenumber'); 62 $user->Phonenumbers = $numbers; 63 64 $this->assertIdentical($user->phonenumbersTest, $numbers); 65 66 Doctrine_Manager::getInstance()->setAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE, $orig); 67 } 68 69 public function testDefiningCustomAccessorsAndMutators() 70 { 71 $user = new Ticket_1077_User(); 72 $user->username = 'jwage'; 73 $user->password = 'changeme'; 74 $user->hasAccessor('username', 'usernameAccessor'); 75 $user->hasMutator('username', 'usernameMutator'); 76 $username = 'test'; 77 $user->usernameMutator($username); 78 $this->assertEqual($user->usernameAccessor(), $user->username); 79 $this->assertEqual($user->usernameAccessor(), $username); 80 } 81} 82 83class Ticket_1077_User extends Doctrine_Record 84{ 85 public $phonenumbersTest = null; 86 87 public function setTableDefinition() 88 { 89 $this->hasColumn('username', 'string', 255); 90 $this->hasColumn('password', 'string', 255); 91 } 92 93 public function setUp() 94 { 95 $this->hasMany('Ticket_1077_Phonenumber as Phonenumbers', array('local' => 'id', 96 'foreign' => 'user_id')); 97 } 98 99 public function usernameAccessor() 100 { 101 return $this->_get('username'); 102 } 103 104 public function usernameMutator($value) 105 { 106 $this->_set('username', $value); 107 } 108 109 public function getPhonenumbers() 110 { 111 throw new Exception('Testing that getPhonenumbers() is invoked'); 112 } 113 114 public function setPhonenumbers($phonenumbers) 115 { 116 $this->phonenumbersTest = $phonenumbers; 117 return $this->_set('Phonenumbers', $phonenumbers); 118 } 119 120 public function getUsername($load = true) 121 { 122 return 'Username: ' . $this->_get('username', $load); 123 } 124 125 public function setPassword($password) 126 { 127 return $this->_set('password', md5($password)); 128 } 129 130 public function getPassword($load = true) 131 { 132 return $this->_get('password', $load); 133 } 134} 135 136class Ticket_1077_Phonenumber extends Doctrine_Record 137{ 138 public function setTableDefinition() 139 { 140 $this->hasColumn('phonenumber', 'string', 55); 141 $this->hasColumn('user_id', 'integer'); 142 } 143 144 public function setUp() 145 { 146 $this->hasOne('Ticket_1077_User as User', array('local' => 'user_id', 147 'foreign' => 'id')); 148 } 149}