| 
<?phpnamespace 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());
 }
 }
 |