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

     

                        

                       

                                 
 

                                                            

                       

                                                    
                              
                      
                          
                                                                                          



                                                                                
              

         
                                                 


                     
          





                                                                   

                                                          

     

                                    




                                                                   
 



                                              

     

                                  
                                                                                   

     

                                



                                                   
                                    



                                                                        
                                    



                                                        
                                    



                                                                        
                                    



                                                   
                                    



                                                                       
                                    

              
                                            
                                                                        
                                    

              
                                                                       
                                                     
                                    

              

                                                                       

     

                                     

                     
                                             
                                                   
                                    

              
                                             
                                                                        
                                    

              


                                                   



                                                                        
                                    





                                                                       
          
 
                                                                            

     

                                       


                                         
                         




                                                                    
 





                                                                 
                                 


                                                                       

     

                                 


                                                              
     
 
<?php

declare(strict_types=1);

namespace Sabre\CalDAV;

use Sabre\DAV\Sharing;
use Sabre\DAV\Xml\Element\Sharee;

class SharedCalendarTest extends \PHPUnit\Framework\TestCase
{
    protected $backend;

    public function getInstance(array $props = null)
    {
        if (is_null($props)) {
            $props = [
                'id' => 1,
                '{http://calendarserver.org/ns/}shared-url' => 'calendars/owner/original',
                '{http://sabredav.org/ns}owner-principal' => 'principals/owner',
                '{http://sabredav.org/ns}read-only' => false,
                'share-access' => Sharing\Plugin::ACCESS_READWRITE,
                'principaluri' => 'principals/sharee',
            ];
        }

        $this->backend = new Backend\MockSharing(
            [$props],
            [],
            []
        );

        $sharee = new Sharee();
        $sharee->href = 'mailto:removeme@example.org';
        $sharee->properties['{DAV:}displayname'] = 'To be removed';
        $sharee->access = Sharing\Plugin::ACCESS_READ;
        $this->backend->updateInvites(1, [$sharee]);

        return new SharedCalendar($this->backend, $props);
    }

    public function testGetInvites()
    {
        $sharee = new Sharee();
        $sharee->href = 'mailto:removeme@example.org';
        $sharee->properties['{DAV:}displayname'] = 'To be removed';
        $sharee->access = Sharing\Plugin::ACCESS_READ;
        $sharee->inviteStatus = Sharing\Plugin::INVITE_NORESPONSE;

        $this->assertEquals(
            [$sharee],
            $this->getInstance()->getInvites()
        );
    }

    public function testGetOwner()
    {
        $this->assertEquals('principals/sharee', $this->getInstance()->getOwner());
    }

    public function testGetACL()
    {
        $expected = [
            [
                'privilege' => '{DAV:}write',
                'principal' => 'principals/sharee',
                'protected' => true,
            ],
            [
                'privilege' => '{DAV:}write',
                'principal' => 'principals/sharee/calendar-proxy-write',
                'protected' => true,
            ],
            [
                'privilege' => '{DAV:}write-properties',
                'principal' => 'principals/sharee',
                'protected' => true,
            ],
            [
                'privilege' => '{DAV:}write-properties',
                'principal' => 'principals/sharee/calendar-proxy-write',
                'protected' => true,
            ],
            [
                'privilege' => '{DAV:}read',
                'principal' => 'principals/sharee',
                'protected' => true,
            ],
            [
                'privilege' => '{DAV:}read',
                'principal' => 'principals/sharee/calendar-proxy-read',
                'protected' => true,
            ],
            [
                'privilege' => '{DAV:}read',
                'principal' => 'principals/sharee/calendar-proxy-write',
                'protected' => true,
            ],
            [
                'privilege' => '{'.Plugin::NS_CALDAV.'}read-free-busy',
                'principal' => '{DAV:}authenticated',
                'protected' => true,
            ],
        ];

        $this->assertEquals($expected, $this->getInstance()->getACL());
    }

    public function testGetChildACL()
    {
        $expected = [
            [
                'privilege' => '{DAV:}write',
                'principal' => 'principals/sharee',
                'protected' => true,
            ],
            [
                'privilege' => '{DAV:}write',
                'principal' => 'principals/sharee/calendar-proxy-write',
                'protected' => true,
            ],
            [
                'privilege' => '{DAV:}read',
                'principal' => 'principals/sharee',
                'protected' => true,
            ],
            [
                'privilege' => '{DAV:}read',
                'principal' => 'principals/sharee/calendar-proxy-write',
                'protected' => true,
            ],
            [
                'privilege' => '{DAV:}read',
                'principal' => 'principals/sharee/calendar-proxy-read',
                'protected' => true,
            ],
        ];

        $this->assertEquals($expected, $this->getInstance()->getChildACL());
    }

    public function testUpdateInvites()
    {
        $instance = $this->getInstance();
        $newSharees = [
            new Sharee(),
            new Sharee(),
        ];
        $newSharees[0]->href = 'mailto:test@example.org';
        $newSharees[0]->properties['{DAV:}displayname'] = 'Foo Bar';
        $newSharees[0]->comment = 'Booh';
        $newSharees[0]->access = Sharing\Plugin::ACCESS_READWRITE;

        $newSharees[1]->href = 'mailto:removeme@example.org';
        $newSharees[1]->access = Sharing\Plugin::ACCESS_NOACCESS;

        $instance->updateInvites($newSharees);

        $expected = [
            clone $newSharees[0],
        ];
        $expected[0]->inviteStatus = Sharing\Plugin::INVITE_NORESPONSE;
        $this->assertEquals($expected, $instance->getInvites());
    }

    public function testPublish()
    {
        $instance = $this->getInstance();
        $this->assertNull($instance->setPublishStatus(true));
        $this->assertNull($instance->setPublishStatus(false));
    }
}