Browse Source

Fixed `yii\mongodb\Collection` unable to fetch default database name from DSN with parameters

tags/2.0.0
Klimov Paul 10 years ago
parent
commit
3abefac692
  1. 2
      extensions/mongodb/CHANGELOG.md
  2. 2
      extensions/mongodb/Connection.php
  3. 38
      tests/unit/extensions/mongodb/ConnectionTest.php

2
extensions/mongodb/CHANGELOG.md

@ -4,7 +4,7 @@ Yii Framework 2 mongodb extension Change Log
2.0.0 under development
-----------------------
- no changes in this release.
- Bug #5303: Fixed `yii\mongodb\Collection` unable to fetch default database name from DSN with parameters (klimov-paul)
2.0.0-rc September 27, 2014

2
extensions/mongodb/Connection.php

@ -148,7 +148,7 @@ class Connection extends Component
if ($this->defaultDatabaseName === null) {
if (isset($this->options['db'])) {
$this->defaultDatabaseName = $this->options['db'];
} elseif (preg_match('/^mongodb:\\/\\/.+\\/(.+)$/s', $this->dsn, $matches)) {
} elseif (preg_match('/^mongodb:\\/\\/.+\\/([^?&]+)/s', $this->dsn, $matches)) {
$this->defaultDatabaseName = $matches[1];
} else {
throw new InvalidConfigException("Unable to determine default database name from dsn.");

38
tests/unit/extensions/mongodb/ConnectionTest.php

@ -61,7 +61,45 @@ class ConnectionTest extends MongoDbTestCase
}
/**
* Data provider for [[testFetchDefaultDatabaseName()]]
* @return array test data
*/
public function dataProviderFetchDefaultDatabaseName()
{
return [
[
'mongodb://travis:test@localhost:27017/dbname',
'dbname',
],
[
'mongodb://travis:test@localhost:27017/dbname?replicaSet=test&connectTimeoutMS=300000',
'dbname',
],
];
}
/**
* @dataProvider dataProviderFetchDefaultDatabaseName
*
* @param string $dsn
* @param string $databaseName
*/
public function testFetchDefaultDatabaseName($dsn, $databaseName)
{
$connection = new Connection();
$connection->dsn = $dsn;
$reflection = new \ReflectionObject($connection);
$method = $reflection->getMethod('fetchDefaultDatabaseName');
$method->setAccessible(true);
$method->invoke($connection);
$this->assertEquals($databaseName, $connection->defaultDatabaseName);
}
/**
* @depends testGetDatabase
* @depends testFetchDefaultDatabaseName
*/
public function testGetDefaultDatabase()
{

Loading…
Cancel
Save