PageRenderTime 45ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/Doctrine/ODM/MongoDB/Tests/Functional/QueryTest.php

https://github.com/weaverryan/mongodb-odm
PHP | 212 lines | 172 code | 36 blank | 4 comment | 2 complexity | 87fcea1b37c8d0bbae0eb08bb297625f MD5 | raw file
  1. <?php
  2. namespace Doctrine\ODM\MongoDB\Tests\Functional;
  3. require_once __DIR__ . '/../../../../../TestInit.php';
  4. use Documents\Article,
  5. Documents\Account,
  6. Documents\Address,
  7. Documents\Group,
  8. Documents\Phonenumber,
  9. Documents\Profile,
  10. Documents\File,
  11. Documents\User;
  12. class QueryTest extends \Doctrine\ODM\MongoDB\Tests\BaseTest
  13. {
  14. public function setUp()
  15. {
  16. parent::setUp();
  17. $this->user = new User();
  18. $this->user->setUsername('boo');
  19. $this->dm->persist($this->user);
  20. $this->dm->flush();
  21. }
  22. public function testPrepareWhereValue()
  23. {
  24. $q = $this->dm->createQuery('Documents\User')
  25. ->field('profile.profileId')->equals(1);
  26. $this->assertEquals(array('profile.$id' => new \MongoId(1)), $q->debug('query'));
  27. $q = $this->dm->createQuery('Documents\User')
  28. ->field('profile.$id')->equals(1);
  29. $this->assertEquals(array('profile.$id' => new \MongoId(1)), $q->debug('query'));
  30. $q = $this->dm->createQuery('Documents\User')
  31. ->field('id')->equals(1);
  32. $this->assertEquals(array('_id' => new \MongoId(1)), $q->debug('query'));
  33. }
  34. public function testDistinct()
  35. {
  36. $user = new User();
  37. $user->setUsername('distinct_test');
  38. $user->setCount(1);
  39. $this->dm->persist($user);
  40. $user = new User();
  41. $user->setUsername('distinct_test');
  42. $user->setCount(1);
  43. $this->dm->persist($user);
  44. $user = new User();
  45. $user->setUsername('distinct_test');
  46. $user->setCount(2);
  47. $this->dm->persist($user);
  48. $user = new User();
  49. $user->setUsername('distinct_test');
  50. $user->setCount(3);
  51. $this->dm->persist($user);
  52. $this->dm->flush();
  53. $results = $this->dm->createQuery('Documents\User')
  54. ->distinct('count')
  55. ->field('username')->equals('distinct_test')
  56. ->execute();
  57. $this->assertEquals(array(1, 2, 3), $results);
  58. $results = $this->dm->query('find distinct count from Documents\User WHERE username = ?', array('distinct_test'))
  59. ->execute();
  60. $this->assertEquals(array(1, 2, 3), $results);
  61. }
  62. public function testFindQuery()
  63. {
  64. $query = $this->dm->createQuery('Documents\User')
  65. ->where("function() { return this.username == 'boo' }");
  66. $user = $query->getSingleResult();
  67. $this->assertEquals('boo', $user->getUsername());
  68. $query = $this->dm->createQuery('Documents\User')
  69. ->reduce("function() { return this.username == 'boo' }");
  70. $user = $query->getSingleResult();
  71. $this->assertEquals('boo', $user->getUsername());
  72. }
  73. public function testUpdateQuery()
  74. {
  75. $query = $this->dm->createQuery('Documents\User')
  76. ->update()
  77. ->field('username')
  78. ->set('crap')
  79. ->equals('boo');
  80. $result = $query->execute();
  81. $this->dm->refresh($this->user);
  82. $this->assertEquals('crap', $this->user->getUsername());
  83. }
  84. /**
  85. * @expectedException InvalidArgumentException
  86. */
  87. public function testRemoveQuery()
  88. {
  89. $query = $this->dm->createQuery('Documents\User')
  90. ->remove()
  91. ->field('username')->equals('boo');
  92. $result = $query->execute();
  93. // should invoke exception because $this->user doesn't exist anymore
  94. $this->dm->refresh($this->user);
  95. }
  96. public function testIncUpdateQuery()
  97. {
  98. $query = $this->dm->createQuery('Documents\User')
  99. ->update()
  100. ->field('hits')->inc(5)
  101. ->field('username')->equals('boo');
  102. $query->execute();
  103. $query->execute();
  104. $user = $query->find('Documents\User')
  105. ->hydrate(false)
  106. ->getSingleResult();
  107. $this->assertEquals(10, $user['hits']);
  108. }
  109. public function testUnsetFieldUpdateQuery()
  110. {
  111. $query = $this->dm->createQuery('Documents\User')
  112. ->update()
  113. ->field('hits')->unsetField()
  114. ->field('username')->equals('boo');
  115. $result = $query->execute();
  116. $user = $query->find('Documents\User')
  117. ->hydrate(false)
  118. ->getSingleResult();
  119. $this->assertFalse(isset($user['hits']));
  120. }
  121. public function testGroup()
  122. {
  123. $query = $this->dm->createQuery('Documents\User')
  124. ->group(array(), array('count' => 0))
  125. ->reduce('function (obj, prev) { prev.count++; }');
  126. $result = $query->execute();
  127. $this->assertEquals(1, $result['retval'][0]['count']);
  128. }
  129. public function testUnsetField()
  130. {
  131. $this->dm->createQuery()
  132. ->update('Documents\User')
  133. ->field('nullTest')
  134. ->type('null')
  135. ->unsetField('nullTest')
  136. ->execute();
  137. $user = $this->dm->createQuery('Documents\User')
  138. ->field('nullTest')->type('null')
  139. ->getSingleResult();
  140. $this->assertNull($user);
  141. }
  142. public function testDateRange()
  143. {
  144. $article1 = new Article();
  145. $article1->setTitle('test');
  146. $article1->setBody('test');
  147. $article1->setCreatedAt('1985-09-01 00:00:00');
  148. $article2 = new Article();
  149. $article2->setTitle('test');
  150. $article2->setBody('test');
  151. $article2->setCreatedAt('1985-09-02 00:00:00');
  152. $article3 = new Article();
  153. $article3->setTitle('test');
  154. $article3->setBody('test');
  155. $article3->setCreatedAt('1985-09-03 00:00:00');
  156. $article4 = new Article();
  157. $article4->setTitle('test');
  158. $article4->setBody('test');
  159. $article4->setCreatedAt('1985-09-04 00:00:00');
  160. $this->dm->persist($article1);
  161. $this->dm->persist($article2);
  162. $this->dm->persist($article3);
  163. $this->dm->persist($article4);
  164. $this->dm->flush();
  165. $this->dm->clear();
  166. $query = $this->dm->createQuery('Documents\Article');
  167. $query->field('createdAt')->range(
  168. new \MongoDate(strtotime('1985-09-01 01:00:00')),
  169. new \MongoDate(strtotime('1985-09-04'))
  170. );
  171. $articles = array_values($query->execute()->getResults());
  172. $this->assertEquals(2, count($articles));
  173. $this->assertEquals('1985-09-02', $articles[0]->getCreatedAt()->format('Y-m-d'));
  174. $this->assertEquals('1985-09-03', $articles[1]->getCreatedAt()->format('Y-m-d'));
  175. }
  176. }