<?php 
namespace Nkey\Caribu\Tests; 
 
require_once dirname(__FILE__) . '/../AbstractDatabaseTestCase.php'; 
require_once dirname(__FILE__) . '/../Model/ReferencedGuestBook.php'; 
require_once dirname(__FILE__) . '/../Model/User.php'; 
 
use Nkey\Caribu\Orm\Orm; 
use Nkey\Caribu\Tests\Model\ReferencedGuestBook; 
use Nkey\Caribu\Tests\Model\User; 
 
/** 
 * Complex test cases 
 * 
 * This class is part of Caribu package 
 * 
 * @author Maik Greubel <[email protected]> 
 */ 
class ReferencesTest extends AbstractDatabaseTestCase 
{ 
 
    public function __construct() 
    { 
        parent::__construct(); 
         
        $this->options = array( 
            'type' => 'sqlite', 
            'file' => ':memory:' 
        ); 
 
        $this->dataSetFile = dirname(__FILE__) . '/../_files/referenced-guestbook-seed.xml'; 
    } 
 
    /** 
     * (non-PHPdoc) 
     * 
     * @see \PHPUnit\DbUnit\TestCase::setUp() 
     */ 
    protected function setUp() 
    { 
        Orm::passivate(); 
 
        $connection = $this->getConnection()->getConnection(); 
        $connection->beginTransaction(); 
        $connection->exec("CREATE TABLE guestbook (id INTEGER PRIMARY KEY AUTOINCREMENT, content TEXT, user INTEGER, created TEXT)"); 
        $connection->exec("CREATE TABLE user (uid INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT)"); 
        $connection->commit(); 
 
        parent::setUp(); 
    } 
 
    /** 
     * (non-PHPdoc) 
     * 
     * @see \PHPUnit\DbUnit\TestCase::tearDown() 
     */ 
    protected function tearDown() 
    { 
        $connection = $this->getConnection()->getConnection(); 
        $connection->beginTransaction(); 
        $connection->exec("DROP TABLE user"); 
        $connection->exec("DROP TABLE guestbook"); 
        $connection->commit(); 
 
        parent::tearDown(); 
    } 
 
    /** 
     * Test retrieval of referenced entities 
     */ 
    public function testReferencedGet() 
    { 
        $entity = ReferencedGuestBook::get(1); 
        $this->assertFalse(is_null($entity)); 
        $this->assertFalse(is_null($entity->getUser())); 
        $this->assertTrue($entity->getUser() instanceof User); 
        $this->assertEquals(1, $entity->getUser() 
            ->getId()); 
    } 
 
    public function testFindViaProperty() 
    { 
        $entity = ReferencedGuestBook::find(array("gid" => 1)); 
        $this->assertFalse(is_null($entity)); 
        $this->assertFalse(is_null($entity->getUser())); 
        $this->assertTrue($entity->getUser() instanceof User); 
        $this->assertEquals(1, $entity->getUser() 
            ->getId()); 
    } 
 
    /** 
     * Test persisting referenced entities 
     */ 
    public function testReferencedPersist() 
    { 
        $user = new User(); 
        $user->setName("theodore"); 
        $user->setEmail("[email protected]"); 
 
        $entity = new ReferencedGuestBook(); 
        $entity->setCreated(time()); 
        $entity->setContent("Hey! Cool!"); 
        $entity->setUser($user); 
 
        $entity->persist(); 
 
        $this->assertFalse(is_null($entity->getGid())); 
        $this->assertFalse(is_null($entity->getUser() 
            ->getId())); 
 
        $id = $entity->getGid(); 
        $uid = $entity->getUser()->getId(); 
 
        unset($user); 
        unset($entity); 
 
        $entity = ReferencedGuestBook::get($id); 
        $this->assertFalse(is_null($entity)); 
        $this->assertFalse(is_null($entity->getUser())); 
        $this->assertEquals($id, $entity->getGid()); 
        $this->assertEquals($uid, $entity->getUser() 
            ->getId()); 
        $this->assertEquals("Hey! Cool!", $entity->getContent()); 
        $this->assertEquals("theodore", $entity->getUser() 
            ->getName()); 
    } 
}
 
 |