QueryTest.php 3.04 KB
Newer Older
1 2
<?php

3
namespace yiiunit\extensions\mongodb;
4

5
use yii\mongodb\Query;
6 7

/**
8
 * @group mongodb
9
 */
10
class QueryTest extends MongoDbTestCase
11
{
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
    public function testSelect()
    {
        // default
        $query = new Query;
        $select = [];
        $query->select($select);
        $this->assertEquals($select, $query->select);

        $query = new Query;
        $select = ['name', 'something'];
        $query->select($select);
        $this->assertEquals($select, $query->select);
    }

    public function testFrom()
    {
        $query = new Query;
        $from = 'customer';
        $query->from($from);
        $this->assertEquals($from, $query->from);

        $query = new Query;
        $from = ['', 'customer'];
        $query->from($from);
        $this->assertEquals($from, $query->from);
    }

    public function testWhere()
    {
        $query = new Query;
        $query->where(['name' => 'name1']);
        $this->assertEquals(['name' => 'name1'], $query->where);

        $query->andWhere(['address' => 'address1']);
        $this->assertEquals(
            [
                'and',
                ['name' => 'name1'],
                ['address' => 'address1']
            ],
            $query->where
        );

        $query->orWhere(['name' => 'name2']);
        $this->assertEquals(
            [
                'or',
                [
                    'and',
                    ['name' => 'name1'],
                    ['address' => 'address1']
                ],
                ['name' => 'name2']

            ],
            $query->where
        );
    }

Carsten Brandt committed
71
    public function testFilterWhere()
72
    {
Alexander Makarov committed
73
        // should work with hash format
74
        $query = new Query;
75
        $query->filterWhere([
Alexander Makarov committed
76 77 78 79 80
            'id' => 0,
            'title' => '   ',
            'author_ids' => [],
        ]);
        $this->assertEquals(['id' => 0], $query->where);
81

Carsten Brandt committed
82
        $query->andFilterWhere(['status' => null]);
Alexander Makarov committed
83
        $this->assertEquals(['id' => 0], $query->where);
84

Carsten Brandt committed
85
        $query->orFilterWhere(['name' => '']);
Alexander Makarov committed
86
        $this->assertEquals(['id' => 0], $query->where);
87 88
    }

89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
    public function testOrder()
    {
        $query = new Query;
        $query->orderBy('team');
        $this->assertEquals(['team' => SORT_ASC], $query->orderBy);

        $query->addOrderBy('company');
        $this->assertEquals(['team' => SORT_ASC, 'company' => SORT_ASC], $query->orderBy);

        $query->addOrderBy('age');
        $this->assertEquals(['team' => SORT_ASC, 'company' => SORT_ASC, 'age' => SORT_ASC], $query->orderBy);

        $query->addOrderBy(['age' => SORT_DESC]);
        $this->assertEquals(['team' => SORT_ASC, 'company' => SORT_ASC, 'age' => SORT_DESC], $query->orderBy);

        $query->addOrderBy('age ASC, company DESC');
        $this->assertEquals(['team' => SORT_ASC, 'company' => SORT_DESC, 'age' => SORT_ASC], $query->orderBy);
    }

    public function testLimitOffset()
    {
        $query = new Query;
        $query->limit(10)->offset(5);
        $this->assertEquals(10, $query->limit);
        $this->assertEquals(5, $query->offset);
    }
AlexGx committed
115
}