diff options
author | John Molakvoæ <skjnldsv@users.noreply.github.com> | 2024-03-26 09:05:59 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-26 09:05:59 +0100 |
commit | 47ac9071492b2f1f1055bbc4ddcfb65aa28d8e1e (patch) | |
tree | 00b3ee2e6d77e5f9ef88d7264edaaf26c681520b /apps | |
parent | 0c941d394f273ef80d03080f825c19442406e8d7 (diff) | |
parent | fa6e6131eef66edc4c339a1d6beb8d020abe6ecb (diff) | |
download | nextcloud-server-47ac9071492b2f1f1055bbc4ddcfb65aa28d8e1e.tar.gz nextcloud-server-47ac9071492b2f1f1055bbc4ddcfb65aa28d8e1e.zip |
Merge pull request #44017 from rcwschaller/fix/caldav/eventcomparisionservice-uses-wrong-array-comparison
Diffstat (limited to 'apps')
-rw-r--r-- | apps/dav/lib/CalDAV/EventComparisonService.php | 2 | ||||
-rw-r--r-- | apps/dav/tests/unit/CalDAV/EventComparisonServiceTest.php | 67 |
2 files changed, 68 insertions, 1 deletions
diff --git a/apps/dav/lib/CalDAV/EventComparisonService.php b/apps/dav/lib/CalDAV/EventComparisonService.php index 0f9914dcf98..24f5da34f8e 100644 --- a/apps/dav/lib/CalDAV/EventComparisonService.php +++ b/apps/dav/lib/CalDAV/EventComparisonService.php @@ -65,7 +65,7 @@ class EventComparisonService { $eventToFilterData[] = IMipService::readPropertyWithDefault($eventToFilter, $eventDiff, ''); } // events are identical and can be removed - if (empty(array_diff($filterEventData, $eventToFilterData))) { + if ($filterEventData === $eventToFilterData) { unset($eventsToFilter[$k]); return true; } diff --git a/apps/dav/tests/unit/CalDAV/EventComparisonServiceTest.php b/apps/dav/tests/unit/CalDAV/EventComparisonServiceTest.php index efc9ef32afc..836ec46db30 100644 --- a/apps/dav/tests/unit/CalDAV/EventComparisonServiceTest.php +++ b/apps/dav/tests/unit/CalDAV/EventComparisonServiceTest.php @@ -4,6 +4,7 @@ declare(strict_types=1); /** * @copyright 2023 Daniel Kesselberg <mail@danielkesselberg.de> + * @copyright 2024 Robert C. Schaller <gtbc_robert.schaller@rsxc.de> * * @author 2023 Daniel Kesselberg <mail@danielkesselberg.de> * @@ -137,4 +138,70 @@ class EventComparisonServiceTest extends TestCase { $this->assertEquals([$vEventOld2], $result['old']); $this->assertEquals([$vEventNew2], $result['new']); } + + // First test to certify fix for issue nextcloud/server#41084 + public function testSequenceNumberIncrementDetectedForFirstModificationToEventWithoutZeroInit(): void { + $vCalendarOld = new VCalendar(); + $vCalendarNew = new VCalendar(); + + $vEventOld = $vCalendarOld->add('VEVENT', [ + 'UID' => 'uid-1234', + 'LAST-MODIFIED' => 123456, + // 'SEQUENCE' => 0, // sequence number may not be set to zero during event creation and instead fully omitted + 'SUMMARY' => 'Fellowship meeting', + 'DTSTART' => new \DateTime('2016-01-01 00:00:00'), + 'RRULE' => 'FREQ=DAILY;INTERVAL=1;UNTIL=20160201T000000Z', + ]); + $vEventOld->add('ORGANIZER', 'mailto:gandalf@wiz.ard'); + $vEventOld->add('ATTENDEE', 'mailto:' . 'frodo@hobb.it', ['RSVP' => 'TRUE', 'CN' => 'Frodo']); + + $vEventNew = $vCalendarNew->add('VEVENT', [ + 'UID' => 'uid-1234', + 'LAST-MODIFIED' => 123456, + 'SEQUENCE' => 1, + 'SUMMARY' => 'Fellowship meeting', + 'DTSTART' => new \DateTime('2016-01-01 00:00:00'), + 'RRULE' => 'FREQ=DAILY;INTERVAL=1;UNTIL=20160201T000000Z', + ]); + $vEventNew->add('ORGANIZER', 'mailto:gandalf@wiz.ard'); + $vEventNew->add('ATTENDEE', 'mailto:' . 'frodo@hobb.it', ['RSVP' => 'TRUE', 'CN' => 'Frodo']); + + $result = $this->eventComparisonService->findModified($vCalendarNew, $vCalendarOld); + $this->assertEquals([$vEventOld], $result['old']); + $this->assertEquals([$vEventNew], $result['new']); + } + + // Second test to certify fix for issue nextcloud/server#41084 + public function testSequenceNumberIncrementDetectedForFirstModificationToEventWithZeroInit(): void { + $vCalendarOld = new VCalendar(); + $vCalendarNew = new VCalendar(); + + $vEventOld = $vCalendarOld->add('VEVENT', [ + 'UID' => 'uid-1234', + 'LAST-MODIFIED' => 123456, + 'SEQUENCE' => 0, + 'SUMMARY' => 'Fellowship meeting', + 'DTSTART' => new \DateTime('2016-01-01 00:00:00'), + 'RRULE' => 'FREQ=DAILY;INTERVAL=1;UNTIL=20160201T000000Z', + ]); + $vEventOld->add('ORGANIZER', 'mailto:gandalf@wiz.ard'); + $vEventOld->add('ATTENDEE', 'mailto:' . 'frodo@hobb.it', ['RSVP' => 'TRUE', 'CN' => 'Frodo']); + + $vEventNew = $vCalendarNew->add('VEVENT', [ + 'UID' => 'uid-1234', + 'LAST-MODIFIED' => 123456, + 'SEQUENCE' => 1, + 'SUMMARY' => 'Fellowship meeting', + 'DTSTART' => new \DateTime('2016-01-01 00:00:00'), + 'RRULE' => 'FREQ=DAILY;INTERVAL=1;UNTIL=20160201T000000Z', + ]); + $vEventNew->add('ORGANIZER', 'mailto:gandalf@wiz.ard'); + $vEventNew->add('ATTENDEE', 'mailto:' . 'frodo@hobb.it', ['RSVP' => 'TRUE', 'CN' => 'Frodo']); + + $result = $this->eventComparisonService->findModified($vCalendarNew, $vCalendarOld); + $this->assertEquals([$vEventOld], $result['old']); + $this->assertEquals([$vEventNew], $result['new']); + } + + } |