<?php 
class UserMapperTest extends PHPUnit_Extensions_Database_TestCase 
{ 
  protected $db; 
 
  /** 
   * @var UserMapper 
   */ 
  protected $mapper; 
 
  protected function setUp() 
  { 
    $this->db = new PDO( 
      $GLOBALS['DB_DSN'], 
      $GLOBALS['DB_USER'], 
      $GLOBALS['DB_PASSWD'], 
      array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") 
    ); 
 
    $this->db->exec( 
      file_get_contents( 
        dirname(dirname(dirname(__FILE__))) . '/database/tbl_user.sql' 
      ) 
    ); 
 
    $this->mapper = new UserMapper($this->db); 
 
    parent::setUp(); 
  } 
 
  public function getConnection() 
  { 
    return $this->createDefaultDBConnection($this->db, $GLOBALS['DB_DBNAME']); 
  } 
 
  public function getDataSet() 
  { 
    return $this->createFlatXMLDataSet( 
      __DIR__ . '/fixture/user-seed.xml' 
    ); 
  } 
 
  /** 
   * @test 
   */ 
  public function UserCanBeFoundById() 
  { 
    $user = $this->mapper->find(1); 
 
    $this->assertEquals('joe123', $user->getNickname()); 
  } 
 
  /** 
   * @test 
   */ 
  public function InsertingNewUserAndCompareObjectsThanDelete() 
  { 
    $user = new User('billy', 'gatter'); 
 
    $insertId = $this->mapper->insert($user); 
 
    $user2 = $this->mapper->find($insertId); 
 
    $this->assertTrue($user === $user2); 
    $this->assertTrue($this->mapper->delete($user2)); 
  } 
 
  /** 
   * @test 
   * @expectedException OutOfBoundsException 
   */ 
  public function UserCanNotBeFoundById() 
  { 
    $this->mapper->find(123); 
  } 
 
  /** 
   * @test 
   */ 
  public function UserCanBeInserted() 
  { 
    $newUser = new User('maxf', 'love123'); 
 
    $lastinsertId = $this->mapper->insert($newUser); 
 
    $this->assertEquals(3, $lastinsertId); 
 
    $user = $this->mapper->find($lastinsertId); 
 
    $this->assertEquals('maxf', $user->getNickname()); 
  } 
 
  /** 
   * @test 
   */ 
  public function IdentityMapInteractionAndConsistency() 
  { 
    $user1 = $this->mapper->find(1); 
    $user2 = $this->mapper->find(1); 
 
    // expects same nickname in each object. 
    $this->assertEquals($user2->getNickname(), $user1->getNickname()); 
 
    // update the nickname on user1. 
    $user2->setNickname('tucker'); 
 
    // expects same nickname in each object. 
    $this->assertEquals($user2->getNickname(), $user1->getNickname()); 
 
    // than update into the database. 
    $this->mapper->update($user2); 
  } 
 
  /** 
   * @test 
   */ 
  public function PersistUserWithSomeArticles() 
  { 
    $newUser = new User('Conan', 'He rocks!'); 
    $newUser->addArticle('Conan I', 'Some content about Conan') 
            ->addArticle('Conan II', 'Some content about Conan') 
            ->addArticle('Rambo III', 'Some content about Rambo'); 
 
    $lastUserId = $this->mapper->insert($newUser); 
 
    // unset the user-mapper and the identity-map - force db connection. 
    unset($this->mapper); 
 
    // create new user-mapper with new identity-map. 
    $this->mapper = new UserMapper($this->db); 
 
    $user = $this->mapper->find($lastUserId); 
 
    foreach ($user->getArticles() as $article) { 
      $this->assertInstanceOf('Article', $article); 
    } 
  } 
} 
 
 |