From 3a8c7b6bf3a8d0fab224e2fdc023494f0b3b3b41 Mon Sep 17 00:00:00 2001 From: Anna Larch Date: Thu, 18 Aug 2022 14:39:40 +0200 Subject: [PATCH] Remove the loop of calendars when only one is needed Signed-off-by: Anna Larch --- apps/dav/lib/CalDAV/CalendarHome.php | 11 ++++- .../tests/unit/CalDAV/CalendarHomeTest.php | 48 ++++++++++++------- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/apps/dav/lib/CalDAV/CalendarHome.php b/apps/dav/lib/CalDAV/CalendarHome.php index cd6ae1c2f7fd7..a59e76d121fb9 100644 --- a/apps/dav/lib/CalDAV/CalendarHome.php +++ b/apps/dav/lib/CalDAV/CalendarHome.php @@ -159,7 +159,16 @@ public function getChild($name) { 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 ee3bc2b0859e9..3128e753daad0 100644 --- a/apps/dav/tests/unit/CalDAV/CalendarHomeTest.php +++ b/apps/dav/tests/unit/CalDAV/CalendarHomeTest.php @@ -88,7 +88,7 @@ public function testCreateCalendarValidName() { $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 @@ public function testCreateCalendarReservedNameAppGenerated() { 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 @@ public function testGetChildren():void { 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 @@ public function testGetChildNonAppGenerated():void { 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]);