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.
		
		
		
		
		
			
		
			
				
					
					
						
							149 lines
						
					
					
						
							3.3 KiB
						
					
					
				
			
		
		
	
	
							149 lines
						
					
					
						
							3.3 KiB
						
					
					
				<?php | 
						|
 | 
						|
namespace yiiunit\extensions\mongodb; | 
						|
 | 
						|
use yii\helpers\FileHelper; | 
						|
use yii\mongodb\Connection; | 
						|
use Yii; | 
						|
use yii\mongodb\Exception; | 
						|
use yiiunit\TestCase; | 
						|
 | 
						|
class MongoDbTestCase extends TestCase | 
						|
{ | 
						|
	/** | 
						|
	 * @var array Mongo connection configuration. | 
						|
	 */ | 
						|
	protected $mongoDbConfig = [ | 
						|
		'dsn' => 'mongodb://localhost:27017', | 
						|
		'defaultDatabaseName' => 'yii2test', | 
						|
		'options' => [], | 
						|
	]; | 
						|
	/** | 
						|
	 * @var Connection Mongo connection instance. | 
						|
	 */ | 
						|
	protected $mongodb; | 
						|
 | 
						|
	public static function setUpBeforeClass() | 
						|
	{ | 
						|
		static::loadClassMap(); | 
						|
	} | 
						|
 | 
						|
	protected function setUp() | 
						|
	{ | 
						|
		parent::setUp(); | 
						|
		if (!extension_loaded('mongo')) { | 
						|
			$this->markTestSkipped('mongo extension required.'); | 
						|
		} | 
						|
		$config = $this->getParam('mongodb'); | 
						|
		if (!empty($config)) { | 
						|
			$this->mongoDbConfig = $config; | 
						|
		} | 
						|
		$this->mockApplication(); | 
						|
		static::loadClassMap(); | 
						|
	} | 
						|
 | 
						|
	protected function tearDown() | 
						|
	{ | 
						|
		if ($this->mongodb) { | 
						|
			$this->mongodb->close(); | 
						|
		} | 
						|
		$this->destroyApplication(); | 
						|
	} | 
						|
 | 
						|
	/** | 
						|
	 * Adds sphinx extension files to [[Yii::$classPath]], | 
						|
	 * avoiding the necessity of usage Composer autoloader. | 
						|
	 */ | 
						|
	protected static function loadClassMap() | 
						|
	{ | 
						|
		$baseNameSpace = 'yii/mongodb'; | 
						|
		$basePath = realpath(__DIR__. '/../../../../extensions/yii/mongodb'); | 
						|
		$files = FileHelper::findFiles($basePath); | 
						|
		foreach ($files as $file) { | 
						|
			$classRelativePath = str_replace($basePath, '', $file); | 
						|
			$classFullName = str_replace(['/', '.php'], ['\\', ''], $baseNameSpace . $classRelativePath); | 
						|
			Yii::$classMap[$classFullName] = $file; | 
						|
		} | 
						|
	} | 
						|
 | 
						|
	/** | 
						|
	 * @param boolean $reset whether to clean up the test database | 
						|
	 * @param boolean $open whether to open test database | 
						|
	 * @return \yii\mongodb\Connection | 
						|
	 */ | 
						|
	public function getConnection($reset = false, $open = true) | 
						|
	{ | 
						|
		if (!$reset && $this->mongodb) { | 
						|
			return $this->mongodb; | 
						|
		} | 
						|
		$db = new Connection; | 
						|
		$db->dsn = $this->mongoDbConfig['dsn']; | 
						|
		$db->defaultDatabaseName = $this->mongoDbConfig['defaultDatabaseName']; | 
						|
		if (isset($this->mongoDbConfig['options'])) { | 
						|
			$db->options = $this->mongoDbConfig['options']; | 
						|
		} | 
						|
		if ($open) { | 
						|
			$db->open(); | 
						|
		} | 
						|
		$this->mongodb = $db; | 
						|
		return $db; | 
						|
	} | 
						|
 | 
						|
	/** | 
						|
	 * Drops the specified collection. | 
						|
	 * @param string $name collection name. | 
						|
	 */ | 
						|
	protected function dropCollection($name) | 
						|
	{ | 
						|
		if ($this->mongodb) { | 
						|
			try { | 
						|
				$this->mongodb->getCollection($name)->drop(); | 
						|
			} catch (Exception $e) { | 
						|
				// shut down exception | 
						|
			} | 
						|
		} | 
						|
	} | 
						|
 | 
						|
	/** | 
						|
	 * Drops the specified file collection. | 
						|
	 * @param string $name file collection name. | 
						|
	 */ | 
						|
	protected function dropFileCollection($name = 'fs') | 
						|
	{ | 
						|
		if ($this->mongodb) { | 
						|
			try { | 
						|
				$this->mongodb->getFileCollection($name)->drop(); | 
						|
			} catch (Exception $e) { | 
						|
				// shut down exception | 
						|
			} | 
						|
		} | 
						|
	} | 
						|
 | 
						|
	/** | 
						|
	 * Finds all records in collection. | 
						|
	 * @param \yii\mongodb\Collection $collection | 
						|
	 * @param array $condition | 
						|
	 * @param array $fields | 
						|
	 * @return array rows | 
						|
	 */ | 
						|
	protected function findAll($collection, $condition = [], $fields = []) | 
						|
	{ | 
						|
		$cursor = $collection->find($condition, $fields); | 
						|
		$result = []; | 
						|
		foreach ($cursor as $data) { | 
						|
			$result[] = $data; | 
						|
		} | 
						|
		return $result; | 
						|
	} | 
						|
 | 
						|
	/** | 
						|
	 * Returns the Mongo server version. | 
						|
	 * @return string Mongo server version. | 
						|
	 */ | 
						|
	protected function getServerVersion() | 
						|
	{ | 
						|
		$connection = $this->getConnection(); | 
						|
		$buildInfo = $connection->getDatabase()->executeCommand(['buildinfo' => true]); | 
						|
		return $buildInfo['version']; | 
						|
	} | 
						|
}
 | 
						|
 |