aboutsummaryrefslogblamecommitdiffstats
path: root/vendor/sabre/dav/tests/Sabre/CalDAV/FreeBusyReportTest.php
blob: 44823edab9e0fcd33356a517044f34b71ca75280 (plain) (tree)
1
2
3
4
5
6
7
8
9

     

                        


                       

               

                                                            
       
                  


                      
                      


                      
                                 
     







                        
 

                                            









                        











                           

                                          
                                            

                           


                                            

                           



                                            

              
 
                                                             
 
                                                  



                                                                                                                                                       
           
 
                                                    
 
                                                        




                                                              

     

                                        






                                                                    
                                                                         
                                                        
 

                                                                                                     


                                                                                                                    

     

                                                   
                                                                 





                                                           
                                                                         

     

                                                 
                                                                     
                                                   








                                                                    
                                                                         
                                                        

     

                                                   
                                                      
                                         
                                                                     









                                                                    
                                                                         
                                                        

     
<?php

declare(strict_types=1);

namespace Sabre\CalDAV;

use Sabre\DAV;
use Sabre\HTTP;

class FreeBusyReportTest extends \PHPUnit\Framework\TestCase
{
    /**
     * @var Plugin
     */
    protected $plugin;
    /**
     * @var DAV\Server
     */
    protected $server;

    public function setup(): void
    {
        $obj1 = <<<ics
BEGIN:VCALENDAR
BEGIN:VEVENT
DTSTART:20111005T120000Z
DURATION:PT1H
END:VEVENT
END:VCALENDAR
ics;

        $obj2 = fopen('php://memory', 'r+');
        fwrite($obj2, <<<ics
BEGIN:VCALENDAR
BEGIN:VEVENT
DTSTART:20121005T120000Z
DURATION:PT1H
END:VEVENT
END:VCALENDAR
ics
        );
        rewind($obj2);

        $obj3 = <<<ics
BEGIN:VCALENDAR
BEGIN:VEVENT
DTSTART:20111006T120000
DURATION:PT1H
END:VEVENT
END:VCALENDAR
ics;

        $calendarData = [
            1 => [
                'obj1' => [
                    'calendarid' => 1,
                    'uri' => 'event1.ics',
                    'calendardata' => $obj1,
                ],
                'obj2' => [
                    'calendarid' => 1,
                    'uri' => 'event2.ics',
                    'calendardata' => $obj2,
                ],
                'obj3' => [
                    'calendarid' => 1,
                    'uri' => 'event3.ics',
                    'calendardata' => $obj3,
                ],
            ],
        ];

        $caldavBackend = new Backend\Mock([], $calendarData);

        $calendar = new Calendar($caldavBackend, [
            'id' => 1,
            'uri' => 'calendar',
            'principaluri' => 'principals/user1',
            '{'.Plugin::NS_CALDAV.'}calendar-timezone' => "BEGIN:VCALENDAR\r\nBEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nEND:VTIMEZONE\r\nEND:VCALENDAR",
        ]);

        $this->server = new DAV\Server([$calendar]);

        $request = new HTTP\Request('GET', '/calendar');
        $this->server->httpRequest = $request;
        $this->server->httpResponse = new HTTP\ResponseMock();

        $this->plugin = new Plugin();
        $this->server->addPlugin($this->plugin);
    }

    public function testFreeBusyReport()
    {
        $reportXML = <<<XML
<?xml version="1.0"?>
<c:free-busy-query xmlns:c="urn:ietf:params:xml:ns:caldav">
    <c:time-range start="20111001T000000Z" end="20111101T000000Z" />
</c:free-busy-query>
XML;

        $report = $this->server->xml->parse($reportXML, null, $rootElem);
        $this->plugin->report($rootElem, $report, null);

        $this->assertEquals(200, $this->server->httpResponse->status);
        $this->assertEquals('text/calendar', $this->server->httpResponse->getHeader('Content-Type'));
        $this->assertTrue(false !== strpos($this->server->httpResponse->body, 'BEGIN:VFREEBUSY'));
        $this->assertTrue(false !== strpos($this->server->httpResponse->body, '20111005T120000Z/20111005T130000Z'));
        $this->assertTrue(false !== strpos($this->server->httpResponse->body, '20111006T100000Z/20111006T110000Z'));
    }

    public function testFreeBusyReportNoTimeRange()
    {
        $this->expectException('Sabre\DAV\Exception\BadRequest');
        $reportXML = <<<XML
<?xml version="1.0"?>
<c:free-busy-query xmlns:c="urn:ietf:params:xml:ns:caldav">
</c:free-busy-query>
XML;

        $report = $this->server->xml->parse($reportXML, null, $rootElem);
    }

    public function testFreeBusyReportWrongNode()
    {
        $this->expectException('Sabre\DAV\Exception\NotImplemented');
        $request = new HTTP\Request('REPORT', '/');
        $this->server->httpRequest = $request;

        $reportXML = <<<XML
<?xml version="1.0"?>
<c:free-busy-query xmlns:c="urn:ietf:params:xml:ns:caldav">
    <c:time-range start="20111001T000000Z" end="20111101T000000Z" />
</c:free-busy-query>
XML;

        $report = $this->server->xml->parse($reportXML, null, $rootElem);
        $this->plugin->report($rootElem, $report, null);
    }

    public function testFreeBusyReportNoACLPlugin()
    {
        $this->expectException('Sabre\DAV\Exception');
        $this->server = new DAV\Server();
        $this->server->httpRequest = new HTTP\Request('REPORT', '/');
        $this->plugin = new Plugin();
        $this->server->addPlugin($this->plugin);

        $reportXML = <<<XML
<?xml version="1.0"?>
<c:free-busy-query xmlns:c="urn:ietf:params:xml:ns:caldav">
    <c:time-range start="20111001T000000Z" end="20111101T000000Z" />
</c:free-busy-query>
XML;

        $report = $this->server->xml->parse($reportXML, null, $rootElem);
        $this->plugin->report($rootElem, $report, null);
    }
}