diff --git a/apps/dav/lib/CalDAV/TimezoneService.php b/apps/dav/lib/CalDAV/TimezoneService.php index bdbd0b9fe2cb5..1b8855a7215e4 100644 --- a/apps/dav/lib/CalDAV/TimezoneService.php +++ b/apps/dav/lib/CalDAV/TimezoneService.php @@ -42,6 +42,15 @@ public function __construct(private IConfig $config, } public function getUserTimezone(string $userId): ?string { + $fromConfig = $this->config->getUserValue( + $userId, + 'core', + 'timezone', + ); + if ($fromConfig !== '') { + return $fromConfig; + } + $availabilityPropPath = 'calendars/' . $userId . '/inbox'; $availabilityProp = '{' . Plugin::NS_CALDAV . '}calendar-availability'; $availabilities = $this->propertyMapper->findPropertyByPathAndName($userId, $availabilityPropPath, $availabilityProp); diff --git a/apps/dav/tests/unit/CalDAV/TimezoneServiceTest.php b/apps/dav/tests/unit/CalDAV/TimezoneServiceTest.php index 3646461dc4231..78f27a6c06498 100644 --- a/apps/dav/tests/unit/CalDAV/TimezoneServiceTest.php +++ b/apps/dav/tests/unit/CalDAV/TimezoneServiceTest.php @@ -78,7 +78,22 @@ protected function setUp(): void { ); } + public function testGetUserTimezoneFromSettings(): void { + $this->config->expects(self::once()) + ->method('getUserValue') + ->with('test123', 'core', 'timezone', '') + ->willReturn('Europe/Warsaw'); + + $timezone = $this->service->getUserTimezone('test123'); + + self::assertSame('Europe/Warsaw', $timezone); + } + public function testGetUserTimezoneFromAvailability(): void { + $this->config->expects(self::once()) + ->method('getUserValue') + ->with('test123', 'core', 'timezone', '') + ->willReturn(''); $property = new Property(); $property->setPropertyvalue('BEGIN:VCALENDAR PRODID:Nextcloud DAV app @@ -99,10 +114,12 @@ public function testGetUserTimezoneFromAvailability(): void { } public function testGetUserTimezoneFromPersonalCalendar(): void { - $this->config->expects(self::once()) + $this->config->expects(self::exactly(2)) ->method('getUserValue') - ->with('test123', 'dav', 'defaultCalendar') - ->willReturn('personal-1'); + ->willReturnMap([ + ['test123', 'core', 'timezone', '', ''], + ['test123', 'dav', 'defaultCalendar', '', 'personal-1'], + ]); $other = $this->createMock(ICalendar::class); $other->method('getUri')->willReturn('other'); $personal = $this->createMock(CalendarImpl::class); @@ -126,10 +143,12 @@ public function testGetUserTimezoneFromPersonalCalendar(): void { } public function testGetUserTimezoneFromAny(): void { - $this->config->expects(self::once()) + $this->config->expects(self::exactly(2)) ->method('getUserValue') - ->with('test123', 'dav', 'defaultCalendar') - ->willReturn('personal-1'); + ->willReturnMap([ + ['test123', 'core', 'timezone', '', ''], + ['test123', 'dav', 'defaultCalendar', '', 'personal-1'], + ]); $other = $this->createMock(ICalendar::class); $other->method('getUri')->willReturn('other'); $personal = $this->createMock(CalendarImpl::class);