/**
* @group functional
* @expectedException \Elastica\Exception\InvalidException
*/
public function testArrayConfigSearch()
{
$client = $this->_getClient();
$search = new Search($client);
$index = $client->getIndex('zero');
$index->create(array('index' => array('number_of_shards' => 1, 'number_of_replicas' => 0)), true);
$docs = array();
for ($i = 0; $i < 11; ++$i) {
$docs[] = new Document($i, array('id' => 1, 'email' => '*****@*****.**', 'username' => 'test'));
}
$type = $index->getType('zeroType');
$type->addDocuments($docs);
$index->refresh();
$search->addIndex($index)->addType($type);
//Backward compatibility, integer => limit
// default limit results (default limit is 10)
$resultSet = $search->search('test');
$this->assertEquals(10, $resultSet->count());
// limit = 1
$resultSet = $search->search('test', 1);
$this->assertEquals(1, $resultSet->count());
//Array with limit
$resultSet = $search->search('test', array('limit' => 2));
$this->assertEquals(2, $resultSet->count());
//Array with size
$resultSet = $search->search('test', array('size' => 2));
$this->assertEquals(2, $resultSet->count());
//Array with from
$resultSet = $search->search('test', array('from' => 10));
$this->assertEquals(10, $resultSet->current()->getId());
//Array with routing
$resultSet = $search->search('test', array('routing' => 'r1,r2'));
$this->assertEquals(10, $resultSet->count());
//Array with limit and routing
$resultSet = $search->search('test', array('limit' => 5, 'routing' => 'r1,r2'));
$this->assertEquals(5, $resultSet->count());
//Search types
$resultSet = $search->search('test', array('limit' => 5, 'search_type' => 'count'));
$this->assertTrue($resultSet->count() === 0 && $resultSet->getTotalHits() === 11);
//Timeout - this one is a bit more tricky to test
$mockResponse = new \Elastica\Response(json_encode(array('timed_out' => true)));
$client = $this->getMockBuilder('Elastica\\Client')->disableOriginalConstructor()->getMock();
$client->method('request')->will($this->returnValue($mockResponse));
$search = new Search($client);
$script = new Script('Thread.sleep(100); return _score;');
$query = new FunctionScore();
$query->addScriptScoreFunction($script);
$resultSet = $search->search($query, array('timeout' => 50));
$this->assertTrue($resultSet->hasTimedOut());
// Throws InvalidException
$resultSet = $search->search('test', array('invalid_option' => 'invalid_option_value'));
}