You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

182 lines
6.9 KiB

<?php
/*
* @copyright NetMonsters <team@netmonsters.ru>
* @link http://netmonsters.ru
* @package Majestic
* @subpackage UnitTests
* @since 2011-11-10
*
* Unit tests for MongoDriver class
*/
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/MongoDbCommand.php';
class MongoDbCommandTest extends PHPUnit_Framework_TestCase
{
private $conf = array();
private $driver;
public function setUp()
{
$this->conf = array(
'hostname' => 'localhost',
'database' => 'test',
'username' => 'test',
'password' => '1234',
'port' => 27017
);
$this->driver = new MongoDriver($this->conf);
$connection = $this->driver->getConnection();
$db = $connection->selectDB($this->conf['database']);
$db->authenticate($this->conf['username'], $this->conf['password']);
$collection = 'items';
$db->dropCollection($collection);
}
public function testCommandFactory()
{
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::FIND);
$this->assertInstanceOf('MongoDbCommand', $cmd);
$this->assertInstanceOf('FindMongoCommand', $cmd);
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::INSERT);
$this->assertInstanceOf('MongoDbCommand', $cmd);
$this->assertInstanceOf('InsertMongoCommand', $cmd);
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::UPDATE);
$this->assertInstanceOf('MongoDbCommand', $cmd);
$this->assertInstanceOf('UpdateMongoCommand', $cmd);
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::REMOVE);
$this->assertInstanceOf('MongoDbCommand', $cmd);
$this->assertInstanceOf('RemoveMongoCommand', $cmd);
}
public function testFindCommand()
{
$collection = $this->driver->getCollection('items');
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::FIND, $collection);
$cmd->bindParam('condition', array('name' => 'bread'))->bindParam('fields', array());
$result = $cmd->execute();
$this->assertEquals(0, $result->count());
}
/**
* @expectedException Exception
* @expectedExceptionMessage FindMongoCommand error. Bind all required params first.
*/
public function testFindCommandNotAllParamsBinded()
{
$collection = $this->driver->getCollection('items');
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::FIND, $collection);
$cmd->bindParam('condition', array('name' => 'bread'));
$cmd->execute();
}
public function testInsertCommand()
{
$collection = $this->driver->getCollection('items');
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::INSERT, $collection);
$cmd
->bindParam('data', array('name' => 'insert'))
->bindParam('safe', true);
$this->assertArrayHasKey('n', $cmd->execute());
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::FIND, $collection);
$cmd->bindParam('condition', array('name' => 'insert'))->bindParam('fields', array());
$result = $cmd->execute();
$this->assertEquals(1, $result->count());
}
/**
* @expectedException Exception
* @expectedExceptionMessage InsertMongoCommand error. Bind all required params first.
*/
public function testInsertCommandNotAllParamsBinded()
{
$collection = $this->driver->getCollection('items');
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::INSERT, $collection);
$cmd->bindParam('data', array('name' => 'bread'));
$cmd->execute();
}
public function testUpdateCommand()
{
$collection = $this->driver->getCollection('items');
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::INSERT, $collection);
$cmd
->bindParam('data', array('name' => 'insert'))
->bindParam('safe', true);
$this->assertArrayHasKey('n', $cmd->execute());
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::UPDATE, $collection);
$cmd
->bindParam('condition', array('name' => 'insert'))
->bindParam('data', array('$set' => array('name' => 'update')))
->bindParam('upsert', false)
->bindParam('safe', true);
$this->assertArrayHasKey('n', $cmd->execute());
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::FIND, $collection);
$cmd->bindParam('condition', array('name' => 'insert'))->bindParam('fields', array());
$result = $cmd->execute();
$this->assertEquals(0, $result->count());
$cmd->bindParam('condition', array('name' => 'update'))->bindParam('fields', array());
$result = $cmd->execute();
$this->assertEquals(1, $result->count());
}
/**
* @expectedException Exception
* @expectedExceptionMessage UpdateMongoCommand error. Bind all required params first.
*/
public function testUpdateCommandNotAllParamsBinded()
{
$collection = $this->driver->getCollection('items');
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::UPDATE, $collection);
$cmd->bindParam('data', array('name' => 'bread'));
$cmd->execute();
}
public function testRemoveCommand()
{
$collection = $this->driver->getCollection('items');
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::INSERT, $collection);
$cmd
->bindParam('data', array('name' => 'insert'))
->bindParam('safe', true);
$this->assertArrayHasKey('n', $cmd->execute());
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::FIND, $collection);
$cmd->bindParam('condition', array('name' => 'insert'))->bindParam('fields', array());
$result = $cmd->execute();
$this->assertEquals(1, $result->count());
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::REMOVE, $collection);
$cmd
->bindParam('condition', array('name' => 'insert'))
->bindParam('safe', true);
$this->assertArrayHasKey('n', $cmd->execute());
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::FIND, $collection);
$cmd->bindParam('condition', array('name' => 'insert'))->bindParam('fields', array());
$result = $cmd->execute();
$this->assertEquals(0, $result->count());
}
/**
* @expectedException Exception
* @expectedExceptionMessage RemoveMongoCommand error. Bind all required params first.
*/
public function testRemoveCommandNotAllParamsBinded()
{
$collection = $this->driver->getCollection('items');
$cmd = MongoCommandBuilder::factory(MongoCommandBuilder::REMOVE, $collection);
$cmd->execute();
}
}