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