| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | <?php
namespace Doctrine\Tests\ORM\Functional;
require_once __DIR__ . '/../../TestInit.php';
/**
 * Tests basic operations on entities with default values.
 *
 * @author robo
 */
class DefaultValuesTest extends \Doctrine\Tests\OrmFunctionalTestCase
{
    protected function setUp() {
        parent::setUp();
        try {
            $this->_schemaTool->createSchema(array(
                $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\DefaultValueUser'),
                $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\DefaultValueAddress')
            ));
        } catch (\Exception $e) {
            // Swallow all exceptions. We do not test the schema tool here.
        }
    }
    public function testSimpleDetachMerge() {
        $user = new DefaultValueUser;
        $user->name = 'romanb';
        $this->_em->persist($user);
        $this->_em->flush();
        $this->_em->clear();
        
        $userId = $user->id; // e.g. from $_REQUEST
        $user2 = $this->_em->getReference(get_class($user), $userId);
        
        $this->_em->flush();
        $this->assertFalse($user2->__isInitialized__);
        
        $a = new DefaultValueAddress;
        $a->country = 'de';
        $a->zip = '12345';
        $a->city = 'Berlin';
        $a->street = 'Sesamestreet';
        
        $a->user = $user2;
        $this->_em->persist($a);
        $this->_em->flush();
        
        $this->assertFalse($user2->__isInitialized__);
        $this->_em->clear();
        
        $a2 = $this->_em->find(get_class($a), $a->id);
        $this->assertTrue($a2->getUser() instanceof DefaultValueUser);
        $this->assertEquals($userId, $a2->getUser()->getId());
        $this->assertEquals('Poweruser', $a2->getUser()->type);
    }
    /**
     * @group DDC-1386
     */
    public function testGetPartialReferenceWithDefaultValueNotEvalutedInFlush()
    {
        $user = new DefaultValueUser;
        $user->name = 'romanb';
        $user->type = 'Normaluser';
        
        $this->_em->persist($user);
        $this->_em->flush();
        $this->_em->clear();
        $user = $this->_em->getPartialReference('Doctrine\Tests\ORM\Functional\DefaultValueUser', $user->id);
        $this->assertTrue($this->_em->getUnitOfWork()->isReadOnly($user));
        $this->_em->flush();
        $this->_em->clear();
        $user = $this->_em->find('Doctrine\Tests\ORM\Functional\DefaultValueUser', $user->id);
        $this->assertEquals('Normaluser', $user->type);
    }
}
/**
 * @Entity @Table(name="defaultvalueuser")
 */
class DefaultValueUser
{
    /**
     * @Id @Column(type="integer")
     * @GeneratedValue(strategy="AUTO")
     */
    public $id;
    /**
     * @Column(type="string")
     */
    public $name = '';
    /**
     * @Column(type="string")
     */
    public $type = 'Poweruser';
    /**
     * @OneToOne(targetEntity="DefaultValueAddress", mappedBy="user", cascade={"persist"})
     */
    public $address;
    
    public function getId() {return $this->id;}
}
/**
 * CmsAddress
 *
 * @Entity @Table(name="defaultvalueaddresses")
 */
class DefaultValueAddress
{
    /**
     * @Column(type="integer")
     * @Id @GeneratedValue(strategy="AUTO")
     */
    public $id;
    /**
     * @Column(type="string", length=50)
     */
    public $country;
    /**
     * @Column(type="string", length=50)
     */
    public $zip;
    /**
     * @Column(type="string", length=50)
     */
    public $city;
    /**
     * Testfield for Schema Updating Tests.
     */
    public $street;
    /**
     * @OneToOne(targetEntity="DefaultValueUser")
     * @JoinColumn(name="user_id", referencedColumnName="id")
     */
    public $user;
    
    public function getUser() {return $this->user;}
}
 |