ConnectionTest.php 3.95 KB
Newer Older
Jens Segers's avatar
Jens Segers committed
1
<?php
Simon Schaufelberger's avatar
Simon Schaufelberger committed
2 3 4
declare(strict_types=1);

use Illuminate\Support\Facades\DB;
5 6 7 8 9 10
use Jenssegers\Mongodb\Collection;
use Jenssegers\Mongodb\Connection;
use Jenssegers\Mongodb\Query\Builder;
use Jenssegers\Mongodb\Schema\Builder as SchemaBuilder;
use MongoDB\Client;
use MongoDB\Database;
Jens Segers's avatar
Jens Segers committed
11

Jens Segers's avatar
Jens Segers committed
12 13
class ConnectionTest extends TestCase
{
Jens Segers's avatar
Jens Segers committed
14 15 16
    public function testConnection()
    {
        $connection = DB::connection('mongodb');
17
        $this->assertInstanceOf(Connection::class, $connection);
Jens Segers's avatar
Jens Segers committed
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
    }

    public function testReconnect()
    {
        $c1 = DB::connection('mongodb');
        $c2 = DB::connection('mongodb');
        $this->assertEquals(spl_object_hash($c1), spl_object_hash($c2));

        $c1 = DB::connection('mongodb');
        DB::purge('mongodb');
        $c2 = DB::connection('mongodb');
        $this->assertNotEquals(spl_object_hash($c1), spl_object_hash($c2));
    }

    public function testDb()
    {
        $connection = DB::connection('mongodb');
35 36
        $this->assertInstanceOf(Database::class, $connection->getMongoDB());
        $this->assertInstanceOf(Client::class, $connection->getMongoClient());
Jens Segers's avatar
Jens Segers committed
37 38
    }

39 40 41
    public function testDsnDb()
    {
        $connection = DB::connection('dsn_mongodb_db');
42 43
        $this->assertInstanceOf(Database::class, $connection->getMongoDB());
        $this->assertInstanceOf(Client::class, $connection->getMongoClient());
44 45
    }

Jens Segers's avatar
Jens Segers committed
46 47 48
    public function testCollection()
    {
        $collection = DB::connection('mongodb')->getCollection('unittest');
49
        $this->assertInstanceOf(Collection::class, $collection);
Jens Segers's avatar
Jens Segers committed
50 51

        $collection = DB::connection('mongodb')->collection('unittests');
52
        $this->assertInstanceOf(Builder::class, $collection);
Jens Segers's avatar
Jens Segers committed
53 54

        $collection = DB::connection('mongodb')->table('unittests');
55
        $this->assertInstanceOf(Builder::class, $collection);
Jens Segers's avatar
Jens Segers committed
56 57 58 59 60 61
    }

    public function testQueryLog()
    {
        DB::enableQueryLog();

Gabriel Caruso's avatar
Gabriel Caruso committed
62
        $this->assertCount(0, DB::getQueryLog());
Jens Segers's avatar
Jens Segers committed
63 64

        DB::collection('items')->get();
Gabriel Caruso's avatar
Gabriel Caruso committed
65
        $this->assertCount(1, DB::getQueryLog());
Jens Segers's avatar
Jens Segers committed
66 67

        DB::collection('items')->insert(['name' => 'test']);
Gabriel Caruso's avatar
Gabriel Caruso committed
68
        $this->assertCount(2, DB::getQueryLog());
Jens Segers's avatar
Jens Segers committed
69 70

        DB::collection('items')->count();
Gabriel Caruso's avatar
Gabriel Caruso committed
71
        $this->assertCount(3, DB::getQueryLog());
Jens Segers's avatar
Jens Segers committed
72 73

        DB::collection('items')->where('name', 'test')->update(['name' => 'test']);
Gabriel Caruso's avatar
Gabriel Caruso committed
74
        $this->assertCount(4, DB::getQueryLog());
Jens Segers's avatar
Jens Segers committed
75 76

        DB::collection('items')->where('name', 'test')->delete();
Gabriel Caruso's avatar
Gabriel Caruso committed
77
        $this->assertCount(5, DB::getQueryLog());
Jens Segers's avatar
Jens Segers committed
78 79 80 81 82
    }

    public function testSchemaBuilder()
    {
        $schema = DB::connection('mongodb')->getSchemaBuilder();
83
        $this->assertInstanceOf(SchemaBuilder::class, $schema);
Jens Segers's avatar
Jens Segers committed
84 85 86 87 88 89 90 91 92 93
    }

    public function testDriverName()
    {
        $driver = DB::connection('mongodb')->getDriverName();
        $this->assertEquals('mongodb', $driver);
    }

    public function testAuth()
    {
94
        $host = Config::get('database.connections.mongodb.host');
Jens Segers's avatar
Jens Segers committed
95 96
        Config::set('database.connections.mongodb.username', 'foo');
        Config::set('database.connections.mongodb.password', 'bar');
97
        Config::set('database.connections.mongodb.options.database', 'custom');
Jens Segers's avatar
Jens Segers committed
98 99

        $connection = DB::connection('mongodb');
100
        $this->assertEquals('mongodb://' . $host . '/custom', (string) $connection->getMongoClient());
Jens Segers's avatar
Jens Segers committed
101 102
    }

103
    public function testCustomHostAndPort()
Jens Segers's avatar
Jens Segers committed
104
    {
105 106
        Config::set('database.connections.mongodb.host', 'db1');
        Config::set('database.connections.mongodb.port', 27000);
Jens Segers's avatar
Jens Segers committed
107 108

        $connection = DB::connection('mongodb');
109
        $this->assertEquals("mongodb://db1:27000", (string) $connection->getMongoClient());
Jens Segers's avatar
Jens Segers committed
110 111 112 113 114
    }

    public function testHostWithPorts()
    {
        Config::set('database.connections.mongodb.port', 27000);
115
        Config::set('database.connections.mongodb.host', ['db1:27001', 'db2:27002', 'db3:27000']);
Jens Segers's avatar
Jens Segers committed
116 117

        $connection = DB::connection('mongodb');
118
        $this->assertEquals('mongodb://db1:27001,db2:27002,db3:27000', (string) $connection->getMongoClient());
Jens Segers's avatar
Jens Segers committed
119
    }
120
}