Пример #1
0
 public function testDocumentSorting()
 {
     MockMongoPost::config(array('meta' => array('source' => 'ordered_docs', 'locked' => false)));
     $first = array('title' => 'First document', 'position' => 1);
     $second = array('title' => 'Second document', 'position' => 2);
     $third = array('title' => 'Third document', 'position' => 3);
     MockMongoPost::create($third)->save();
     MockMongoPost::create($first)->save();
     MockMongoPost::create($second)->save();
     $result = $this->_db->connection->queries;
     $createOpts = array('validate' => true, 'events' => 'create', 'whitelist' => null, 'callbacks' => true, 'locked' => false, 'w' => 1, 'wTimeoutMS' => 10000, 'fsync' => false);
     $baseInsert = array('type' => 'insert', 'collection' => 'ordered_docs', 'options' => $createOpts);
     $expected = array($baseInsert + array('data' => array('_id' => $result[0]['data']['_id']) + $third), $baseInsert + array('data' => array('_id' => $result[1]['data']['_id']) + $first), $baseInsert + array('data' => array('_id' => $result[2]['data']['_id']) + $second));
     $this->assertEqual($expected, $result);
     array_push($this->_db->connection->results, new MockResultResource(array('data' => array($first, $second, $third))));
     $this->_db->connection->queries = array();
     $documents = MockMongoPost::all(array('order' => 'position'));
     $this->assertEqual($first['title'], $documents[0]->title);
     $this->assertEqual($second['title'], $documents[1]->title);
     $this->assertEqual($third['title'], $documents[2]->title);
     $expected = array('type' => 'find', 'collection' => 'ordered_docs', 'conditions' => array(), 'fields' => array());
     $this->assertEqual($expected, array_pop($this->_db->connection->queries));
     $result = $documents->result()->resource()->query['sort'];
     $this->assertEqual(array('position' => 1), $result);
     array_push($this->_db->connection->results, new MockResultResource(array('data' => array($first, $second, $third))));
     $documents = MockMongoPost::all(array('order' => array('position' => 'asc')));
     $this->assertEqual($first['title'], $documents[0]->title);
     $this->assertEqual($second['title'], $documents[1]->title);
     $this->assertEqual($third['title'], $documents[2]->title);
     $this->assertEqual($expected, array_pop($this->_db->connection->queries));
     $result = $documents->result()->resource()->query['sort'];
     $this->assertEqual(array('position' => 1), $result);
     array_push($this->_db->connection->results, new MockResultResource(array('data' => array($third, $second, $first))));
     $documents = MockMongoPost::all(array('order' => array('position' => 'desc')));
     $this->assertEqual($third['title'], $documents[0]->title);
     $this->assertEqual($second['title'], $documents[1]->title);
     $this->assertEqual($first['title'], $documents[2]->title);
     $this->assertEqual($expected, array_pop($this->_db->connection->queries));
     $result = $documents->result()->resource()->query['sort'];
     $this->assertEqual(array('position' => -1), $result);
 }