PHP Classes

File: tests/persistence/UserMapperTest.php

Recommend this page to a friend!
  Classes of Gjero Krsteski   Building an Identity Map in PHP   tests/persistence/UserMapperTest.php   Download  
File: tests/persistence/UserMapperTest.php
Role: Unit test script
Content type: text/plain
Description: UserMapperTest
Class: Building an Identity Map in PHP
Retrieve objects avoiding multiple instances
Author: By
Last change: Update of tests/persistence/UserMapperTest.php
Date: 3 months ago
Size: 3,047 bytes
 

Contents

Class file image Download
<?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);
    }
  }
}