Skip to content

Commit

Permalink
Remove the loop of calendars when only one is needed
Browse files Browse the repository at this point in the history
Signed-off-by: Anna Larch <anna@nextcloud.com>
Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
  • Loading branch information
miaulalala authored and st3iny committed Sep 13, 2022
1 parent 9104028 commit 2f0d6f7
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 19 deletions.
11 changes: 10 additions & 1 deletion apps/dav/lib/CalDAV/CalendarHome.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
48 changes: 30 additions & 18 deletions apps/dav/tests/unit/CalDAV/CalendarHomeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 ...']);

Expand Down Expand Up @@ -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]);
Expand All @@ -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);
Expand All @@ -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]);
Expand Down

0 comments on commit 2f0d6f7

Please sign in to comment.