fixup! fix(caldav): event search with limit and timerange

Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
Daniel Kesselberg 2 weeks ago
parent f5cd3f0149
commit 9fa82f2c1b
No known key found for this signature in database
GPG Key ID: 36E3664E099D0614

@ -1994,6 +1994,8 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$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);

@ -1705,4 +1705,61 @@ EOD;
'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',
);
}
}

Loading…
Cancel
Save