Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnna Larch <anna@nextcloud.com>2022-08-18 15:39:40 +0300
committerAnna Larch <anna@nextcloud.com>2022-10-01 23:17:40 +0300
commit3a8c7b6bf3a8d0fab224e2fdc023494f0b3b3b41 (patch)
treef8f6cbcd273d8230ba20c9f8df7a2cbc3e115e32
parent534fbd83e3c20f1d52c826e5ac4a80d44f4f6be8 (diff)
Remove the loop of calendars when only one is neededperf/improve-getCalendarsForUsers
Signed-off-by: Anna Larch <anna@nextcloud.com>
-rw-r--r--apps/dav/lib/CalDAV/CalendarHome.php11
-rw-r--r--apps/dav/tests/unit/CalDAV/CalendarHomeTest.php48
2 files changed, 40 insertions, 19 deletions
diff --git a/apps/dav/lib/CalDAV/CalendarHome.php b/apps/dav/lib/CalDAV/CalendarHome.php
index cd6ae1c2f7f..a59e76d121f 100644
--- a/apps/dav/lib/CalDAV/CalendarHome.php
+++ b/apps/dav/lib/CalDAV/CalendarHome.php
@@ -159,7 +159,16 @@ class CalendarHome extends \Sabre\CalDAV\CalendarHome {
return new TrashbinHome($this->caldavBackend, $this->principalInfo);
}
- // Calendars
+ // Calendar - this covers all "regular" calendars, but not shared
+ // only check if the method is available
+ if($this->caldavBackend instanceof CalDavBackend) {
+ $calendar = $this->caldavBackend->getCalendarByUri($this->principalInfo['uri'], $name);
+ if(!empty($calendar)) {
+ return new Calendar($this->caldavBackend, $calendar, $this->l10n, $this->config, $this->logger);
+ }
+ }
+
+ // Fallback to cover shared calendars
foreach ($this->caldavBackend->getCalendarsForUser($this->principalInfo['uri']) as $calendar) {
if ($calendar['uri'] === $name) {
return new Calendar($this->caldavBackend, $calendar, $this->l10n, $this->config, $this->logger);
diff --git a/apps/dav/tests/unit/CalDAV/CalendarHomeTest.php b/apps/dav/tests/unit/CalDAV/CalendarHomeTest.php
index ee3bc2b0859..3128e753daa 100644
--- a/apps/dav/tests/unit/CalDAV/CalendarHomeTest.php
+++ b/apps/dav/tests/unit/CalDAV/CalendarHomeTest.php
@@ -88,7 +88,7 @@ class CalendarHomeTest extends TestCase {
$mkCol->method('getRemainingValues')
->willReturn(['... properties ...']);
- $this->backend->expects($this->once())
+ $this->backend->expects(self::once())
->method('createCalendar')
->with('user-principal-123', 'name123', ['... properties ...']);
@@ -117,33 +117,33 @@ class CalendarHomeTest extends TestCase {
public function testGetChildren():void {
$this->backend
- ->expects($this->at(0))
+ ->expects(self::once())
->method('getCalendarsForUser')
->with('user-principal-123')
->willReturn([]);
$this->backend
- ->expects($this->at(1))
+ ->expects(self::once())
->method('getSubscriptionsForUser')
->with('user-principal-123')
->willReturn([]);
$calendarPlugin1 = $this->createMock(ICalendarProvider::class);
$calendarPlugin1
- ->expects($this->once())
+ ->expects(self::once())
->method('fetchAllForCalendarHome')
->with('user-principal-123')
->willReturn(['plugin1calendar1', 'plugin1calendar2']);
$calendarPlugin2 = $this->createMock(ICalendarProvider::class);
$calendarPlugin2
- ->expects($this->once())
+ ->expects(self::once())
->method('fetchAllForCalendarHome')
->with('user-principal-123')
->willReturn(['plugin2calendar1', 'plugin2calendar2']);
$this->pluginManager
- ->expects($this->once())
+ ->expects(self::once())
->method('getCalendarPlugins')
->with()
->willReturn([$calendarPlugin1, $calendarPlugin2]);
@@ -162,19 +162,25 @@ class CalendarHomeTest extends TestCase {
public function testGetChildNonAppGenerated():void {
$this->backend
- ->expects($this->at(0))
+ ->expects(self::once())
+ ->method('getCalendarByUri')
+ ->with('user-principal-123')
+ ->willReturn([]);
+
+ $this->backend
+ ->expects(self::once())
->method('getCalendarsForUser')
->with('user-principal-123')
->willReturn([]);
$this->backend
- ->expects($this->at(1))
+ ->expects(self::once())
->method('getSubscriptionsForUser')
->with('user-principal-123')
->willReturn([]);
$this->pluginManager
- ->expects($this->never())
+ ->expects(self::never())
->method('getCalendarPlugins');
$this->expectException(\Sabre\DAV\Exception\NotFound::class);
@@ -185,51 +191,57 @@ class CalendarHomeTest extends TestCase {
public function testGetChildAppGenerated():void {
$this->backend
- ->expects($this->at(0))
+ ->expects(self::once())
+ ->method('getCalendarByUri')
+ ->with('user-principal-123')
+ ->willReturn([]);
+
+ $this->backend
+ ->expects(self::once())
->method('getCalendarsForUser')
->with('user-principal-123')
->willReturn([]);
$this->backend
- ->expects($this->at(1))
+ ->expects(self::once())
->method('getSubscriptionsForUser')
->with('user-principal-123')
->willReturn([]);
$calendarPlugin1 = $this->createMock(ICalendarProvider::class);
$calendarPlugin1
- ->expects($this->once())
+ ->expects(self::once())
->method('getAppId')
->with()
->willReturn('calendar_plugin_1');
$calendarPlugin1
- ->expects($this->never())
+ ->expects(self::never())
->method('hasCalendarInCalendarHome');
$calendarPlugin1
- ->expects($this->never())
+ ->expects(self::never())
->method('getCalendarInCalendarHome');
$externalCalendarMock = $this->createMock(ExternalCalendar::class);
$calendarPlugin2 = $this->createMock(ICalendarProvider::class);
$calendarPlugin2
- ->expects($this->once())
+ ->expects(self::once())
->method('getAppId')
->with()
->willReturn('calendar_plugin_2');
$calendarPlugin2
- ->expects($this->once())
+ ->expects(self::once())
->method('hasCalendarInCalendarHome')
->with('user-principal-123', 'calendar-uri-from-backend')
->willReturn(true);
$calendarPlugin2
- ->expects($this->once())
+ ->expects(self::once())
->method('getCalendarInCalendarHome')
->with('user-principal-123', 'calendar-uri-from-backend')
->willReturn($externalCalendarMock);
$this->pluginManager
- ->expects($this->once())
+ ->expects(self::once())
->method('getCalendarPlugins')
->with()
->willReturn([$calendarPlugin1, $calendarPlugin2]);