| 
<?phpnamespace Nkey\Caribu\Tests;
 
 require_once dirname(__FILE__).'/../AbstractDatabaseTestCase.php';
 
 use Nkey\Caribu\Orm\Orm;
 
 use Nkey\Caribu\Tests\Model\Author;
 use Nkey\Caribu\Tests\Model\Book;
 
 /**
 * Relationship test cases
 *
 * This class is part of Caribu package
 *
 * @author Maik Greubel <[email protected]>
 */
 class SimpleReferenceTest extends MySqlAbstractDatabaseTestCase
 {
 
 /**
 * (non-PHPdoc)
 *
 * @see \PHPUnit\DbUnit\TestCase::setUp()
 */
 protected function setUp()
 {
 Orm::passivate();
 
 $connection = $this->getConnection()->getConnection();
 $connection->beginTransaction();
 $connection->exec("DROP TABLE IF EXISTS `books`");
 $connection->exec("DROP TABLE IF EXISTS `authors`");
 $connection->exec("CREATE TABLE `authors` (`id` INTEGER PRIMARY KEY AUTO_INCREMENT, `name` TEXT)");
 $connection->exec("CREATE TABLE `books` (`id` INTEGER PRIMARY KEY AUTO_INCREMENT, `name` TEXT, `summary` TEXT, `authorid` INTEGER, FOREIGN KEY(`authorid`) REFERENCES `authors`(`id`))");
 $connection->commit();
 
 parent::setUp();
 }
 
 /**
 * (non-PHPdoc)
 *
 * @see \PHPUnit\DbUnit\TestCase::tearDown()
 */
 protected function tearDown()
 {
 $connection = $this->getConnection()->getConnection();
 $connection->beginTransaction();
 $connection->exec("DROP TABLE books");
 $connection->exec("DROP TABLE authors");
 $connection->commit();
 
 parent::tearDown();
 }
 
 public function testRelations()
 {
 $author = new Author();
 $author->setName('Steven Hawking');
 
 $book = new Book();
 $book->setName('A brief history of time')
 ->setSummary('From wikipedia: From the Big Bang to Black Holes is a 1988 popular-science book')
 ->setAuthor($author);
 
 $book->persist();
 
 // And we add another book but take the already persisted author
 
 $stevenHawking = Author::find(array("name" => "Steven Hawking"));
 
 $anotherBook = new Book();
 $anotherBook->setName("The Universe in a Nutshell")
 ->setSummary("From wikipedia: Is one of Stephen Hawking's books on theoretical physics.")
 ->setAuthor($stevenHawking);
 
 $anotherBook->persist();
 
 // Now check if everything is fine...
 
 $allHawkingBooks = Book::findAll(array("author.name" => "Steven Hawking"));
 
 $this->assertEquals(2, count($allHawkingBooks));
 
 foreach($allHawkingBooks as $hawkingBook) {
 $this->assertNotNull($hawkingBook);
 $this->assertNotNull($hawkingBook->getAuthor());
 $this->assertEquals("Steven Hawking", $hawkingBook->getAuthor()->getName());
 }
 }
 }
 |