Skip to content

Commit

Permalink
fixup! fix(caldav): event search with limit and timerange
Browse files Browse the repository at this point in the history
Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
  • Loading branch information
kesselb committed May 8, 2024
1 parent f5cd3f0 commit 9fa82f2
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 0 deletions.
2 changes: 2 additions & 0 deletions apps/dav/lib/CalDAV/CalDavBackend.php
Original file line number Diff line number Diff line change
Expand Up @@ -1994,6 +1994,8 @@ public function search(
$objectsCount = array_push($calendarObjects, ...$this->searchCalendarObjects($outerQuery, $start, $end));
$outerQuery->setFirstResult($offset += $maxResults);
}

$calendarObjects = array_slice($calendarObjects, 0, $limit, false);
} else {
$outerQuery->setMaxResults($limit);
$calendarObjects = $this->searchCalendarObjects($outerQuery, $start, $end);
Expand Down
57 changes: 57 additions & 0 deletions apps/dav/tests/unit/CalDAV/CalDavBackendTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -1705,4 +1705,61 @@ public function testSearchWithLimitAndTimeRangeShouldNotReturnMoreObjectsThenLim
'Recurrence starting before requested start',
);
}

public function testSearchWithLimitAndTimeRangeShouldReturnObjectsInTheSameOrder() {
$calendarId = $this->createTestCalendar();
$calendarInfo = [
'id' => $calendarId,
'principaluri' => 'user1',
'{http://owncloud.org/ns}owner-principal' => 'user1',
];

$testFiles = [
__DIR__ . '/../../misc/caldav-search-limit-timerange-1.ics',
__DIR__ . '/../../misc/caldav-search-limit-timerange-2.ics',
__DIR__ . '/../../misc/caldav-search-limit-timerange-3.ics',
__DIR__ . '/../../misc/caldav-search-limit-timerange-4.ics',
__DIR__ . '/../../misc/caldav-search-limit-timerange-6.ics', // <-- intentional!
__DIR__ . '/../../misc/caldav-search-limit-timerange-5.ics',
];

foreach ($testFiles as $testFile) {
$objectUri = static::getUniqueID('search-limit-timerange-');
$calendarData = \file_get_contents($testFile);
$this->backend->createCalendarObject($calendarId, $objectUri, $calendarData);
}

$start = new DateTimeImmutable('2024-05-06T00:00:00Z');
$end = $start->add(new DateInterval('P14D'));

$results = $this->backend->search(
$calendarInfo,
'',
[],
[
'timerange' => [
'start' => $start,
'end' => $end,
]
],
2,
null,
);

$this->assertCount(2, $results);

$this->assertEquals('Cake Tasting', $results[0]['objects'][0]['SUMMARY'][0]);
$this->assertGreaterThanOrEqual(
$start->getTimestamp(),
$results[0]['objects'][0]['DTSTART'][0]->getTimestamp(),
'Recurrence starting before requested start',
);

$this->assertEquals('Pasta Day', $results[1]['objects'][0]['SUMMARY'][0]);
$this->assertGreaterThanOrEqual(
$start->getTimestamp(),
$results[1]['objects'][0]['DTSTART'][0]->getTimestamp(),
'Recurrence starting before requested start',
);
}
}

0 comments on commit 9fa82f2

Please sign in to comment.