Skip to content

Commit

Permalink
Merge pull request #34819 from nextcloud/tests/fix-phpunit-warnings
Browse files Browse the repository at this point in the history
Fix some phpunit test warnings
  • Loading branch information
come-nc authored Dec 6, 2022
2 parents 28358ac + 8ec7e43 commit 67ff8fc
Show file tree
Hide file tree
Showing 5 changed files with 128 additions and 51 deletions.
25 changes: 14 additions & 11 deletions apps/dav/lib/CalDAV/CalendarImpl.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@
use function Sabre\Uri\split as uriSplit;

class CalendarImpl implements ICreateFromString, IHandleImipMessage {

private CalDavBackend $backend;
private Calendar $calendar;
/** @var array<string, mixed> */
Expand Down Expand Up @@ -147,7 +146,7 @@ public function createFromString(string $name, string $calendarData): void {
$server = new InvitationResponseServer(false);

/** @var CustomPrincipalPlugin $plugin */
$plugin = $server->server->getPlugin('auth');
$plugin = $server->getServer()->getPlugin('auth');
// we're working around the previous implementation
// that only allowed the public system principal to be used
// so set the custom principal here
Expand All @@ -163,14 +162,14 @@ public function createFromString(string $name, string $calendarData): void {

// Force calendar change URI
/** @var Schedule\Plugin $schedulingPlugin */
$schedulingPlugin = $server->server->getPlugin('caldav-schedule');
$schedulingPlugin = $server->getServer()->getPlugin('caldav-schedule');
$schedulingPlugin->setPathOfCalendarObjectChange($fullCalendarFilename);

$stream = fopen('php://memory', 'rb+');
fwrite($stream, $calendarData);
rewind($stream);
try {
$server->server->createFile($fullCalendarFilename, $stream);
$server->getServer()->createFile($fullCalendarFilename, $stream);
} catch (Conflict $e) {
throw new CalendarException('Could not create new calendar event: ' . $e->getMessage(), 0, $e);
} finally {
Expand All @@ -182,10 +181,10 @@ public function createFromString(string $name, string $calendarData): void {
* @throws CalendarException
*/
public function handleIMipMessage(string $name, string $calendarData): void {
$server = new InvitationResponseServer(false);
$server = $this->getInvitationResponseServer();

/** @var CustomPrincipalPlugin $plugin */
$plugin = $server->server->getPlugin('auth');
$plugin = $server->getServer()->getPlugin('auth');
// we're working around the previous implementation
// that only allowed the public system principal to be used
// so set the custom principal here
Expand All @@ -196,33 +195,33 @@ public function handleIMipMessage(string $name, string $calendarData): void {
}
// Force calendar change URI
/** @var Schedule\Plugin $schedulingPlugin */
$schedulingPlugin = $server->server->getPlugin('caldav-schedule');
$schedulingPlugin = $server->getServer()->getPlugin('caldav-schedule');
// Let sabre handle the rest
$iTipMessage = new Message();
/** @var VCalendar $vObject */
$vObject = Reader::read($calendarData);
/** @var VEvent $vEvent */
$vEvent = $vObject->{'VEVENT'};

if($vObject->{'METHOD'} === null) {
if ($vObject->{'METHOD'} === null) {
throw new CalendarException('No Method provided for scheduling data. Could not process message');
}

if(!isset($vEvent->{'ORGANIZER'}) || !isset($vEvent->{'ATTENDEE'})) {
if (!isset($vEvent->{'ORGANIZER'}) || !isset($vEvent->{'ATTENDEE'})) {
throw new CalendarException('Could not process scheduling data, neccessary data missing from ICAL');
}
$organizer = $vEvent->{'ORGANIZER'}->getValue();
$attendee = $vEvent->{'ATTENDEE'}->getValue();

$iTipMessage->method = $vObject->{'METHOD'}->getValue();
if($iTipMessage->method === 'REPLY') {
if ($iTipMessage->method === 'REPLY') {
if ($server->isExternalAttendee($vEvent->{'ATTENDEE'}->getValue())) {
$iTipMessage->recipient = $organizer;
} else {
$iTipMessage->recipient = $attendee;
}
$iTipMessage->sender = $attendee;
} else if($iTipMessage->method === 'CANCEL') {
} elseif ($iTipMessage->method === 'CANCEL') {
$iTipMessage->recipient = $attendee;
$iTipMessage->sender = $organizer;
}
Expand All @@ -232,4 +231,8 @@ public function handleIMipMessage(string $name, string $calendarData): void {
$iTipMessage->message = $vObject;
$schedulingPlugin->scheduleLocalDelivery($iTipMessage);
}

public function getInvitationResponseServer(): InvitationResponseServer {
return new InvitationResponseServer(false);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@
use Sabre\VObject\ITip\Message;

class InvitationResponseServer {

/** @var \OCA\DAV\Connector\Sabre\Server */
public $server;

Expand Down Expand Up @@ -127,7 +126,11 @@ public function handleITipMessage(Message $iTipMessage) {

public function isExternalAttendee(string $principalUri): bool {
/** @var \Sabre\DAVACL\Plugin $aclPlugin */
$aclPlugin = $this->server->getPlugin('acl');
$aclPlugin = $this->getServer()->getPlugin('acl');
return $aclPlugin->getPrincipalByUri($principalUri) === null;
}

public function getServer(): \OCA\DAV\Connector\Sabre\Server {
return $this->server;
}
}
144 changes: 108 additions & 36 deletions apps/dav/tests/unit/CalDAV/CalendarImplTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,18 @@
use OCA\DAV\CalDAV\CalendarImpl;
use OCA\DAV\CalDAV\InvitationResponse\InvitationResponseServer;
use OCA\DAV\CalDAV\Schedule\Plugin;
use OCA\DAV\Connector\Sabre\Server;
use OCP\Calendar\Exceptions\CalendarException;
use PHPUnit\Framework\MockObject\MockObject;
use Sabre\VObject\Component\VCalendar;
use Sabre\VObject\Component\VEvent;
use Sabre\VObject\ITip\Message;
use Sabre\VObject\Reader;

/**
* @group DB
*/
class CalendarImplTest extends \Test\TestCase {

/** @var CalendarImpl */
private $calendarImpl;

Expand Down Expand Up @@ -69,7 +77,7 @@ public function testGetKey() {
}

public function testGetDisplayname() {
$this->assertEquals($this->calendarImpl->getDisplayName(),'user readable name 123');
$this->assertEquals($this->calendarImpl->getDisplayName(), 'user readable name 123');
}

public function testGetDisplayColor() {
Expand Down Expand Up @@ -132,76 +140,140 @@ public function testGetPermissionAll() {
}

public function testHandleImipMessage(): void {
$invitationResponseServer = $this->createConfiguredMock(InvitationResponseServer::class, [
'server' => $this->createConfiguredMock(CalDavBackend::class, [
'getPlugin' => [
'auth' => $this->createMock(CustomPrincipalPlugin::class),
'schedule' => $this->createMock(Plugin::class)
]
])
]);

$message = <<<EOF
BEGIN:VCALENDAR
PRODID:-//Nextcloud/Nextcloud CalDAV Server//EN
METHOD:REPLY
VERSION:2.0
BEGIN:VEVENT
ATTENDEE;PARTSTAT=mailto:[email protected]:ACCEPTED
ATTENDEE;PARTSTAT=ACCEPTED:mailto:[email protected]
ORGANIZER:mailto:[email protected]
UID:aUniqueUid
SEQUENCE:2
REQUEST-STATUS:2.0;Success
%sEND:VEVENT
END:VEVENT
END:VCALENDAR
EOF;

/** @var CustomPrincipalPlugin|MockObject $authPlugin */
$authPlugin = $invitationResponseServer->server->getPlugin('auth');
$authPlugin = $this->createMock(CustomPrincipalPlugin::class);
$authPlugin->expects(self::once())
->method('setPrincipalUri')
->method('setCurrentPrincipal')
->with($this->calendar->getPrincipalURI());

/** @var \Sabre\DAVACL\Plugin|MockObject $aclPlugin*/
$aclPlugin = $this->createMock(\Sabre\DAVACL\Plugin::class);

/** @var Plugin|MockObject $schedulingPlugin */
$schedulingPlugin = $invitationResponseServer->server->getPlugin('caldav-schedule');
$schedulingPlugin = $this->createMock(Plugin::class);
$iTipMessage = $this->getITipMessage($message);
$iTipMessage->recipient = "mailto:[email protected]";
$schedulingPlugin->expects(self::once())
->method('setPathOfCalendarObjectChange')
->with('fullcalendarname');
->method('scheduleLocalDelivery')
->with($iTipMessage);

$server = $this->createMock(Server::class);
$server->expects($this->any())
->method('getPlugin')
->willReturnMap([
['auth', $authPlugin],
['acl', $aclPlugin],
['caldav-schedule', $schedulingPlugin]
]);

$invitationResponseServer = $this->createPartialMock(InvitationResponseServer::class, ['getServer', 'isExternalAttendee']);
$invitationResponseServer->server = $server;
$invitationResponseServer->expects($this->any())
->method('getServer')
->willReturn($server);
$invitationResponseServer->expects(self::once())
->method('isExternalAttendee')
->willReturn(false);

$calendarImpl = $this->getMockBuilder(CalendarImpl::class)
->setConstructorArgs([$this->calendar, $this->calendarInfo, $this->backend])
->onlyMethods(['getInvitationResponseServer'])
->getMock();
$calendarImpl->expects($this->once())
->method('getInvitationResponseServer')
->willReturn($invitationResponseServer);

$calendarImpl->handleIMipMessage('filename.ics', $message);
}

public function testHandleImipMessageNoCalendarUri(): void {
$invitationResponseServer = $this->createConfiguredMock(InvitationResponseServer::class, [
'server' => $this->createConfiguredMock(CalDavBackend::class, [
'getPlugin' => [
'auth' => $this->createMock(CustomPrincipalPlugin::class),
'schedule' => $this->createMock(Plugin::class)
]
])
]);
/** @var CustomPrincipalPlugin|MockObject $authPlugin */
$authPlugin = $this->createMock(CustomPrincipalPlugin::class);
$authPlugin->expects(self::once())
->method('setCurrentPrincipal')
->with($this->calendar->getPrincipalURI());
unset($this->calendarInfo['uri']);

/** @var Plugin|MockObject $schedulingPlugin */
$schedulingPlugin = $this->createMock(Plugin::class);

/** @var \Sabre\DAVACL\Plugin|MockObject $schedulingPlugin */
$aclPlugin = $this->createMock(\Sabre\DAVACL\Plugin::class);

$server =
$this->createMock(Server::class);
$server->expects($this->any())
->method('getPlugin')
->willReturnMap([
['auth', $authPlugin],
['acl', $aclPlugin],
['caldav-schedule', $schedulingPlugin]
]);

$invitationResponseServer = $this->createPartialMock(InvitationResponseServer::class, ['getServer']);
$invitationResponseServer->server = $server;
$invitationResponseServer->expects($this->any())
->method('getServer')
->willReturn($server);

$calendarImpl = $this->getMockBuilder(CalendarImpl::class)
->setConstructorArgs([$this->calendar, $this->calendarInfo, $this->backend])
->onlyMethods(['getInvitationResponseServer'])
->getMock();
$calendarImpl->expects($this->once())
->method('getInvitationResponseServer')
->willReturn($invitationResponseServer);

$message = <<<EOF
BEGIN:VCALENDAR
PRODID:-//Nextcloud/Nextcloud CalDAV Server//EN
METHOD:REPLY
VERSION:2.0
BEGIN:VEVENT
ATTENDEE;PARTSTAT=mailto:[email protected]:ACCEPTED
ATTENDEE;PARTSTAT=ACCEPTED:mailto:[email protected]
ORGANIZER:mailto:[email protected]
UID:aUniqueUid
SEQUENCE:2
REQUEST-STATUS:2.0;Success
%sEND:VEVENT
END:VEVENT
END:VCALENDAR
EOF;

/** @var CustomPrincipalPlugin|MockObject $authPlugin */
$authPlugin = $invitationResponseServer->server->getPlugin('auth');
$authPlugin->expects(self::once())
->method('setPrincipalUri')
->with($this->calendar->getPrincipalURI());
$this->expectException(CalendarException::class);
$calendarImpl->handleIMipMessage('filename.ics', $message);
}

unset($this->calendarInfo['uri']);
$this->expectException('CalendarException');
$this->calendarImpl->handleIMipMessage('filename.ics', $message);
private function getITipMessage($calendarData): Message {
$iTipMessage = new Message();
/** @var VCalendar $vObject */
$vObject = Reader::read($calendarData);
/** @var VEvent $vEvent */
$vEvent = $vObject->{'VEVENT'};
$orgaizer = $vEvent->{'ORGANIZER'}->getValue();
$attendee = $vEvent->{'ATTENDEE'}->getValue();

$iTipMessage->method = $vObject->{'METHOD'}->getValue();
$iTipMessage->recipient = $orgaizer;
$iTipMessage->sender = $attendee;
$iTipMessage->uid = isset($vEvent->{'UID'}) ? $vEvent->{'UID'}->getValue() : '';
$iTipMessage->component = 'VEVENT';
$iTipMessage->sequence = isset($vEvent->{'SEQUENCE'}) ? (int)$vEvent->{'SEQUENCE'}->getValue() : 0;
$iTipMessage->message = $vObject;
return $iTipMessage;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -480,7 +480,7 @@ private function buildQueryExpects($token, $return, $time) {
$expr->expects($this->once())
->method('eq')
->with('token', 'namedParameterToken')
->willReturn($function);
->willReturn((string)$function);

$this->dbConnection->expects($this->once())
->method('getQueryBuilder')
Expand Down
1 change: 0 additions & 1 deletion tests/lib/Encryption/UtilTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
use Test\TestCase;

class UtilTest extends TestCase {

/**
* block size will always be 8192 for a PHP stream
* @see https://bugs.php.net/bug.php?id=21641
Expand Down

0 comments on commit 67ff8fc

Please sign in to comment.