ListCollectionsFunctionalTest.php 3.39 KB
Newer Older
1 2 3 4
<?php

namespace MongoDB\Tests\Operation;

5 6
use MongoDB\Model\CollectionInfo;
use MongoDB\Model\CollectionInfoIterator;
7
use MongoDB\Operation\DropDatabase;
8
use MongoDB\Operation\InsertOne;
9
use MongoDB\Operation\ListCollections;
10
use MongoDB\Tests\CommandObserver;
11
use function version_compare;
12 13 14 15 16 17 18 19 20 21

class ListCollectionsFunctionalTest extends FunctionalTestCase
{
    public function testListCollectionsForNewlyCreatedDatabase()
    {
        $server = $this->getPrimaryServer();

        $operation = new DropDatabase($this->getDatabaseName());
        $operation->execute($server);

22 23
        $insertOne = new InsertOne($this->getDatabaseName(), $this->getCollectionName(), ['x' => 1]);
        $writeResult = $insertOne->execute($server);
24 25 26
        $this->assertEquals(1, $writeResult->getInsertedCount());

        $operation = new ListCollections($this->getDatabaseName(), ['filter' => ['name' => $this->getCollectionName()]]);
27 28
        $collections = $operation->execute($server);

29
        $this->assertInstanceOf(CollectionInfoIterator::class, $collections);
30 31 32 33

        $this->assertCount(1, $collections);

        foreach ($collections as $collection) {
34
            $this->assertInstanceOf(CollectionInfo::class, $collection);
35 36 37 38
            $this->assertEquals($this->getCollectionName(), $collection->getName());
        }
    }

39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
    public function testIdIndexAndInfo()
    {
        if (version_compare($this->getServerVersion(), '3.4.0', '<')) {
            $this->markTestSkipped('idIndex and info are not supported');
        }

        $server = $this->getPrimaryServer();

        $insertOne = new InsertOne($this->getDatabaseName(), $this->getCollectionName(), ['x' => 1]);
        $writeResult = $insertOne->execute($server);
        $this->assertEquals(1, $writeResult->getInsertedCount());

        $operation = new ListCollections($this->getDatabaseName(), ['filter' => ['name' => $this->getCollectionName()]]);
        $collections = $operation->execute($server);

54
        $this->assertInstanceOf(CollectionInfoIterator::class, $collections);
55 56

        foreach ($collections as $collection) {
57
            $this->assertInstanceOf(CollectionInfo::class, $collection);
58 59 60 61 62
            $this->assertArrayHasKey('readOnly', $collection['info']);
            $this->assertEquals(['v' => 2, 'key' => ['_id' => 1], 'name' => '_id_', 'ns' => $this->getNamespace()], $collection['idIndex']);
        }
    }

63 64 65 66 67 68 69 70 71 72 73 74
    public function testListCollectionsForNonexistentDatabase()
    {
        $server = $this->getPrimaryServer();

        $operation = new DropDatabase($this->getDatabaseName());
        $operation->execute($server);

        $operation = new ListCollections($this->getDatabaseName());
        $collections = $operation->execute($server);

        $this->assertCount(0, $collections);
    }
75 76 77 78 79 80 81

    public function testSessionOption()
    {
        if (version_compare($this->getServerVersion(), '3.6.0', '<')) {
            $this->markTestSkipped('Sessions are not supported');
        }

82 83
        (new CommandObserver())->observe(
            function () {
84 85 86 87 88 89 90
                $operation = new ListCollections(
                    $this->getDatabaseName(),
                    ['session' => $this->createSession()]
                );

                $operation->execute($this->getPrimaryServer());
            },
91
            function (array $event) {
92
                $this->assertObjectHasAttribute('lsid', $event['started']->getCommand());
93 94 95
            }
        );
    }
96
}