QueryTest.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <?php
  2. namespace yiiunit\extensions\mongodb;
  3. use yii\mongodb\Query;
  4. class QueryTest extends TestCase
  5. {
  6. public function testSelect()
  7. {
  8. // default
  9. $query = new Query();
  10. $select = [];
  11. $query->select($select);
  12. $this->assertEquals($select, $query->select);
  13. $query = new Query();
  14. $select = ['name', 'something'];
  15. $query->select($select);
  16. $this->assertEquals($select, $query->select);
  17. }
  18. public function testFrom()
  19. {
  20. $query = new Query();
  21. $from = 'customer';
  22. $query->from($from);
  23. $this->assertEquals($from, $query->from);
  24. $query = new Query();
  25. $from = ['', 'customer'];
  26. $query->from($from);
  27. $this->assertEquals($from, $query->from);
  28. }
  29. public function testWhere()
  30. {
  31. $query = new Query();
  32. $query->where(['name' => 'name1']);
  33. $this->assertEquals(['name' => 'name1'], $query->where);
  34. $query->andWhere(['address' => 'address1']);
  35. $this->assertEquals(
  36. [
  37. 'and',
  38. ['name' => 'name1'],
  39. ['address' => 'address1']
  40. ],
  41. $query->where
  42. );
  43. $query->orWhere(['name' => 'name2']);
  44. $this->assertEquals(
  45. [
  46. 'or',
  47. [
  48. 'and',
  49. ['name' => 'name1'],
  50. ['address' => 'address1']
  51. ],
  52. ['name' => 'name2']
  53. ],
  54. $query->where
  55. );
  56. }
  57. public function testFilterWhere()
  58. {
  59. // should work with hash format
  60. $query = new Query();
  61. $query->filterWhere([
  62. 'id' => 0,
  63. 'title' => ' ',
  64. 'author_ids' => [],
  65. ]);
  66. $this->assertEquals(['id' => 0], $query->where);
  67. $query->andFilterWhere(['status' => null]);
  68. $this->assertEquals(['id' => 0], $query->where);
  69. $query->orFilterWhere(['name' => '']);
  70. $this->assertEquals(['id' => 0], $query->where);
  71. }
  72. public function testOrder()
  73. {
  74. $query = new Query();
  75. $query->orderBy('team');
  76. $this->assertEquals(['team' => SORT_ASC], $query->orderBy);
  77. $query->addOrderBy('company');
  78. $this->assertEquals(['team' => SORT_ASC, 'company' => SORT_ASC], $query->orderBy);
  79. $query->addOrderBy('age');
  80. $this->assertEquals(['team' => SORT_ASC, 'company' => SORT_ASC, 'age' => SORT_ASC], $query->orderBy);
  81. $query->addOrderBy(['age' => SORT_DESC]);
  82. $this->assertEquals(['team' => SORT_ASC, 'company' => SORT_ASC, 'age' => SORT_DESC], $query->orderBy);
  83. $query->addOrderBy('age ASC, company DESC');
  84. $this->assertEquals(['team' => SORT_ASC, 'company' => SORT_DESC, 'age' => SORT_ASC], $query->orderBy);
  85. }
  86. public function testLimitOffset()
  87. {
  88. $query = new Query();
  89. $query->limit(10)->offset(5);
  90. $this->assertEquals(10, $query->limit);
  91. $this->assertEquals(5, $query->offset);
  92. }
  93. public function testOptions()
  94. {
  95. $query = new Query();
  96. $options = [
  97. '$comment' => 'test comment',
  98. '$min' => ['ts' => 10],
  99. ];
  100. $query->options($options);
  101. $this->assertEquals($options, $query->options);
  102. $newComment = 'new comment';
  103. $query->addOptions(['$comment' => $newComment]);
  104. $this->assertEquals($newComment, $query->options['$comment']);
  105. }
  106. /**
  107. * @depends testFilterWhere
  108. */
  109. public function testAndFilterCompare()
  110. {
  111. $query = new Query();
  112. $result = $query->andFilterCompare('name', null);
  113. $this->assertInstanceOf('yii\mongodb\Query', $result);
  114. $this->assertNull($query->where);
  115. $query->andFilterCompare('name', '');
  116. $this->assertNull($query->where);
  117. $query->andFilterCompare('name', 'John Doe');
  118. $condition = ['=', 'name', 'John Doe'];
  119. $this->assertEquals($condition, $query->where);
  120. $condition = ['and', $condition, ['like', 'name', 'Doe']];
  121. $query->andFilterCompare('name', 'Doe', 'like');
  122. $this->assertEquals($condition, $query->where);
  123. $condition = ['and', $condition, ['>', 'rating', '9']];
  124. $query->andFilterCompare('rating', '>9');
  125. $this->assertEquals($condition, $query->where);
  126. $condition = ['and', $condition, ['<=', 'value', '100']];
  127. $query->andFilterCompare('value', '<=100');
  128. $this->assertEquals($condition, $query->where);
  129. }
  130. }