ConnectionTest.php 4.25 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;
Jens Segers's avatar
Jens Segers committed
5

Jens Segers's avatar
Jens Segers committed
6 7
class ConnectionTest extends TestCase
{
Jens Segers's avatar
Jens Segers committed
8 9 10
    public function testConnection()
    {
        $connection = DB::connection('mongodb');
Simon Schaufelberger's avatar
Simon Schaufelberger committed
11
        $this->assertInstanceOf(\Jenssegers\Mongodb\Connection::class, $connection);
Jens Segers's avatar
Jens Segers committed
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
    }

    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');
Simon Schaufelberger's avatar
Simon Schaufelberger committed
29
        $this->assertInstanceOf(\MongoDB\Database::class, $connection->getMongoDB());
Jens Segers's avatar
Jens Segers committed
30 31

        $connection = DB::connection('mongodb');
Simon Schaufelberger's avatar
Simon Schaufelberger committed
32
        $this->assertInstanceOf(\MongoDB\Client::class, $connection->getMongoClient());
Jens Segers's avatar
Jens Segers committed
33 34 35 36 37
    }

    public function testCollection()
    {
        $collection = DB::connection('mongodb')->getCollection('unittest');
Simon Schaufelberger's avatar
Simon Schaufelberger committed
38
        $this->assertInstanceOf(Jenssegers\Mongodb\Collection::class, $collection);
Jens Segers's avatar
Jens Segers committed
39 40

        $collection = DB::connection('mongodb')->collection('unittests');
Simon Schaufelberger's avatar
Simon Schaufelberger committed
41
        $this->assertInstanceOf(Jenssegers\Mongodb\Query\Builder::class, $collection);
Jens Segers's avatar
Jens Segers committed
42 43

        $collection = DB::connection('mongodb')->table('unittests');
Simon Schaufelberger's avatar
Simon Schaufelberger committed
44
        $this->assertInstanceOf(Jenssegers\Mongodb\Query\Builder::class, $collection);
Jens Segers's avatar
Jens Segers committed
45 46
    }

Jens Segers's avatar
Jens Segers committed
47 48 49
    // public function testDynamic()
    // {
    //     $dbs = DB::connection('mongodb')->listCollections();
50
    //     $this->assertIsArray($dbs);
Jens Segers's avatar
Jens Segers committed
51
    // }
Jens Segers's avatar
Jens Segers committed
52

Jens Segers's avatar
Jens Segers committed
53 54 55
    // public function testMultipleConnections()
    // {
    //     global $app;
Jens Segers's avatar
Jens Segers committed
56

Jens Segers's avatar
Jens Segers committed
57 58 59
    //     # Add fake host
    //     $db = $app['config']['database.connections']['mongodb'];
    //     $db['host'] = array($db['host'], '1.2.3.4');
Jens Segers's avatar
Jens Segers committed
60

Jens Segers's avatar
Jens Segers committed
61 62
    //     $connection = new Connection($db);
    //     $mongoclient = $connection->getMongoClient();
Jens Segers's avatar
Jens Segers committed
63

Jens Segers's avatar
Jens Segers committed
64
    //     $hosts = $mongoclient->getHosts();
Gabriel Caruso's avatar
Gabriel Caruso committed
65
    //     $this->assertCount(1, $hosts);
Jens Segers's avatar
Jens Segers committed
66
    // }
Jens Segers's avatar
Jens Segers committed
67 68 69 70 71

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

Gabriel Caruso's avatar
Gabriel Caruso committed
72
        $this->assertCount(0, DB::getQueryLog());
Jens Segers's avatar
Jens Segers committed
73 74

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

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

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

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

        DB::collection('items')->where('name', 'test')->delete();
Gabriel Caruso's avatar
Gabriel Caruso committed
87
        $this->assertCount(5, DB::getQueryLog());
Jens Segers's avatar
Jens Segers committed
88 89 90 91 92
    }

    public function testSchemaBuilder()
    {
        $schema = DB::connection('mongodb')->getSchemaBuilder();
Simon Schaufelberger's avatar
Simon Schaufelberger committed
93
        $this->assertInstanceOf(\Jenssegers\Mongodb\Schema\Builder::class, $schema);
Jens Segers's avatar
Jens Segers committed
94 95 96 97 98 99 100 101 102 103
    }

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

    public function testAuth()
    {
104
        $host = Config::get('database.connections.mongodb.host');
Jens Segers's avatar
Jens Segers committed
105 106
        Config::set('database.connections.mongodb.username', 'foo');
        Config::set('database.connections.mongodb.password', 'bar');
107
        Config::set('database.connections.mongodb.options.database', 'custom');
Jens Segers's avatar
Jens Segers committed
108 109

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

113
    public function testCustomHostAndPort()
Jens Segers's avatar
Jens Segers committed
114
    {
115 116
        Config::set('database.connections.mongodb.host', 'db1');
        Config::set('database.connections.mongodb.port', 27000);
Jens Segers's avatar
Jens Segers committed
117 118

        $connection = DB::connection('mongodb');
119
        $this->assertEquals("mongodb://db1:27000", (string) $connection->getMongoClient());
Jens Segers's avatar
Jens Segers committed
120 121 122 123 124
    }

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

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