lithium\tests\cases\data\source\MongoDbTest::testDocumentSorting PHP Method

testDocumentSorting() public method

public testDocumentSorting ( )
    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);
    }