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

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

38
        $this->assertSameDocuments($expected, $this->collection->find());
39 40 41 42 43 44 45 46 47
    }

    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

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

56
        $this->assertSameDocuments($expected, $this->collection->find());
57 58 59 60 61 62 63 64 65
    }

    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

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

74
        $this->assertSameDocuments($expected, $this->collection->find());
75 76 77 78 79 80 81 82 83 84
    }

    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
        $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),
        );

95
        $this->assertSameDocuments($expected, $this->collection->find());
96 97
    }
}