fix(dav): Fix user status "Undefined array key 0 at StatusService.php#98"

Signed-off-by: Joas Schilling <coding@schilljs.com>
pull/42619/head
Joas Schilling 5 months ago
parent 73b14a28f2
commit e981619c01
No known key found for this signature in database
GPG Key ID: C400AAF20C1BB6FC

@ -94,12 +94,15 @@ class StatusService {
}
// Filter events to see if we have any that apply to the calendar status
$applicableEvents = array_filter($calendarEvents, function (array $calendarEvent) use ($userStatusTimestamp) {
$applicableEvents = array_filter($calendarEvents, static function (array $calendarEvent) use ($userStatusTimestamp): bool {
if (empty($calendarEvent['objects'])) {
return false;
}
$component = $calendarEvent['objects'][0];
if(isset($component['X-NEXTCLOUD-OUT-OF-OFFICE'])) {
if (isset($component['X-NEXTCLOUD-OUT-OF-OFFICE'])) {
return false;
}
if(isset($component['DTSTART']) && $userStatusTimestamp !== null) {
if (isset($component['DTSTART']) && $userStatusTimestamp !== null) {
/** @var DateTimeImmutable $dateTime */
$dateTime = $component['DTSTART'][0];
$timestamp = $dateTime->getTimestamp();
@ -108,7 +111,7 @@ class StatusService {
}
}
// Ignore events that are transparent
if(isset($component['TRANSP']) && strcasecmp($component['TRANSP'][0], 'TRANSPARENT') === 0) {
if (isset($component['TRANSP']) && strcasecmp($component['TRANSP'][0], 'TRANSPARENT') === 0) {
return false;
}
return true;

@ -229,6 +229,50 @@ class StatusServiceTest extends TestCase {
$this->service->processCalendarStatus('admin');
}
public function testCalendarNoEventObjects(): void {
$user = $this->createConfiguredMock(IUser::class, [
'getUID' => 'admin',
]);
$this->userManager->expects(self::once())
->method('get')
->willReturn($user);
$this->availabilityCoordinator->expects(self::once())
->method('getCurrentOutOfOfficeData')
->willReturn(null);
$this->availabilityCoordinator->expects(self::never())
->method('isInEffect');
$this->cache->expects(self::once())
->method('get')
->willReturn(null);
$this->cache->expects(self::once())
->method('set');
$this->calendarManager->expects(self::once())
->method('getCalendarsForPrincipal')
->willReturn([$this->createMock(CalendarImpl::class)]);
$this->calendarManager->expects(self::once())
->method('newQuery')
->willReturn(new CalendarQuery('admin'));
$this->timeFactory->expects(self::exactly(2))
->method('getDateTime')
->willReturn(new \DateTime());
$this->userStatusService->expects(self::once())
->method('findByUserId')
->willThrowException(new DoesNotExistException(''));
$this->calendarManager->expects(self::once())
->method('searchForPrincipal')
->willReturn([['objects' => []]]);
$this->userStatusService->expects(self::once())
->method('revertUserStatus');
$this->logger->expects(self::once())
->method('debug');
$this->userStatusService->expects(self::never())
->method('setUserStatus');
$this->service->processCalendarStatus('admin');
}
public function testCalendarEvent(): void {
$user = $this->createConfiguredMock(IUser::class, [
'getUID' => 'admin',

Loading…
Cancel
Save