]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix(dav): Prioritize timezone from core/login 41866/head
authorChristoph Wurst <christoph@winzerhof-wurst.at>
Wed, 29 Nov 2023 11:17:30 +0000 (12:17 +0100)
committerChristoph Wurst <christoph@winzerhof-wurst.at>
Wed, 29 Nov 2023 11:17:30 +0000 (12:17 +0100)
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
apps/dav/lib/CalDAV/TimezoneService.php
apps/dav/tests/unit/CalDAV/TimezoneServiceTest.php

index bdbd0b9fe2cb55063da41000098c0bc185547881..1b8855a7215e4cd21b72250be6f526b2d10d6f27 100644 (file)
@@ -42,6 +42,15 @@ class TimezoneService {
        }
 
        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);
index 3646461dc42313bf63e024a111969b1f4d98e026..78f27a6c0649831c4e4a1b8c7f27d79439666a85 100644 (file)
@@ -78,7 +78,22 @@ class TimezoneServiceTest extends TestCase {
                );
        }
 
+       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 @@ END:VCALENDAR');
        }
 
        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 @@ END:VCALENDAR');
        }
 
        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);