CollectionInfoTest.php 2.72 KB
Newer Older
1 2
<?php

3
namespace MongoDB\Tests\Model;
4

5
use MongoDB\Exception\BadMethodCallException;
6 7 8 9 10 11 12
use MongoDB\Model\CollectionInfo;
use MongoDB\Tests\TestCase;

class CollectionInfoTest extends TestCase
{
    public function testGetName()
    {
Jeremy Mikola's avatar
Jeremy Mikola committed
13
        $info = new CollectionInfo(['name' => 'foo']);
14 15 16 17 18
        $this->assertSame('foo', $info->getName());
    }

    public function testGetOptions()
    {
Jeremy Mikola's avatar
Jeremy Mikola committed
19 20
        $info = new CollectionInfo(['name' => 'foo']);
        $this->assertSame([], $info->getOptions());
21

Jeremy Mikola's avatar
Jeremy Mikola committed
22 23
        $info = new CollectionInfo(['name' => 'foo', 'options' => ['capped' => true, 'size' => 1048576]]);
        $this->assertSame(['capped' => true, 'size' => 1048576], $info->getOptions());
24 25 26 27
    }

    public function testCappedCollectionMethods()
    {
Jeremy Mikola's avatar
Jeremy Mikola committed
28
        $info = new CollectionInfo(['name' => 'foo']);
29 30 31 32
        $this->assertFalse($info->isCapped());
        $this->assertNull($info->getCappedMax());
        $this->assertNull($info->getCappedSize());

Jeremy Mikola's avatar
Jeremy Mikola committed
33
        $info = new CollectionInfo(['name' => 'foo', 'options' => ['capped' => true, 'size' => 1048576]]);
34 35 36 37
        $this->assertTrue($info->isCapped());
        $this->assertNull($info->getCappedMax());
        $this->assertSame(1048576, $info->getCappedSize());

Jeremy Mikola's avatar
Jeremy Mikola committed
38
        $info = new CollectionInfo(['name' => 'foo', 'options' => ['capped' => true, 'size' => 1048576, 'max' => 100]]);
39 40 41 42
        $this->assertTrue($info->isCapped());
        $this->assertSame(100, $info->getCappedMax());
        $this->assertSame(1048576, $info->getCappedSize());
    }
43 44 45

    public function testDebugInfo()
    {
Jeremy Mikola's avatar
Jeremy Mikola committed
46
        $expectedInfo = [
47
            'name' => 'foo',
Jeremy Mikola's avatar
Jeremy Mikola committed
48 49
            'options' => ['capped' => true, 'size' => 1048576],
        ];
50 51 52 53

        $info = new CollectionInfo($expectedInfo);
        $this->assertSame($expectedInfo, $info->__debugInfo());
    }
54 55 56 57 58 59 60 61 62 63 64 65 66

    public function testImplementsArrayAccess()
    {
        $info = new CollectionInfo(['name' => 'foo']);
        $this->assertInstanceOf('ArrayAccess', $info);
        $this->assertArrayHasKey('name', $info);
        $this->assertSame('foo', $info['name']);
    }

    public function testOffsetSetCannotBeCalled()
    {
        $info = new CollectionInfo(['name' => 'foo', 'options' => ['capped' => true, 'size' => 1048576]]);
        $this->expectException(BadMethodCallException::class);
67
        $this->expectExceptionMessage(CollectionInfo::class . ' is immutable');
68 69 70 71 72 73 74
        $info['options'] = ['capped' => false];
    }

    public function testOffsetUnsetCannotBeCalled()
    {
        $info = new CollectionInfo(['name' => 'foo', 'options' => ['capped' => true, 'size' => 1048576]]);
        $this->expectException(BadMethodCallException::class);
75
        $this->expectExceptionMessage(CollectionInfo::class . ' is immutable');
76 77
        unset($info['options']);
    }
78
}