add limit and offset

This commit is contained in:
Robin Appelman 2017-03-10 15:53:28 +01:00
commit 0924fa90e0
8 changed files with 132 additions and 2 deletions

View file

@ -25,6 +25,7 @@ namespace SearchDAV\Test;
use Sabre\Xml\Service;
use SearchDAV\DAV\QueryParser;
use SearchDAV\XML\BasicSearch;
use SearchDAV\XML\Limit;
use SearchDAV\XML\Literal;
use SearchDAV\XML\Operator;
use SearchDAV\XML\Order;
@ -97,4 +98,23 @@ class QueryParserTest extends \PHPUnit_Framework_TestCase {
$xml = new Service();
$this->assertEquals($xml->parse(fopen(__DIR__ . '/supportedgrammar.xml', 'r')), $xml->parse($serialized));
}
public function testParseLimit() {
$query = file_get_contents(__DIR__ . '/limit.xml');
$parser = new QueryParser();
$xml = $parser->parse($query, null, $rootElementName);
$this->assertEquals('{DAV:}searchrequest', $rootElementName);
$this->assertArrayHasKey('{DAV:}basicsearch', $xml);
/** @var BasicSearch $search */
$search = $xml['{DAV:}basicsearch'];
$this->assertInstanceOf(BasicSearch::class, $search);
$this->assertEquals(['{DAV:}getcontentlength'], $search->select);
$limit = new Limit();
$limit->firstResult = 20;
$limit->maxResults = 10;
$this->assertEquals($limit, $search->limit);
}
}

View file

@ -35,6 +35,7 @@ use SearchDAV\Backend\SearchPropertyDefinition;
use SearchDAV\Backend\SearchResult;
use SearchDAV\DAV\SearchPlugin;
use SearchDAV\XML\BasicSearch;
use SearchDAV\XML\Limit;
use SearchDAV\XML\Literal;
use SearchDAV\XML\Operator;
use SearchDAV\XML\Order;
@ -286,6 +287,7 @@ class SearchPluginTest extends \PHPUnit_Framework_TestCase {
'{DAV:}getcontentlength',
new Literal(10000)
]);
$query->limit = new Limit();
$this->searchBackend->expects($this->once())
->method('search')

37
tests/limit.xml Normal file
View file

@ -0,0 +1,37 @@
<?xml version="1.0"?>
<d:searchrequest xmlns:d="DAV:"
xmlns:sd="https://github.com/icewind1991/SearchDAV/ns">
<d:basicsearch>
<d:select>
<d:prop>
<d:getcontentlength/>
</d:prop>
</d:select>
<d:from>
<d:scope>
<d:href>/container1/</d:href>
<d:depth>infinity</d:depth>
</d:scope>
</d:from>
<d:where>
<d:gt>
<d:prop>
<d:getcontentlength/>
</d:prop>
<d:literal>10000</d:literal>
</d:gt>
</d:where>
<d:orderby>
<d:order>
<d:prop>
<d:getcontentlength/>
</d:prop>
<d:ascending/>
</d:order>
</d:orderby>
<d:limit>
<d:nresults>10</d:nresults>
<sd:firstresult>20</sd:firstresult>
</d:limit>
</d:basicsearch>
</d:searchrequest>