mirror of
https://github.com/nextcloud/server.git
synced 2025-01-01 18:00:09 +00:00
cbea787233
Reject calendars that - are subscriptions - are not writable - are shared with a user - are deleted - don't support VEVENTs Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
172 lines
4.9 KiB
PHP
172 lines
4.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
|
|
namespace OCA\DAV\Tests\unit\CalDAV;
|
|
|
|
use OCA\DAV\CalDAV\Calendar;
|
|
use OCA\DAV\CalDAV\DefaultCalendarValidator;
|
|
use Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet;
|
|
use Test\TestCase;
|
|
|
|
class DefaultCalendarValidatorTest extends TestCase {
|
|
private DefaultCalendarValidator $validator;
|
|
|
|
protected function setUp(): void {
|
|
parent::setUp();
|
|
|
|
$this->validator = new DefaultCalendarValidator();
|
|
}
|
|
|
|
public function testValidateScheduleDefaultCalendar(): void {
|
|
$node = $this->createMock(Calendar::class);
|
|
$node->expects(self::once())
|
|
->method('isSubscription')
|
|
->willReturn(false);
|
|
$node->expects(self::once())
|
|
->method('canWrite')
|
|
->willReturn(true);
|
|
$node->expects(self::once())
|
|
->method('isShared')
|
|
->willReturn(false);
|
|
$node->expects(self::once())
|
|
->method('isDeleted')
|
|
->willReturn(false);
|
|
$node->expects(self::once())
|
|
->method('getProperties')
|
|
->willReturn([
|
|
'{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new SupportedCalendarComponentSet(['VEVENT']),
|
|
]);
|
|
|
|
$this->validator->validateScheduleDefaultCalendar($node);
|
|
}
|
|
|
|
public function testValidateScheduleDefaultCalendarWithEmptyProperties(): void {
|
|
$node = $this->createMock(Calendar::class);
|
|
$node->expects(self::once())
|
|
->method('isSubscription')
|
|
->willReturn(false);
|
|
$node->expects(self::once())
|
|
->method('canWrite')
|
|
->willReturn(true);
|
|
$node->expects(self::once())
|
|
->method('isShared')
|
|
->willReturn(false);
|
|
$node->expects(self::once())
|
|
->method('isDeleted')
|
|
->willReturn(false);
|
|
$node->expects(self::once())
|
|
->method('getProperties')
|
|
->willReturn([]);
|
|
|
|
$this->validator->validateScheduleDefaultCalendar($node);
|
|
}
|
|
|
|
public function testValidateScheduleDefaultCalendarWithSubscription(): void {
|
|
$node = $this->createMock(Calendar::class);
|
|
$node->expects(self::once())
|
|
->method('isSubscription')
|
|
->willReturn(true);
|
|
$node->expects(self::never())
|
|
->method('canWrite');
|
|
$node->expects(self::never())
|
|
->method('isShared');
|
|
$node->expects(self::never())
|
|
->method('isDeleted');
|
|
$node->expects(self::never())
|
|
->method('getProperties');
|
|
|
|
$this->expectException(\Sabre\DAV\Exception::class);
|
|
$this->validator->validateScheduleDefaultCalendar($node);
|
|
}
|
|
|
|
public function testValidateScheduleDefaultCalendarWithoutWrite(): void {
|
|
$node = $this->createMock(Calendar::class);
|
|
$node->expects(self::once())
|
|
->method('isSubscription')
|
|
->willReturn(false);
|
|
$node->expects(self::once())
|
|
->method('canWrite')
|
|
->willReturn(false);
|
|
$node->expects(self::never())
|
|
->method('isShared');
|
|
$node->expects(self::never())
|
|
->method('isDeleted');
|
|
$node->expects(self::never())
|
|
->method('getProperties');
|
|
|
|
$this->expectException(\Sabre\DAV\Exception::class);
|
|
$this->validator->validateScheduleDefaultCalendar($node);
|
|
}
|
|
|
|
public function testValidateScheduleDefaultCalendarWithShared(): void {
|
|
$node = $this->createMock(Calendar::class);
|
|
$node->expects(self::once())
|
|
->method('isSubscription')
|
|
->willReturn(false);
|
|
$node->expects(self::once())
|
|
->method('canWrite')
|
|
->willReturn(true);
|
|
$node->expects(self::once())
|
|
->method('isShared')
|
|
->willReturn(true);
|
|
$node->expects(self::never())
|
|
->method('isDeleted');
|
|
$node->expects(self::never())
|
|
->method('getProperties');
|
|
|
|
$this->expectException(\Sabre\DAV\Exception::class);
|
|
$this->validator->validateScheduleDefaultCalendar($node);
|
|
}
|
|
|
|
public function testValidateScheduleDefaultCalendarWithDeleted(): void {
|
|
$node = $this->createMock(Calendar::class);
|
|
$node->expects(self::once())
|
|
->method('isSubscription')
|
|
->willReturn(false);
|
|
$node->expects(self::once())
|
|
->method('canWrite')
|
|
->willReturn(true);
|
|
$node->expects(self::once())
|
|
->method('isShared')
|
|
->willReturn(false);
|
|
$node->expects(self::once())
|
|
->method('isDeleted')
|
|
->willReturn(true);
|
|
$node->expects(self::never())
|
|
->method('getProperties');
|
|
|
|
$this->expectException(\Sabre\DAV\Exception::class);
|
|
$this->validator->validateScheduleDefaultCalendar($node);
|
|
}
|
|
|
|
public function testValidateScheduleDefaultCalendarWithoutVeventSupport(): void {
|
|
$node = $this->createMock(Calendar::class);
|
|
$node->expects(self::once())
|
|
->method('isSubscription')
|
|
->willReturn(false);
|
|
$node->expects(self::once())
|
|
->method('canWrite')
|
|
->willReturn(true);
|
|
$node->expects(self::once())
|
|
->method('isShared')
|
|
->willReturn(false);
|
|
$node->expects(self::once())
|
|
->method('isDeleted')
|
|
->willReturn(false);
|
|
$node->expects(self::once())
|
|
->method('getProperties')
|
|
->willReturn([
|
|
'{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set' => new SupportedCalendarComponentSet(['VTODO']),
|
|
]);
|
|
|
|
$this->expectException(\Sabre\DAV\Exception::class);
|
|
$this->validator->validateScheduleDefaultCalendar($node);
|
|
}
|
|
}
|