"where" is optional

This commit is contained in:
Robin Appelman 2019-02-20 18:02:24 +01:00
commit aeb7610589
3 changed files with 15 additions and 11 deletions

View file

@ -62,11 +62,6 @@ class SearchHandler {
}
/** @var BasicSearch $query */
$query = $xml['{DAV:}basicsearch'];
if (!$query->where) {
$response->setStatus(400);
$response->setBody('Parse error: Missing {DAV:}where from {DAV:}basicsearch');
return false;
}
if (!$query->select) {
$response->setStatus(400);
$response->setBody('Parse error: Missing {DAV:}select from {DAV:}basicsearch');
@ -123,7 +118,7 @@ class SearchHandler {
}, $xml->select);
$select = array_filter($select);
$where = $this->transformOperator($xml->where, $allProps);
$where = $xml->where ? $this->transformOperator($xml->where, $allProps) : null;
return new Query($select, $xml->from, $where, $orderBy, $xml->limit);
}

View file

@ -65,11 +65,11 @@ class Query {
* Query constructor.
* @param SearchPropertyDefinition[] $select
* @param Scope[] $from
* @param Operator $where
* @param Operator|null $where
* @param Order[] $orderBy
* @param Limit $limit
*/
public function __construct(array $select, array $from, Operator $where, array $orderBy, Limit $limit) {
public function __construct(array $select, array $from, ?Operator $where, array $orderBy, Limit $limit) {
$this->select = $select;
$this->from = $from;
$this->where = $where;

View file

@ -348,6 +348,7 @@ class SearchPluginTest extends \PHPUnit_Framework_TestCase {
->method('getArbiterPath')
->willReturn('foo');
$lengthProp = new SearchPropertyDefinition('{DAV:}getcontentlength', true, true, true, SearchPropertyDefinition::DATATYPE_NONNEGATIVE_INTEGER);
$plugin = new SearchPlugin($this->searchBackend);
$server = new Server();
$plugin->initialize($server);
@ -363,12 +364,20 @@ class SearchPluginTest extends \PHPUnit_Framework_TestCase {
->method('isValidScope')
->willReturn(true);
$this->searchBackend->expects($this->never())
->method('search');
$this->searchBackend->expects($this->any())
->method('getPropertyDefinitionsForScope')
->willReturn([$lengthProp]);
$this->searchBackend->expects($this->once())
->method('search')
->willReturnCallback(function(Query $query) {
$this->assertNull($query->where);
return [];
});
$plugin->searchHandler($request, $response);
$this->assertEquals(400, $response->getStatus());
$this->assertEquals(207, $response->getStatus());
}
public function testSearchQueryNoSelect() {