ConnectionTest.php 5.07 KB
Newer Older
1 2
<?php

3
namespace yiiunit\extensions\mongodb;
4

5 6 7 8
use yii\mongodb\Collection;
use yii\mongodb\file\Collection as FileCollection;
use yii\mongodb\Connection;
use yii\mongodb\Database;
Paul Klimov committed
9

Paul Klimov committed
10
/**
11
 * @group mongodb
Paul Klimov committed
12
 */
13
class ConnectionTest extends MongoDbTestCase
14
{
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
    public function testConstruct()
    {
        $connection = $this->getConnection(false);
        $params = $this->mongoDbConfig;

        $connection->open();

        $this->assertEquals($params['dsn'], $connection->dsn);
        $this->assertEquals($params['defaultDatabaseName'], $connection->defaultDatabaseName);
        $this->assertEquals($params['options'], $connection->options);
    }

    public function testOpenClose()
    {
        $connection = $this->getConnection(false, false);

        $this->assertFalse($connection->isActive);
        $this->assertEquals(null, $connection->mongoClient);

        $connection->open();
        $this->assertTrue($connection->isActive);
        $this->assertTrue(is_object($connection->mongoClient));

        $connection->close();
        $this->assertFalse($connection->isActive);
        $this->assertEquals(null, $connection->mongoClient);

        $connection = new Connection;
        $connection->dsn = 'unknown::memory:';
        $this->setExpectedException('yii\mongodb\Exception');
        $connection->open();
    }

    public function testGetDatabase()
    {
        $connection = $this->getConnection();

        $database = $connection->getDatabase($connection->defaultDatabaseName);
        $this->assertTrue($database instanceof Database);
        $this->assertTrue($database->mongoDb instanceof \MongoDB);

        $database2 = $connection->getDatabase($connection->defaultDatabaseName);
        $this->assertTrue($database === $database2);

        $databaseRefreshed = $connection->getDatabase($connection->defaultDatabaseName, true);
        $this->assertFalse($database === $databaseRefreshed);
    }

63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
    /**
     * 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);
    }

100 101
    /**
     * @depends testGetDatabase
102
     * @depends testFetchDefaultDatabaseName
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
     */
    public function testGetDefaultDatabase()
    {
        $connection = new Connection();
        $connection->dsn = $this->mongoDbConfig['dsn'];
        $connection->defaultDatabaseName = $this->mongoDbConfig['defaultDatabaseName'];
        $database = $connection->getDatabase();
        $this->assertTrue($database instanceof Database, 'Unable to get default database!');

        $connection = new Connection();
        $connection->dsn = $this->mongoDbConfig['dsn'];
        $connection->options = ['db' => $this->mongoDbConfig['defaultDatabaseName']];
        $database = $connection->getDatabase();
        $this->assertTrue($database instanceof Database, 'Unable to determine default database from options!');

        $connection = new Connection();
        $connection->dsn = $this->mongoDbConfig['dsn'] . '/' . $this->mongoDbConfig['defaultDatabaseName'];
        $database = $connection->getDatabase();
        $this->assertTrue($database instanceof Database, 'Unable to determine default database from dsn!');
    }

    /**
     * @depends testGetDefaultDatabase
     */
    public function testGetCollection()
    {
        $connection = $this->getConnection();

        $collection = $connection->getCollection('customer');
        $this->assertTrue($collection instanceof Collection);

        $collection2 = $connection->getCollection('customer');
        $this->assertTrue($collection === $collection2);

        $collection2 = $connection->getCollection('customer', true);
        $this->assertFalse($collection === $collection2);
    }

    /**
     * @depends testGetDefaultDatabase
     */
    public function testGetFileCollection()
    {
        $connection = $this->getConnection();

        $collection = $connection->getFileCollection('testfs');
        $this->assertTrue($collection instanceof FileCollection);

        $collection2 = $connection->getFileCollection('testfs');
        $this->assertTrue($collection === $collection2);

        $collection2 = $connection->getFileCollection('testfs', true);
        $this->assertFalse($collection === $collection2);
    }
AlexGx committed
157
}