Anton Grebnev
13 years ago
1 changed files with 203 additions and 0 deletions
@ -0,0 +1,203 @@ |
|||
<?php |
|||
|
|||
/* |
|||
* @copyright NetMonsters <team@netmonsters.ru> |
|||
* @link http://netmonsters.ru |
|||
* @package Majestic |
|||
* @subpackage UnitTests |
|||
* @since 2011-11-7 |
|||
* |
|||
* Unit tests for MongoModel class |
|||
*/ |
|||
|
|||
require_once dirname(__FILE__) . '/../../Registry.php'; |
|||
require_once dirname(__FILE__) . '/../../Config.php'; |
|||
require_once dirname(__FILE__) . '/../../cache/Cacher.php'; |
|||
require_once dirname(__FILE__) . '/../../model/DbExpr.php'; |
|||
require_once dirname(__FILE__) . '/../../model/Db.php'; |
|||
require_once dirname(__FILE__) . '/../../model/MongoDbCommand.php'; |
|||
require_once dirname(__FILE__) . '/../../model/DbStatement.php'; |
|||
require_once dirname(__FILE__) . '/../../model/MongoStatement.php'; |
|||
require_once dirname(__FILE__) . '/../../model/DbDriver.php'; |
|||
require_once dirname(__FILE__) . '/../../model/NoSqlDbDriver.php'; |
|||
require_once dirname(__FILE__) . '/../../model/MongoDriver.php'; |
|||
require_once dirname(__FILE__) . '/../../model/Model.php'; |
|||
require_once dirname(__FILE__) . '/../../model/MongoModel.php'; |
|||
|
|||
class MongoModelTest extends PHPUnit_Framework_TestCase |
|||
{ |
|||
|
|||
private $model; |
|||
|
|||
public function run(PHPUnit_Framework_TestResult $result = NULL) |
|||
{ |
|||
$this->setPreserveGlobalState(false); |
|||
return parent::run($result); |
|||
} |
|||
|
|||
public function setUp() |
|||
{ |
|||
$conf = array('default' => array('driver' => 'MongoDriver', 'hostname' => 'localhost', 'database' => 'test', 'username' => 'test', 'password' => '1234', 'port' => 27017)); |
|||
|
|||
$this->dbSetUp($conf); |
|||
|
|||
Config::set('Db', $conf); |
|||
if (!class_exists('MockModel')) { |
|||
$this->model = $this->getMockForAbstractClass('MongoModel', array(), 'MongoMockModel'); |
|||
} else { |
|||
$this->model = new MongoMockModel(); |
|||
} |
|||
set_new_overload(array($this, 'newCallback')); |
|||
} |
|||
|
|||
public function testModel() |
|||
{ |
|||
$this->assertInstanceOf('MongoMockModel', $this->model); |
|||
} |
|||
|
|||
/** |
|||
* @runInSeparateProcess |
|||
*/ |
|||
public function testFind() |
|||
{ |
|||
if (!defined('DEBUG')) { |
|||
define('DEBUG', false); |
|||
} |
|||
$result = $this->model->find(); |
|||
$this->assertInstanceOf('MongoStatement', $result); |
|||
$this->assertEquals('milk', $result->limit(2)->order(array('name' => -1))->fetch()->name); |
|||
$this->assertEquals('fish', $result->fetch()->name); |
|||
} |
|||
|
|||
/** |
|||
* @runInSeparateProcess |
|||
*/ |
|||
public function testGet() |
|||
{ |
|||
if (!defined('DEBUG')) { |
|||
define('DEBUG', false); |
|||
} |
|||
$result = $this->model->find()->limit(1)->order(array('name' => 1)); |
|||
$result = $result->fetch(); |
|||
$this->assertEquals('bread', $result->name); |
|||
$id = $result->_id; |
|||
$this->assertEquals(10, $this->model->get($id)->quantity); |
|||
} |
|||
|
|||
/** |
|||
* @runInSeparateProcess |
|||
*/ |
|||
public function testDelete() |
|||
{ |
|||
if (!defined('DEBUG')) { |
|||
define('DEBUG', false); |
|||
} |
|||
$result = $this->model->find()->limit(1)->order(array('name' => 1)); |
|||
$id = $result->fetch()->_id; |
|||
$this->assertEquals(1, $this->model->delete($id)); |
|||
$this->assertFalse($this->model->find(array('name' => 'bread'))->fetch()); |
|||
} |
|||
|
|||
/** |
|||
* @runInSeparateProcess |
|||
*/ |
|||
public function testFetch() |
|||
{ |
|||
if (!defined('DEBUG')) { |
|||
define('DEBUG', false); |
|||
} |
|||
|
|||
$mock = $this->getMock('CacheKey', array('set', 'get')); |
|||
$mock->expects($this->exactly(3)) |
|||
->method('set') |
|||
->will($this->returnValue(true)); |
|||
$mock->expects($this->exactly(3)) |
|||
->method('get') |
|||
->will($this->returnValue(false)); |
|||
|
|||
$model = new ReflectionClass('MongoModel'); |
|||
$method = $model->getMethod('fetchField'); |
|||
$method->setAccessible(true); |
|||
|
|||
$result = $method->invoke($this->model, array('name' => 'milk'), array(), 'quantity', $mock); |
|||
$this->assertEquals(1, $result); |
|||
|
|||
$model = new ReflectionClass('MongoModel'); |
|||
$method = $model->getMethod('fetch'); |
|||
$method->setAccessible(true); |
|||
|
|||
$result = $method->invoke($this->model, array('name' => 'bread'), array(), $mock); |
|||
$this->assertEquals('bread', $result->name); |
|||
|
|||
$model = new ReflectionClass('MongoModel'); |
|||
$method = $model->getMethod('fetchAll'); |
|||
$method->setAccessible(true); |
|||
|
|||
$result = $method->invoke($this->model, array('name' => 'eggs'), array(), $mock); |
|||
$this->assertEquals(2, count($result)); |
|||
$this->assertEquals('eggs', $result[0]->name); |
|||
} |
|||
|
|||
public function tearDown() |
|||
{ |
|||
$conf = array('driver' => 'MongoDriver', 'hostname' => 'localhost', 'database' => 'test', 'username' => 'test', 'password' => '1234', 'port' => 27017); |
|||
|
|||
|
|||
$connection = new Mongo('mongodb://' . $conf['hostname'] . ':' . $conf['port']); |
|||
$db = $connection->selectDB($conf['database']); |
|||
$db->authenticate($conf['username'], $conf['password']); |
|||
$collection = 'mongomock'; |
|||
$db->dropCollection($collection); |
|||
} |
|||
|
|||
protected function newCallback($className) |
|||
{ |
|||
switch ($className) { |
|||
case 'CacheKey': |
|||
return 'MockCacheKey'; |
|||
default: |
|||
return $className; |
|||
} |
|||
} |
|||
|
|||
public function dbSetUp($conf) |
|||
{ |
|||
$data = array( |
|||
array( |
|||
'name' => 'bread', |
|||
'price' => 3.2, |
|||
'quantity' => 10 |
|||
), |
|||
array( |
|||
'name' => 'eggs', |
|||
'price' => 2.1, |
|||
'quantity' => 20 |
|||
), |
|||
array( |
|||
'name' => 'fish', |
|||
'price' => 13.2, |
|||
'quantity' => 2 |
|||
), |
|||
array( |
|||
'name' => 'milk', |
|||
'price' => 3.8, |
|||
'quantity' => 1 |
|||
), |
|||
array( |
|||
'name' => 'eggs', |
|||
'price' => 2.3, |
|||
'quantity' => 5 |
|||
) |
|||
); |
|||
$connection = new Mongo('mongodb://' . $conf['default']['hostname'] . ':' . $conf['default']['port']); |
|||
$db = $connection->selectDB($conf['default']['database']); |
|||
$db->authenticate($conf['default']['username'], $conf['default']['password']); |
|||
$collection = 'mongomock'; |
|||
$db->dropCollection($collection); |
|||
$collection = $db->selectCollection($collection); |
|||
foreach($data as $document) { |
|||
$collection->insert($document); |
|||
} |
|||
} |
|||
|
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue