UpdateManyFunctionalTest.php 3.04 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
<?php

namespace MongoDB\Tests\Collection\CrudSpec;

/**
 * CRUD spec functional tests for updateMany().
 *
 * @see https://github.com/mongodb/specifications/tree/master/source/crud/tests
 */
class UpdateManyFunctionalTest extends FunctionalTestCase
{
12 13
    private $omitModifiedCount;

14 15 16 17 18
    public function setUp()
    {
        parent::setUp();

        $this->createFixtures(3);
19 20

        $this->omitModifiedCount = version_compare($this->getServerVersion(), '2.6.0', '<');
21 22 23 24 25 26 27 28 29
    }

    public function testUpdateManyWhenManyDocumentsMatch()
    {
        $filter = array('_id' => array('$gt' => 1));
        $update = array('$inc' => array('x' => 1));

        $result = $this->collection->updateMany($filter, $update);
        $this->assertSame(2, $result->getMatchedCount());
30
        $this->omitModifiedCount or $this->assertSame(2, $result->getModifiedCount());
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

        $expected = array(
            array('_id' => 1, 'x' => 11),
            array('_id' => 2, 'x' => 23),
            array('_id' => 3, 'x' => 34),
        );

        $this->assertSame($expected, $this->collection->find()->toArray());
    }

    public function testUpdateManyWhenOneDocumentMatches()
    {
        $filter = array('_id' => 1);
        $update = array('$inc' => array('x' => 1));

        $result = $this->collection->updateMany($filter, $update);
        $this->assertSame(1, $result->getMatchedCount());
48
        $this->omitModifiedCount or $this->assertSame(1, $result->getModifiedCount());
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65

        $expected = array(
            array('_id' => 1, 'x' => 12),
            array('_id' => 2, 'x' => 22),
            array('_id' => 3, 'x' => 33),
        );

        $this->assertSame($expected, $this->collection->find()->toArray());
    }

    public function testUpdateManyWhenNoDocumentsMatch()
    {
        $filter = array('_id' => 4);
        $update = array('$inc' => array('x' => 1));

        $result = $this->collection->updateMany($filter, $update);
        $this->assertSame(0, $result->getMatchedCount());
66
        $this->omitModifiedCount or $this->assertSame(0, $result->getModifiedCount());
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84

        $expected = array(
            array('_id' => 1, 'x' => 11),
            array('_id' => 2, 'x' => 22),
            array('_id' => 3, 'x' => 33),
        );

        $this->assertSame($expected, $this->collection->find()->toArray());
    }

    public function testUpdateManyWithUpsertWhenNoDocumentsMatch()
    {
        $filter = array('_id' => 4);
        $update = array('$inc' => array('x' => 1));
        $options = array('upsert' => true);

        $result = $this->collection->updateMany($filter, $update, $options);
        $this->assertSame(0, $result->getMatchedCount());
85
        $this->omitModifiedCount or $this->assertSame(0, $result->getModifiedCount());
86 87 88 89 90 91 92 93 94 95 96 97
        $this->assertSame(4, $result->getUpsertedId());

        $expected = array(
            array('_id' => 1, 'x' => 11),
            array('_id' => 2, 'x' => 22),
            array('_id' => 3, 'x' => 33),
            array('_id' => 4, 'x' => 1),
        );

        $this->assertSame($expected, $this->collection->find()->toArray());
    }
}