public function test_sort()
 {
     saveWikiText('title1', 'test', 'test');
     $title = new Title('title1');
     $title->setTitle('This is a title');
     saveWikiText('title2', 'test', 'test');
     $title = new Title('title2');
     $title->setTitle('This is a title');
     saveWikiText('title3', 'test', 'test');
     $title = new Title('title3');
     $title->setTitle('Another Title');
     $this->loadSchemaJSON('pageschema');
     $this->saveData('test1', 'pageschema', array('singletitle' => 'title1'));
     $this->saveData('test2', 'pageschema', array('singletitle' => 'title2'));
     $this->saveData('test3', 'pageschema', array('singletitle' => 'title3'));
     $search = new Search();
     $search->addSchema('pageschema');
     $search->addColumn('%pageid%');
     $search->addColumn('singletitle');
     $search->addSort('singletitle', true);
     /** @var Value[][] $result */
     $result = $search->execute();
     $this->assertEquals(3, count($result));
     $this->assertEquals('test3', $result[0][0]->getValue());
     $this->assertEquals('test1', $result[1][0]->getValue());
     $this->assertEquals('test2', $result[2][0]->getValue());
 }
 public function test_ranges()
 {
     $search = new mock\Search();
     $search->addSchema('schema2');
     $search->addColumn('%pageid%');
     $search->addColumn('afirst');
     $search->addColumn('asecond');
     $search->addFilter('%pageid%', '%ag%', '~', 'AND');
     $search->addSort('%pageid%', false);
     /** @var meta\Value[][] $result */
     $result = $search->execute();
     $count = $search->getCount();
     // check result dimensions
     $this->assertEquals(12, $count, 'result count');
     $this->assertEquals(12, count($result), 'result rows');
     $this->assertEquals(3, count($result[0]), 'result columns');
     // check sorting
     $this->assertEquals('page20', $result[0][0]->getValue());
     $this->assertEquals('page19', $result[1][0]->getValue());
     $this->assertEquals('page18', $result[2][0]->getValue());
     // now add limit
     $search->setLimit(5);
     $result = $search->execute();
     $count = $search->getCount();
     // check result dimensions
     $this->assertEquals(12, $count, 'result count');
     // full result set
     $this->assertEquals(5, count($result), 'result rows');
     // wanted result set
     // check the values
     $this->assertEquals('page20', $result[0][0]->getValue());
     $this->assertEquals('page16', $result[4][0]->getValue());
     // now add offset
     $search->setOffset(5);
     $result = $search->execute();
     $count = $search->getCount();
     // check result dimensions
     $this->assertEquals(12, $count, 'result count');
     // full result set
     $this->assertEquals(5, count($result), 'result rows');
     // wanted result set
     // check the values
     $this->assertEquals('page15', $result[0][0]->getValue());
     $this->assertEquals('page11', $result[4][0]->getValue());
 }
 public function test_filter()
 {
     $this->loadSchemaJSON('decimal');
     $this->waitForTick();
     $this->saveData('page1', 'decimal', array('field' => '5000'));
     $this->saveData('page2', 'decimal', array('field' => '5000.001'));
     $this->saveData('page3', 'decimal', array('field' => '900.5'));
     $this->saveData('page4', 'decimal', array('field' => '1.5'));
     $search = new Search();
     $search->addSchema('decimal');
     $search->addColumn('%pageid%');
     $search->addColumn('field');
     $search->addFilter('field', '800', '>', 'AND');
     $search->addSort('field', true);
     /** @var Value[][] $result */
     $result = $search->execute();
     $this->assertEquals(3, count($result));
     $this->assertEquals('page3', $result[0][0]->getValue());
     $this->assertEquals('page1', $result[1][0]->getValue());
     $this->assertEquals('page2', $result[2][0]->getValue());
 }