2017-10-31 12:06:01 -04:00
< ? php
2025-04-27 08:38:18 -04:00
2017-10-31 12:06:01 -04:00
/**
2024-05-10 09:09:14 -04:00
* SPDX - FileCopyrightText : 2017 Nextcloud GmbH and Nextcloud contributors
* SPDX - License - Identifier : AGPL - 3.0 - or - later
2017-10-31 12:06:01 -04:00
*/
namespace Test\Calendar ;
2021-09-27 08:58:16 -04:00
use OC\AppFramework\Bootstrap\Coordinator ;
2019-11-22 14:52:10 -05:00
use OC\Calendar\Manager ;
2022-06-23 16:17:53 -04:00
use OCP\AppFramework\Utility\ITimeFactory ;
2017-10-31 12:06:01 -04:00
use OCP\Calendar\ICalendar ;
2022-06-23 16:17:53 -04:00
use OCP\Calendar\ICreateFromString ;
2022-12-06 07:52:13 -05:00
use OCP\Calendar\IHandleImipMessage ;
2021-09-27 08:58:16 -04:00
use PHPUnit\Framework\MockObject\MockObject ;
2021-10-14 05:12:55 -04:00
use Psr\Container\ContainerInterface ;
use Psr\Log\LoggerInterface ;
2025-05-12 14:43:35 -04:00
use Sabre\VObject\Component\VCalendar ;
2019-11-22 14:52:10 -05:00
use Test\TestCase ;
2017-10-31 12:06:01 -04:00
2022-12-06 07:52:13 -05:00
/*
* This allows us to create Mock object supporting both interfaces
*/
2025-05-12 14:43:35 -04:00
interface ITestCalendar extends ICreateFromString , IHandleImipMessage {
2022-12-06 07:52:13 -05:00
}
2017-10-31 12:06:01 -04:00
class ManagerTest extends TestCase {
2021-09-27 08:58:16 -04:00
/** @var Coordinator|MockObject */
private $coordinator ;
2021-10-14 05:12:55 -04:00
/** @var MockObject|ContainerInterface */
private $container ;
/** @var MockObject|LoggerInterface */
private $logger ;
2017-10-31 12:06:01 -04:00
/** @var Manager */
private $manager ;
2022-06-23 16:17:53 -04:00
/** @var ITimeFactory|ITimeFactory&MockObject|MockObject */
private $time ;
2025-05-12 14:43:35 -04:00
private VCalendar $vCalendar1a ;
private VCalendar $vCalendar2a ;
private VCalendar $vCalendar3a ;
2019-11-21 10:40:38 -05:00
protected function setUp () : void {
2017-10-31 12:06:01 -04:00
parent :: setUp ();
2021-09-27 08:58:16 -04:00
$this -> coordinator = $this -> createMock ( Coordinator :: class );
2021-10-14 05:12:55 -04:00
$this -> container = $this -> createMock ( ContainerInterface :: class );
$this -> logger = $this -> createMock ( LoggerInterface :: class );
2022-06-23 16:17:53 -04:00
$this -> time = $this -> createMock ( ITimeFactory :: class );
2021-09-27 08:58:16 -04:00
$this -> manager = new Manager (
2021-10-14 05:12:55 -04:00
$this -> coordinator ,
$this -> container ,
2022-06-23 16:17:53 -04:00
$this -> logger ,
$this -> time ,
2021-09-27 08:58:16 -04:00
);
2025-05-12 14:43:35 -04:00
// construct calendar with a 1 hour event and same start/end time zones
$this -> vCalendar1a = new VCalendar ();
/** @var VEvent $vEvent */
$vEvent = $this -> vCalendar1a -> add ( 'VEVENT' , []);
$vEvent -> UID -> setValue ( '96a0e6b1-d886-4a55-a60d-152b31401dcc' );
$vEvent -> add ( 'DTSTART' , '20240701T080000' , [ 'TZID' => 'America/Toronto' ]);
$vEvent -> add ( 'DTEND' , '20240701T090000' , [ 'TZID' => 'America/Toronto' ]);
$vEvent -> add ( 'SUMMARY' , 'Test Event' );
$vEvent -> add ( 'SEQUENCE' , 3 );
$vEvent -> add ( 'STATUS' , 'CONFIRMED' );
$vEvent -> add ( 'TRANSP' , 'OPAQUE' );
$vEvent -> add ( 'ORGANIZER' , 'mailto:organizer@testing.com' , [ 'CN' => 'Organizer' ]);
$vEvent -> add ( 'ATTENDEE' , 'mailto:attendee1@testing.com' , [
'CN' => 'Attendee One' ,
'CUTYPE' => 'INDIVIDUAL' ,
'PARTSTAT' => 'NEEDS-ACTION' ,
'ROLE' => 'REQ-PARTICIPANT' ,
'RSVP' => 'TRUE'
]);
// construct calendar with a event for reply
$this -> vCalendar2a = new VCalendar ();
/** @var VEvent $vEvent */
$vEvent = $this -> vCalendar2a -> add ( 'VEVENT' , []);
$vEvent -> UID -> setValue ( 'dcc733bf-b2b2-41f2-a8cf-550ae4b67aff' );
$vEvent -> add ( 'DTSTART' , '20210820' );
$vEvent -> add ( 'DTEND' , '20220821' );
$vEvent -> add ( 'SUMMARY' , 'berry basket' );
$vEvent -> add ( 'SEQUENCE' , 3 );
$vEvent -> add ( 'STATUS' , 'CONFIRMED' );
$vEvent -> add ( 'TRANSP' , 'OPAQUE' );
$vEvent -> add ( 'ORGANIZER' , 'mailto:linus@stardew-tent-living.com' , [ 'CN' => 'admin' ]);
$vEvent -> add ( 'ATTENDEE' , 'mailto:pierre@general-store.com' , [
'CN' => 'pierre@general-store.com' ,
'CUTYPE' => 'INDIVIDUAL' ,
'ROLE' => 'REQ-PARTICIPANT' ,
'PARTSTAT' => 'ACCEPTED' ,
]);
// construct calendar with a event for reply
$this -> vCalendar3a = new VCalendar ();
/** @var VEvent $vEvent */
$vEvent = $this -> vCalendar3a -> add ( 'VEVENT' , []);
$vEvent -> UID -> setValue ( 'dcc733bf-b2b2-41f2-a8cf-550ae4b67aff' );
$vEvent -> add ( 'DTSTART' , '20210820' );
$vEvent -> add ( 'DTEND' , '20220821' );
$vEvent -> add ( 'SUMMARY' , 'berry basket' );
$vEvent -> add ( 'SEQUENCE' , 3 );
$vEvent -> add ( 'STATUS' , 'CANCELLED' );
$vEvent -> add ( 'TRANSP' , 'OPAQUE' );
$vEvent -> add ( 'ORGANIZER' , 'mailto:linus@stardew-tent-living.com' , [ 'CN' => 'admin' ]);
$vEvent -> add ( 'ATTENDEE' , 'mailto:pierre@general-store.com' , [
'CN' => 'pierre@general-store.com' ,
'CUTYPE' => 'INDIVIDUAL' ,
'ROLE' => 'REQ-PARTICIPANT' ,
'PARTSTAT' => 'ACCEPTED' ,
]);
2017-10-31 12:06:01 -04:00
}
/**
* @ dataProvider searchProvider
*/
public function testSearch ( $search1 , $search2 , $expected ) {
2021-09-27 08:58:16 -04:00
/** @var ICalendar | MockObject $calendar1 */
2017-10-31 12:06:01 -04:00
$calendar1 = $this -> createMock ( ICalendar :: class );
2020-03-25 17:21:27 -04:00
$calendar1 -> method ( 'getKey' ) -> willReturn ( 'simple:1' );
2017-10-31 12:06:01 -04:00
$calendar1 -> expects ( $this -> once ())
-> method ( 'search' )
-> with ( '' , [], [], null , null )
2020-03-25 17:21:27 -04:00
-> willReturn ( $search1 );
2017-10-31 12:06:01 -04:00
2021-09-27 08:58:16 -04:00
/** @var ICalendar | MockObject $calendar2 */
2017-10-31 12:06:01 -04:00
$calendar2 = $this -> createMock ( ICalendar :: class );
2020-03-25 17:21:27 -04:00
$calendar2 -> method ( 'getKey' ) -> willReturn ( 'simple:2' );
2017-10-31 12:06:01 -04:00
$calendar2 -> expects ( $this -> once ())
-> method ( 'search' )
-> with ( '' , [], [], null , null )
2020-03-25 17:21:27 -04:00
-> willReturn ( $search2 );
2017-10-31 12:06:01 -04:00
$this -> manager -> registerCalendar ( $calendar1 );
$this -> manager -> registerCalendar ( $calendar2 );
$result = $this -> manager -> search ( '' );
$this -> assertEquals ( $expected , $result );
}
/**
* @ dataProvider searchProvider
*/
public function testSearchOptions ( $search1 , $search2 , $expected ) {
2021-09-27 08:58:16 -04:00
/** @var ICalendar | MockObject $calendar1 */
2017-10-31 12:06:01 -04:00
$calendar1 = $this -> createMock ( ICalendar :: class );
2020-03-25 17:21:27 -04:00
$calendar1 -> method ( 'getKey' ) -> willReturn ( 'simple:1' );
2017-10-31 12:06:01 -04:00
$calendar1 -> expects ( $this -> once ())
-> method ( 'search' )
-> with ( 'searchTerm' , [ 'SUMMARY' , 'DESCRIPTION' ],
[ 'timerange' => [ 'start' => null , 'end' => null ]], 5 , 20 )
2020-03-25 17:21:27 -04:00
-> willReturn ( $search1 );
2017-10-31 12:06:01 -04:00
2021-09-27 08:58:16 -04:00
/** @var ICalendar | MockObject $calendar2 */
2017-10-31 12:06:01 -04:00
$calendar2 = $this -> createMock ( ICalendar :: class );
2020-03-25 17:21:27 -04:00
$calendar2 -> method ( 'getKey' ) -> willReturn ( 'simple:2' );
2017-10-31 12:06:01 -04:00
$calendar2 -> expects ( $this -> once ())
-> method ( 'search' )
-> with ( 'searchTerm' , [ 'SUMMARY' , 'DESCRIPTION' ],
[ 'timerange' => [ 'start' => null , 'end' => null ]], 5 , 20 )
2020-03-25 17:21:27 -04:00
-> willReturn ( $search2 );
2017-10-31 12:06:01 -04:00
$this -> manager -> registerCalendar ( $calendar1 );
$this -> manager -> registerCalendar ( $calendar2 );
$result = $this -> manager -> search ( 'searchTerm' , [ 'SUMMARY' , 'DESCRIPTION' ],
[ 'timerange' => [ 'start' => null , 'end' => null ]], 5 , 20 );
$this -> assertEquals ( $expected , $result );
}
public function searchProvider () {
$search1 = [
[
'id' => 1 ,
'data' => 'foobar' ,
],
[
'id' => 2 ,
'data' => 'barfoo' ,
]
];
$search2 = [
[
'id' => 3 ,
'data' => 'blablub' ,
],
[
'id' => 4 ,
'data' => 'blubbla' ,
]
];
$expected = [
[
'id' => 1 ,
'data' => 'foobar' ,
'calendar-key' => 'simple:1' ,
],
[
'id' => 2 ,
'data' => 'barfoo' ,
'calendar-key' => 'simple:1' ,
],
[
'id' => 3 ,
'data' => 'blablub' ,
'calendar-key' => 'simple:2' ,
],
[
'id' => 4 ,
'data' => 'blubbla' ,
'calendar-key' => 'simple:2' ,
]
];
return [
[
$search1 ,
$search2 ,
$expected
]
];
}
public function testRegisterUnregister () {
2021-09-27 08:58:16 -04:00
/** @var ICalendar | MockObject $calendar1 */
2017-10-31 12:06:01 -04:00
$calendar1 = $this -> createMock ( ICalendar :: class );
2020-03-25 17:21:27 -04:00
$calendar1 -> method ( 'getKey' ) -> willReturn ( 'key1' );
2017-10-31 12:06:01 -04:00
2021-09-27 08:58:16 -04:00
/** @var ICalendar | MockObject $calendar2 */
2017-10-31 12:06:01 -04:00
$calendar2 = $this -> createMock ( ICalendar :: class );
2020-03-25 17:21:27 -04:00
$calendar2 -> method ( 'getKey' ) -> willReturn ( 'key2' );
2017-10-31 12:06:01 -04:00
$this -> manager -> registerCalendar ( $calendar1 );
$this -> manager -> registerCalendar ( $calendar2 );
$result = $this -> manager -> getCalendars ();
$this -> assertCount ( 2 , $result );
$this -> assertContains ( $calendar1 , $result );
$this -> assertContains ( $calendar2 , $result );
$this -> manager -> unregisterCalendar ( $calendar1 );
$result = $this -> manager -> getCalendars ();
$this -> assertCount ( 1 , $result );
$this -> assertContains ( $calendar2 , $result );
}
public function testGetCalendars () {
2021-09-27 08:58:16 -04:00
/** @var ICalendar | MockObject $calendar1 */
2017-10-31 12:06:01 -04:00
$calendar1 = $this -> createMock ( ICalendar :: class );
2020-03-25 17:21:27 -04:00
$calendar1 -> method ( 'getKey' ) -> willReturn ( 'key1' );
2017-10-31 12:06:01 -04:00
2021-09-27 08:58:16 -04:00
/** @var ICalendar | MockObject $calendar2 */
2017-10-31 12:06:01 -04:00
$calendar2 = $this -> createMock ( ICalendar :: class );
2020-03-25 17:21:27 -04:00
$calendar2 -> method ( 'getKey' ) -> willReturn ( 'key2' );
2017-10-31 12:06:01 -04:00
$this -> manager -> registerCalendar ( $calendar1 );
$this -> manager -> registerCalendar ( $calendar2 );
$result = $this -> manager -> getCalendars ();
$this -> assertCount ( 2 , $result );
$this -> assertContains ( $calendar1 , $result );
$this -> assertContains ( $calendar2 , $result );
$this -> manager -> clear ();
$result = $this -> manager -> getCalendars ();
$this -> assertCount ( 0 , $result );
}
public function testEnabledIfNot () {
$isEnabled = $this -> manager -> isEnabled ();
$this -> assertFalse ( $isEnabled );
}
public function testIfEnabledIfSo () {
2021-09-27 08:58:16 -04:00
/** @var ICalendar | MockObject $calendar */
2017-10-31 12:06:01 -04:00
$calendar = $this -> createMock ( ICalendar :: class );
$this -> manager -> registerCalendar ( $calendar );
$isEnabled = $this -> manager -> isEnabled ();
$this -> assertTrue ( $isEnabled );
}
2022-06-23 16:17:53 -04:00
2025-05-12 14:43:35 -04:00
public function testHandleImipReplyWithNoCalendars () : void {
// construct calendar manager returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
])
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([]);
// construct logger returns
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message could not be processed because user has no calendars' );
// construct parameters
2022-06-23 16:17:53 -04:00
$principalUri = 'principals/user/linus' ;
$sender = 'pierre@general-store.com' ;
$recipient = 'linus@stardew-tent-living.com' ;
2025-05-12 14:43:35 -04:00
$calendar = $this -> vCalendar2a ;
$calendar -> add ( 'METHOD' , 'REPLY' );
// Act
$result = $manager -> handleIMipReply ( $principalUri , $sender , $recipient , $calendar -> serialize ());
// Assert
$this -> assertFalse ( $result );
}
2022-06-23 16:17:53 -04:00
2025-05-12 14:43:35 -04:00
public function testHandleImipReplyWithInvalidData () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
])
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $userCalendar ]);
// construct logger returns
$this -> logger -> expects ( self :: once ()) -> method ( 'error' )
-> with ( 'iMip message could not be processed because an error occurred while parsing the iMip message' );
// construct parameters
$principalUri = 'principals/user/attendee1' ;
$sender = 'organizer@testing.com' ;
$recipient = 'attendee1@testing.com' ;
// Act
$result = $manager -> handleIMipReply ( $principalUri , $sender , $recipient , 'Invalid data' );
// Assert
2022-06-23 16:17:53 -04:00
$this -> assertFalse ( $result );
}
2025-05-12 14:43:35 -04:00
public function testHandleImipReplyWithNoMethod () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
])
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $userCalendar ]);
// construct logger returns
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message contains an incorrect or invalid method' );
// construct parameters
2022-06-23 16:17:53 -04:00
$principalUri = 'principals/user/linus' ;
2025-05-12 14:43:35 -04:00
$sender = 'pierre@general-store.com' ;
$recipient = 'linus@stardew-tent-living.com' ;
$calendar = $this -> vCalendar2a ;
// Act
$result = $manager -> handleIMipReply ( $principalUri , $sender , $recipient , $calendar -> serialize ());
// Assert
2022-06-23 16:17:53 -04:00
$this -> assertFalse ( $result );
}
2025-05-12 14:43:35 -04:00
public function testHandleImipReplyWithInvalidMethod () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
])
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $userCalendar ]);
// construct logger returns
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message contains an incorrect or invalid method' );
// construct parameters
2022-06-23 16:17:53 -04:00
$principalUri = 'principals/user/linus' ;
$sender = 'pierre@general-store.com' ;
$recipient = 'linus@stardew-tent-living.com' ;
2025-05-12 14:43:35 -04:00
$calendar = $this -> vCalendar2a ;
$calendar -> add ( 'METHOD' , 'UNKNOWN' );
// Act
$result = $manager -> handleIMipReply ( $principalUri , $sender , $recipient , $calendar -> serialize ());
// Assert
2022-06-23 16:17:53 -04:00
$this -> assertFalse ( $result );
}
2025-05-12 14:43:35 -04:00
public function testHandleImipReplyWithNoEvent () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
2022-06-23 16:17:53 -04:00
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
2025-05-12 14:43:35 -04:00
$this -> time ,
2022-09-06 03:05:36 -04:00
])
2025-05-12 14:43:35 -04:00
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
2022-09-06 03:05:36 -04:00
-> getMock ();
2025-05-12 14:43:35 -04:00
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $userCalendar ]);
// construct logger returns
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message contains no event' );
// construct parameters
2022-06-23 16:17:53 -04:00
$principalUri = 'principals/user/linus' ;
$sender = 'pierre@general-store.com' ;
$recipient = 'linus@stardew-tent-living.com' ;
2025-05-12 14:43:35 -04:00
$calendar = $this -> vCalendar2a ;
$calendar -> add ( 'METHOD' , 'REPLY' );
$calendar -> remove ( 'VEVENT' );
// Act
$result = $manager -> handleIMipReply ( $principalUri , $sender , $recipient , $calendar -> serialize ());
// Assert
$this -> assertFalse ( $result );
}
2022-06-23 16:17:53 -04:00
2025-05-12 14:43:35 -04:00
public function testHandleImipReplyWithNoUid () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
])
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
2022-06-23 16:17:53 -04:00
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
2025-05-12 14:43:35 -04:00
-> willReturn ([ $userCalendar ]);
// construct logger returns
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message event dose not contains a UID' );
// construct parameters
$principalUri = 'principals/user/linus' ;
$sender = 'pierre@general-store.com' ;
$recipient = 'linus@stardew-tent-living.com' ;
$calendar = $this -> vCalendar2a ;
$calendar -> add ( 'METHOD' , 'REPLY' );
$calendar -> VEVENT -> remove ( 'UID' );
// Act
$result = $manager -> handleIMipReply ( $principalUri , $sender , $recipient , $calendar -> serialize ());
// Assert
2022-06-23 16:17:53 -04:00
$this -> assertFalse ( $result );
}
2025-05-12 14:43:35 -04:00
public function testHandleImipReplyWithNoOrganizer () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
2022-06-23 16:17:53 -04:00
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
2025-05-12 14:43:35 -04:00
$this -> time ,
2022-06-23 16:17:53 -04:00
])
2025-05-12 14:43:35 -04:00
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $userCalendar ]);
// construct logger returns
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message event dose not contains an organizer' );
// construct parameters
$principalUri = 'principals/user/linus' ;
$sender = 'pierre@general-store.com' ;
$recipient = 'linus@stardew-tent-living.com' ;
$calendar = $this -> vCalendar2a ;
$calendar -> add ( 'METHOD' , 'REPLY' );
$calendar -> VEVENT -> remove ( 'ORGANIZER' );
// Act
$result = $manager -> handleIMipReply ( $principalUri , $sender , $recipient , $calendar -> serialize ());
// Assert
$this -> assertFalse ( $result );
}
public function testHandleImipReplyWithNoAttendee () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
2022-09-06 03:05:36 -04:00
])
2025-05-12 14:43:35 -04:00
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
2022-09-06 03:05:36 -04:00
-> getMock ();
2025-05-12 14:43:35 -04:00
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $userCalendar ]);
// construct logger returns
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message event dose not contains any attendees' );
// construct parameters
2022-06-23 16:17:53 -04:00
$principalUri = 'principals/user/linus' ;
$sender = 'pierre@general-store.com' ;
$recipient = 'linus@stardew-tent-living.com' ;
2025-05-12 14:43:35 -04:00
$calendar = $this -> vCalendar2a ;
$calendar -> add ( 'METHOD' , 'REPLY' );
$calendar -> VEVENT -> remove ( 'ATTENDEE' );
// Act
$result = $manager -> handleIMipReply ( $principalUri , $sender , $recipient , $calendar -> serialize ());
// Assert
$this -> assertFalse ( $result );
}
2022-06-23 16:17:53 -04:00
2025-05-12 14:43:35 -04:00
public function testHandleImipReplyDateInThePast () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
])
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
2022-06-23 16:17:53 -04:00
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
2025-05-12 14:43:35 -04:00
-> willReturn ([ $userCalendar ]);
// construct logger and time returns
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message event could not be processed because the event is in the past' );
$this -> time -> expects ( self :: once ())
-> method ( 'getTime' )
-> willReturn ( time ());
// construct parameters
$principalUri = 'principals/user/linus' ;
$sender = 'pierre@general-store.com' ;
$recipient = 'linus@stardew-tent-living.com' ;
$calendarData = clone $this -> vCalendar2a ;
$calendarData -> add ( 'METHOD' , 'REPLY' );
$calendarData -> VEVENT -> DTSTART = new \DateTime ( '2013-04-07' ); // set to in the past
// Act
$result = $manager -> handleIMipReply ( $principalUri , $sender , $recipient , $calendarData -> serialize ());
// Assert
$this -> assertFalse ( $result );
}
public function testHandleImipReplyEventNotFound () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
$userCalendar -> expects ( self :: once ())
2022-06-23 16:17:53 -04:00
-> method ( 'search' )
-> willReturn ([]);
2025-05-12 14:43:35 -04:00
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
])
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $userCalendar ]);
// construct time returns
$this -> time -> expects ( self :: once ())
-> method ( 'getTime' )
-> willReturn ( 1628374233 );
// construct parameters
$principalUri = 'principals/user/linus' ;
$sender = 'pierre@general-store.com' ;
$recipient = 'linus@stardew-tent-living.com' ;
$calendarData = clone $this -> vCalendar2a ;
$calendarData -> add ( 'METHOD' , 'REPLY' );
// construct logger return
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message event could not be processed because no corresponding event was found in any calendar ' . $principalUri . ' and UID ' . $calendarData -> VEVENT -> UID -> getValue ());
// Act
2022-06-23 16:17:53 -04:00
$result = $manager -> handleIMipReply ( $principalUri , $sender , $recipient , $calendarData -> serialize ());
2025-05-12 14:43:35 -04:00
// Assert
2022-06-23 16:17:53 -04:00
$this -> assertFalse ( $result );
}
public function testHandleImipReply () : void {
/** @var Manager | \PHPUnit\Framework\MockObject\MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
2025-05-12 14:43:35 -04:00
$this -> time ,
2022-06-23 16:17:53 -04:00
])
2025-05-12 14:43:35 -04:00
-> onlyMethods ([
2022-06-23 16:17:53 -04:00
'getCalendarsForPrincipal'
2022-09-06 03:05:36 -04:00
])
-> getMock ();
2025-05-12 14:43:35 -04:00
$calendar = $this -> createMock ( ITestCalendar :: class );
2022-06-23 16:17:53 -04:00
$principalUri = 'principals/user/linus' ;
$sender = 'pierre@general-store.com' ;
$recipient = 'linus@stardew-tent-living.com' ;
2025-05-12 14:43:35 -04:00
$calendarData = clone $this -> vCalendar2a ;
$calendarData -> add ( 'METHOD' , 'REPLY' );
2022-06-23 16:17:53 -04:00
$this -> time -> expects ( self :: once ())
2022-09-05 12:09:49 -04:00
-> method ( 'getTime' )
2022-09-07 20:26:46 -04:00
-> willReturn ( 1628374233 );
2022-06-23 16:17:53 -04:00
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $calendar ]);
$calendar -> expects ( self :: once ())
-> method ( 'search' )
-> willReturn ([[ 'uri' => 'testname.ics' ]]);
$calendar -> expects ( self :: once ())
-> method ( 'handleIMipMessage' )
-> with ( 'testname.ics' , $calendarData -> serialize ());
2025-05-12 14:43:35 -04:00
// Act
2022-06-23 16:17:53 -04:00
$result = $manager -> handleIMipReply ( $principalUri , $sender , $recipient , $calendarData -> serialize ());
2025-05-12 14:43:35 -04:00
// Assert
2022-06-23 16:17:53 -04:00
$this -> assertTrue ( $result );
}
2025-05-12 14:43:35 -04:00
public function testHandleImipCancelWithNoCalendars () : void {
// construct calendar manager returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
])
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([]);
// construct logger returns
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message could not be processed because user has no calendars' );
// construct parameters
2022-06-23 16:17:53 -04:00
$principalUri = 'principals/user/pierre' ;
$sender = 'linus@stardew-tent-living.com' ;
$recipient = 'pierre@general-store.com' ;
$replyTo = null ;
2025-05-12 14:43:35 -04:00
$calendar = $this -> vCalendar3a ;
$calendar -> add ( 'METHOD' , 'CANCEL' );
// Act
$result = $manager -> handleIMipCancel ( $principalUri , $sender , $replyTo , $recipient , $calendar -> serialize ());
// Assert
$this -> assertFalse ( $result );
}
2022-06-23 16:17:53 -04:00
2025-05-12 14:43:35 -04:00
public function testHandleImipCancelWithInvalidData () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
])
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $userCalendar ]);
// construct logger returns
$this -> logger -> expects ( self :: once ()) -> method ( 'error' )
-> with ( 'iMip message could not be processed because an error occurred while parsing the iMip message' );
// construct parameters
$principalUri = 'principals/user/attendee1' ;
$sender = 'organizer@testing.com' ;
$recipient = 'attendee1@testing.com' ;
$replyTo = null ;
// Act
$result = $manager -> handleIMipCancel ( $principalUri , $sender , $replyTo , $recipient , 'Invalid data' );
// Assert
2022-06-23 16:17:53 -04:00
$this -> assertFalse ( $result );
}
2025-05-12 14:43:35 -04:00
public function testHandleImipCancelWithNoMethod () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
])
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $userCalendar ]);
// construct logger returns
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message contains an incorrect or invalid method' );
// construct parameters
$principalUri = 'principals/user/pierre' ;
2022-06-23 16:17:53 -04:00
$sender = 'linus@stardew-tent-living.com' ;
2025-05-12 14:43:35 -04:00
$recipient = 'pierre@general-store.com' ;
2022-06-23 16:17:53 -04:00
$replyTo = null ;
2025-05-12 14:43:35 -04:00
$calendar = $this -> vCalendar3a ;
// Act
$result = $manager -> handleIMipCancel ( $principalUri , $sender , $replyTo , $recipient , $calendar -> serialize ());
// Assert
$this -> assertFalse ( $result );
}
2022-06-23 16:17:53 -04:00
2025-05-12 14:43:35 -04:00
public function testHandleImipCancelWithInvalidMethod () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
])
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $userCalendar ]);
// construct logger returns
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message contains an incorrect or invalid method' );
// construct parameters
$principalUri = 'principals/user/pierre' ;
$sender = 'linus@stardew-tent-living.com' ;
$recipient = 'pierre@general-store.com' ;
$replyTo = null ;
$calendar = $this -> vCalendar3a ;
$calendar -> add ( 'METHOD' , 'UNKNOWN' );
// Act
$result = $manager -> handleIMipCancel ( $principalUri , $sender , $replyTo , $recipient , $calendar -> serialize ());
// Assert
$this -> assertFalse ( $result );
}
2022-06-23 16:17:53 -04:00
2025-05-12 14:43:35 -04:00
public function testHandleImipCancelWithNoEvent () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
])
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $userCalendar ]);
// construct logger returns
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message contains no event' );
// construct parameters
$principalUri = 'principals/user/pierre' ;
$sender = 'linus@stardew-tent-living.com' ;
$recipient = 'pierre@general-store.com' ;
$replyTo = null ;
$calendar = $this -> vCalendar3a ;
$calendar -> add ( 'METHOD' , 'CANCEL' );
$calendar -> remove ( 'VEVENT' );
// Act
$result = $manager -> handleIMipCancel ( $principalUri , $sender , $replyTo , $recipient , $calendar -> serialize ());
// Assert
2022-06-23 16:17:53 -04:00
$this -> assertFalse ( $result );
}
2025-05-12 14:43:35 -04:00
public function testHandleImipCancelWithNoUid () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
])
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $userCalendar ]);
// construct logger returns
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message event dose not contains a UID' );
// construct parameters
2022-06-23 16:17:53 -04:00
$principalUri = 'principals/user/pierre' ;
$sender = 'linus@stardew-tent-living.com' ;
$recipient = 'pierre@general-store.com' ;
$replyTo = null ;
2025-05-12 14:43:35 -04:00
$calendar = $this -> vCalendar3a ;
$calendar -> add ( 'METHOD' , 'CANCEL' );
$calendar -> VEVENT -> remove ( 'UID' );
// Act
$result = $manager -> handleIMipCancel ( $principalUri , $sender , $replyTo , $recipient , $calendar -> serialize ());
// Assert
$this -> assertFalse ( $result );
}
2022-06-23 16:17:53 -04:00
2025-05-12 14:43:35 -04:00
public function testHandleImipCancelWithNoOrganizer () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
])
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $userCalendar ]);
// construct logger returns
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message event dose not contains an organizer' );
// construct parameters
$principalUri = 'principals/user/pierre' ;
$sender = 'linus@stardew-tent-living.com' ;
$recipient = 'pierre@general-store.com' ;
$replyTo = null ;
$calendar = $this -> vCalendar3a ;
$calendar -> add ( 'METHOD' , 'CANCEL' );
$calendar -> VEVENT -> remove ( 'ORGANIZER' );
// Act
$result = $manager -> handleIMipCancel ( $principalUri , $sender , $replyTo , $recipient , $calendar -> serialize ());
// Assert
$this -> assertFalse ( $result );
}
2022-06-23 16:17:53 -04:00
2025-05-12 14:43:35 -04:00
public function testHandleImipCancelWithNoAttendee () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
])
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $userCalendar ]);
// construct logger returns
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message event dose not contains any attendees' );
// construct parameters
$principalUri = 'principals/user/pierre' ;
$sender = 'pierre@general-store.com' ;
$recipient = 'linus@stardew-tent-living.com' ;
$replyTo = null ;
$calendar = $this -> vCalendar3a ;
$calendar -> add ( 'METHOD' , 'CANCEL' );
$calendar -> VEVENT -> remove ( 'ATTENDEE' );
// Act
$result = $manager -> handleIMipCancel ( $principalUri , $sender , $replyTo , $recipient , $calendar -> serialize ());
// Assert
2022-06-23 16:17:53 -04:00
$this -> assertFalse ( $result );
}
2025-05-12 14:43:35 -04:00
public function testHandleImipCancelAttendeeNotRecipient () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
2022-06-23 16:17:53 -04:00
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
2025-05-12 14:43:35 -04:00
$this -> time ,
2022-06-23 16:17:53 -04:00
])
2025-05-12 14:43:35 -04:00
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $userCalendar ]);
// construct logger returns
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message event could not be processed because recipient must be an ATTENDEE of this event' );
// construct parameters
$principalUri = 'principals/user/pierre' ;
$sender = 'linus@stardew-tent-living.com' ;
$recipient = 'leah@general-store.com' ;
$replyTo = null ;
$calendarData = clone $this -> vCalendar3a ;
$calendarData -> add ( 'METHOD' , 'CANCEL' );
// Act
$result = $manager -> handleIMipCancel ( $principalUri , $sender , $replyTo , $recipient , $calendarData -> serialize ());
// Assert
$this -> assertFalse ( $result );
}
public function testHandleImipCancelDateInThePast () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
2022-09-06 03:05:36 -04:00
])
2025-05-12 14:43:35 -04:00
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
2022-09-06 03:05:36 -04:00
-> getMock ();
2025-05-12 14:43:35 -04:00
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $userCalendar ]);
// construct logger and time returns
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message event could not be processed because the event is in the past' );
$this -> time -> expects ( self :: once ())
-> method ( 'getTime' )
-> willReturn ( time ());
// construct parameters
2022-06-23 16:17:53 -04:00
$principalUri = 'principals/user/pierre' ;
$sender = 'linus@stardew-tent-living.com' ;
$recipient = 'pierre@general-store.com' ;
$replyTo = null ;
2025-05-12 14:43:35 -04:00
$calendarData = clone $this -> vCalendar3a ;
$calendarData -> add ( 'METHOD' , 'CANCEL' );
$calendarData -> VEVENT -> DTSTART = new \DateTime ( '2013-04-07' ); // set to in the past
// Act
$result = $manager -> handleIMipCancel ( $principalUri , $sender , $replyTo , $recipient , $calendarData -> serialize ());
// Assert
$this -> assertFalse ( $result );
}
2022-06-23 16:17:53 -04:00
2025-05-12 14:43:35 -04:00
public function testHandleImipCancelEventNotFound () : void {
// construct mock user calendar
$userCalendar = $this -> createMock ( ITestCalendar :: class );
$userCalendar -> expects ( self :: once ())
-> method ( 'search' )
-> willReturn ([]);
// construct mock calendar manager and returns
/** @var Manager&MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
$this -> time ,
])
-> onlyMethods ([ 'getCalendarsForPrincipal' ])
-> getMock ();
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> willReturn ([ $userCalendar ]);
// construct time returns
2022-06-23 16:17:53 -04:00
$this -> time -> expects ( self :: once ())
2022-09-05 12:09:49 -04:00
-> method ( 'getTime' )
2022-09-07 20:26:46 -04:00
-> willReturn ( 1628374233 );
2025-05-12 14:43:35 -04:00
// construct parameters
$principalUri = 'principals/user/pierre' ;
$sender = 'linus@stardew-tent-living.com' ;
$recipient = 'pierre@general-store.com' ;
$replyTo = null ;
$calendarData = clone $this -> vCalendar3a ;
$calendarData -> add ( 'METHOD' , 'CANCEL' );
// construct logger return
$this -> logger -> expects ( self :: once ()) -> method ( 'warning' )
-> with ( 'iMip message event could not be processed because no corresponding event was found in any calendar ' . $principalUri . ' and UID ' . $calendarData -> VEVENT -> UID -> getValue ());
// Act
2022-09-07 20:26:46 -04:00
$result = $manager -> handleIMipCancel ( $principalUri , $sender , $replyTo , $recipient , $calendarData -> serialize ());
2025-05-12 14:43:35 -04:00
// Assert
2022-09-07 20:26:46 -04:00
$this -> assertFalse ( $result );
2022-06-23 16:17:53 -04:00
}
public function testHandleImipCancelOrganiserInReplyTo () : void {
/** @var Manager | \PHPUnit\Framework\MockObject\MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
2025-05-12 14:43:35 -04:00
$this -> time ,
2022-06-23 16:17:53 -04:00
])
2025-05-12 14:43:35 -04:00
-> onlyMethods ([
2022-06-23 16:17:53 -04:00
'getCalendarsForPrincipal'
2022-09-06 03:05:36 -04:00
])
-> getMock ();
2025-05-12 14:43:35 -04:00
2022-06-23 16:17:53 -04:00
$principalUri = 'principals/user/pierre' ;
2025-05-12 14:43:35 -04:00
$sender = 'clint@stardew-tent-living.com' ;
2022-06-23 16:17:53 -04:00
$recipient = 'pierre@general-store.com' ;
$replyTo = 'linus@stardew-tent-living.com' ;
2025-05-12 14:43:35 -04:00
$calendar = $this -> createMock ( ITestCalendar :: class );
$calendarData = clone $this -> vCalendar3a ;
$calendarData -> add ( 'METHOD' , 'CANCEL' );
2022-06-23 16:17:53 -04:00
$this -> time -> expects ( self :: once ())
2022-09-05 12:09:49 -04:00
-> method ( 'getTime' )
2022-09-07 20:26:46 -04:00
-> willReturn ( 1628374233 );
2022-06-23 16:17:53 -04:00
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> with ( $principalUri )
-> willReturn ([ $calendar ]);
$calendar -> expects ( self :: once ())
-> method ( 'search' )
-> willReturn ([[ 'uri' => 'testname.ics' ]]);
$calendar -> expects ( self :: once ())
-> method ( 'handleIMipMessage' )
-> with ( 'testname.ics' , $calendarData -> serialize ());
2025-05-12 14:43:35 -04:00
// Act
2022-09-07 20:26:46 -04:00
$result = $manager -> handleIMipCancel ( $principalUri , $sender , $replyTo , $recipient , $calendarData -> serialize ());
2025-05-12 14:43:35 -04:00
// Assert
2022-09-07 20:26:46 -04:00
$this -> assertTrue ( $result );
2022-06-23 16:17:53 -04:00
}
public function testHandleImipCancel () : void {
/** @var Manager | \PHPUnit\Framework\MockObject\MockObject $manager */
$manager = $this -> getMockBuilder ( Manager :: class )
-> setConstructorArgs ([
$this -> coordinator ,
$this -> container ,
$this -> logger ,
2025-05-12 14:43:35 -04:00
$this -> time ,
2022-06-23 16:17:53 -04:00
])
2025-05-12 14:43:35 -04:00
-> onlyMethods ([
2022-06-23 16:17:53 -04:00
'getCalendarsForPrincipal'
2022-09-06 03:05:36 -04:00
])
-> getMock ();
2022-06-23 16:17:53 -04:00
$principalUri = 'principals/user/pierre' ;
$sender = 'linus@stardew-tent-living.com' ;
$recipient = 'pierre@general-store.com' ;
$replyTo = null ;
2025-05-12 14:43:35 -04:00
$calendar = $this -> createMock ( ITestCalendar :: class );
$calendarData = clone $this -> vCalendar3a ;
$calendarData -> add ( 'METHOD' , 'CANCEL' );
2022-06-23 16:17:53 -04:00
$this -> time -> expects ( self :: once ())
2022-09-05 12:09:49 -04:00
-> method ( 'getTime' )
2022-09-07 20:26:46 -04:00
-> willReturn ( 1628374233 );
2022-06-23 16:17:53 -04:00
$manager -> expects ( self :: once ())
-> method ( 'getCalendarsForPrincipal' )
-> with ( $principalUri )
-> willReturn ([ $calendar ]);
$calendar -> expects ( self :: once ())
-> method ( 'search' )
-> willReturn ([[ 'uri' => 'testname.ics' ]]);
$calendar -> expects ( self :: once ())
-> method ( 'handleIMipMessage' )
-> with ( 'testname.ics' , $calendarData -> serialize ());
2025-05-12 14:43:35 -04:00
// Act
2022-09-07 20:26:46 -04:00
$result = $manager -> handleIMipCancel ( $principalUri , $sender , $replyTo , $recipient , $calendarData -> serialize ());
2025-05-12 14:43:35 -04:00
// Assert
2022-09-07 20:26:46 -04:00
$this -> assertTrue ( $result );
2022-06-23 16:17:53 -04:00
}
2017-10-31 12:06:01 -04:00
}