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_990_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_990_TestCase extends Doctrine_UnitTestCase 34{ 35 public function prepareTables() 36 { 37 $this->tables[] = 'Ticket_990_Person'; 38 parent::prepareTables(); 39 } 40 41 public function testOverwriteIdentityMap() 42 { 43 $person = new Ticket_990_Person(); 44 $person->firstname = 'John'; 45 $person->save(); 46 47 $person->firstname = 'Alice'; 48 49 $person = Doctrine_Core::getTable('Ticket_990_Person')->find($person->id); 50 51 $this->assertEqual('John', $person->firstname); 52 } 53 54 public function testDontOverwriteIdentityMap() 55 { 56 Doctrine_Manager::getInstance()->setAttribute(Doctrine_Core::ATTR_HYDRATE_OVERWRITE, false); 57 58 $user = Doctrine_Core::getTable('User')->createQuery()->fetchOne(); 59 $user->name = 'test'; 60 $user = Doctrine_Core::getTable('User')->find($user->id); 61 $this->assertEqual($user->name, 'test'); 62 63 64 $person = new Ticket_990_Person(); 65 $person->firstname = 'John'; 66 $person->save(); 67 68 $person->firstname = 'Alice'; 69 70 $this->assertEqual(Doctrine_Record::STATE_DIRTY, $person->state()); 71 $this->assertTrue($person->isModified()); 72 $this->assertEqual(array('firstname' => 'Alice'), $person->getModified()); 73 74 $person = Doctrine_Core::getTable('Ticket_990_Person')->find($person->id); 75 76 $this->assertEqual('Alice', $person->firstname); 77 $this->assertEqual(Doctrine_Record::STATE_DIRTY, $person->state()); 78 $this->assertTrue($person->isModified()); 79 $this->assertEqual(array('firstname' => 'Alice'), $person->getModified()); 80 81 Doctrine_Manager::getInstance()->setAttribute(Doctrine_Core::ATTR_HYDRATE_OVERWRITE, true); 82 } 83 84 public function testRefreshAlwaysOverwrites() 85 { 86 Doctrine_Manager::getInstance()->setAttribute(Doctrine_Core::ATTR_HYDRATE_OVERWRITE, false); 87 88 $person = new Ticket_990_Person(); 89 $person->firstname = 'John'; 90 $person->save(); 91 92 $person->firstname = 'Alice'; 93 94 $person->refresh(); 95 96 $this->assertEqual('John', $person->firstname); 97 98 Doctrine_Manager::getInstance()->setAttribute(Doctrine_Core::ATTR_HYDRATE_OVERWRITE, true); 99 } 100} 101 102class Ticket_990_Person extends Doctrine_Record 103{ 104 public function setTableDefinition() 105 { 106 $this->setTableName('person'); 107 $this->hasColumn('id', 'integer', 11, array('primary' => true, 'notnull' => true, 'autoincrement' => true) ); 108 $this->hasColumn('firstname', 'string'); 109 $this->hasColumn('lastname', 'string'); 110 } 111}