1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\CalDAV; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse Sabre\DAV\PropPatch; 6*a1a3b679SAndreas Boehleruse Sabre\DAVACL; 7*a1a3b679SAndreas Boehler 8*a1a3b679SAndreas Boehlerrequire_once 'Sabre/CalDAV/TestUtil.php'; 9*a1a3b679SAndreas Boehler 10*a1a3b679SAndreas Boehlerclass CalendarTest extends \PHPUnit_Framework_TestCase { 11*a1a3b679SAndreas Boehler 12*a1a3b679SAndreas Boehler /** 13*a1a3b679SAndreas Boehler * @var Sabre\CalDAV\Backend\PDO 14*a1a3b679SAndreas Boehler */ 15*a1a3b679SAndreas Boehler protected $backend; 16*a1a3b679SAndreas Boehler protected $principalBackend; 17*a1a3b679SAndreas Boehler /** 18*a1a3b679SAndreas Boehler * @var Sabre\CalDAV\Calendar 19*a1a3b679SAndreas Boehler */ 20*a1a3b679SAndreas Boehler protected $calendar; 21*a1a3b679SAndreas Boehler /** 22*a1a3b679SAndreas Boehler * @var array 23*a1a3b679SAndreas Boehler */ 24*a1a3b679SAndreas Boehler protected $calendars; 25*a1a3b679SAndreas Boehler 26*a1a3b679SAndreas Boehler function setup() { 27*a1a3b679SAndreas Boehler 28*a1a3b679SAndreas Boehler if (!SABRE_HASSQLITE) $this->markTestSkipped('SQLite driver is not available'); 29*a1a3b679SAndreas Boehler 30*a1a3b679SAndreas Boehler $this->backend = TestUtil::getBackend(); 31*a1a3b679SAndreas Boehler 32*a1a3b679SAndreas Boehler $this->calendars = $this->backend->getCalendarsForUser('principals/user1'); 33*a1a3b679SAndreas Boehler $this->assertEquals(2, count($this->calendars)); 34*a1a3b679SAndreas Boehler $this->calendar = new Calendar($this->backend, $this->calendars[0]); 35*a1a3b679SAndreas Boehler 36*a1a3b679SAndreas Boehler 37*a1a3b679SAndreas Boehler } 38*a1a3b679SAndreas Boehler 39*a1a3b679SAndreas Boehler function teardown() { 40*a1a3b679SAndreas Boehler 41*a1a3b679SAndreas Boehler unset($this->backend); 42*a1a3b679SAndreas Boehler 43*a1a3b679SAndreas Boehler } 44*a1a3b679SAndreas Boehler 45*a1a3b679SAndreas Boehler function testSimple() { 46*a1a3b679SAndreas Boehler 47*a1a3b679SAndreas Boehler $this->assertEquals($this->calendars[0]['uri'], $this->calendar->getName()); 48*a1a3b679SAndreas Boehler 49*a1a3b679SAndreas Boehler } 50*a1a3b679SAndreas Boehler 51*a1a3b679SAndreas Boehler /** 52*a1a3b679SAndreas Boehler * @depends testSimple 53*a1a3b679SAndreas Boehler */ 54*a1a3b679SAndreas Boehler function testUpdateProperties() { 55*a1a3b679SAndreas Boehler 56*a1a3b679SAndreas Boehler $propPatch = new PropPatch([ 57*a1a3b679SAndreas Boehler '{DAV:}displayname' => 'NewName', 58*a1a3b679SAndreas Boehler ]); 59*a1a3b679SAndreas Boehler 60*a1a3b679SAndreas Boehler $result = $this->calendar->propPatch($propPatch); 61*a1a3b679SAndreas Boehler $result = $propPatch->commit(); 62*a1a3b679SAndreas Boehler 63*a1a3b679SAndreas Boehler $this->assertEquals(true, $result); 64*a1a3b679SAndreas Boehler 65*a1a3b679SAndreas Boehler $calendars2 = $this->backend->getCalendarsForUser('principals/user1'); 66*a1a3b679SAndreas Boehler $this->assertEquals('NewName',$calendars2[0]['{DAV:}displayname']); 67*a1a3b679SAndreas Boehler 68*a1a3b679SAndreas Boehler } 69*a1a3b679SAndreas Boehler 70*a1a3b679SAndreas Boehler /** 71*a1a3b679SAndreas Boehler * @depends testSimple 72*a1a3b679SAndreas Boehler */ 73*a1a3b679SAndreas Boehler function testGetProperties() { 74*a1a3b679SAndreas Boehler 75*a1a3b679SAndreas Boehler $question = array( 76*a1a3b679SAndreas Boehler '{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set', 77*a1a3b679SAndreas Boehler ); 78*a1a3b679SAndreas Boehler 79*a1a3b679SAndreas Boehler $result = $this->calendar->getProperties($question); 80*a1a3b679SAndreas Boehler 81*a1a3b679SAndreas Boehler foreach($question as $q) $this->assertArrayHasKey($q,$result); 82*a1a3b679SAndreas Boehler 83*a1a3b679SAndreas Boehler $this->assertEquals(array('VEVENT','VTODO'), $result['{urn:ietf:params:xml:ns:caldav}supported-calendar-component-set']->getValue()); 84*a1a3b679SAndreas Boehler 85*a1a3b679SAndreas Boehler } 86*a1a3b679SAndreas Boehler 87*a1a3b679SAndreas Boehler /** 88*a1a3b679SAndreas Boehler * @expectedException Sabre\DAV\Exception\NotFound 89*a1a3b679SAndreas Boehler * @depends testSimple 90*a1a3b679SAndreas Boehler */ 91*a1a3b679SAndreas Boehler function testGetChildNotFound() { 92*a1a3b679SAndreas Boehler 93*a1a3b679SAndreas Boehler $this->calendar->getChild('randomname'); 94*a1a3b679SAndreas Boehler 95*a1a3b679SAndreas Boehler } 96*a1a3b679SAndreas Boehler 97*a1a3b679SAndreas Boehler /** 98*a1a3b679SAndreas Boehler * @depends testSimple 99*a1a3b679SAndreas Boehler */ 100*a1a3b679SAndreas Boehler function testGetChildren() { 101*a1a3b679SAndreas Boehler 102*a1a3b679SAndreas Boehler $children = $this->calendar->getChildren(); 103*a1a3b679SAndreas Boehler $this->assertEquals(1,count($children)); 104*a1a3b679SAndreas Boehler 105*a1a3b679SAndreas Boehler $this->assertTrue($children[0] instanceof CalendarObject); 106*a1a3b679SAndreas Boehler 107*a1a3b679SAndreas Boehler } 108*a1a3b679SAndreas Boehler 109*a1a3b679SAndreas Boehler /** 110*a1a3b679SAndreas Boehler * @depends testGetChildren 111*a1a3b679SAndreas Boehler */ 112*a1a3b679SAndreas Boehler function testChildExists() { 113*a1a3b679SAndreas Boehler 114*a1a3b679SAndreas Boehler $this->assertFalse($this->calendar->childExists('foo')); 115*a1a3b679SAndreas Boehler 116*a1a3b679SAndreas Boehler $children = $this->calendar->getChildren(); 117*a1a3b679SAndreas Boehler $this->assertTrue($this->calendar->childExists($children[0]->getName())); 118*a1a3b679SAndreas Boehler } 119*a1a3b679SAndreas Boehler 120*a1a3b679SAndreas Boehler 121*a1a3b679SAndreas Boehler 122*a1a3b679SAndreas Boehler /** 123*a1a3b679SAndreas Boehler * @expectedException Sabre\DAV\Exception\MethodNotAllowed 124*a1a3b679SAndreas Boehler */ 125*a1a3b679SAndreas Boehler function testCreateDirectory() { 126*a1a3b679SAndreas Boehler 127*a1a3b679SAndreas Boehler $this->calendar->createDirectory('hello'); 128*a1a3b679SAndreas Boehler 129*a1a3b679SAndreas Boehler } 130*a1a3b679SAndreas Boehler 131*a1a3b679SAndreas Boehler /** 132*a1a3b679SAndreas Boehler * @expectedException Sabre\DAV\Exception\MethodNotAllowed 133*a1a3b679SAndreas Boehler */ 134*a1a3b679SAndreas Boehler function testSetName() { 135*a1a3b679SAndreas Boehler 136*a1a3b679SAndreas Boehler $this->calendar->setName('hello'); 137*a1a3b679SAndreas Boehler 138*a1a3b679SAndreas Boehler } 139*a1a3b679SAndreas Boehler 140*a1a3b679SAndreas Boehler function testGetLastModified() { 141*a1a3b679SAndreas Boehler 142*a1a3b679SAndreas Boehler $this->assertNull($this->calendar->getLastModified()); 143*a1a3b679SAndreas Boehler 144*a1a3b679SAndreas Boehler } 145*a1a3b679SAndreas Boehler 146*a1a3b679SAndreas Boehler function testCreateFile() { 147*a1a3b679SAndreas Boehler 148*a1a3b679SAndreas Boehler $file = fopen('php://memory','r+'); 149*a1a3b679SAndreas Boehler fwrite($file,TestUtil::getTestCalendarData()); 150*a1a3b679SAndreas Boehler rewind($file); 151*a1a3b679SAndreas Boehler 152*a1a3b679SAndreas Boehler $this->calendar->createFile('hello',$file); 153*a1a3b679SAndreas Boehler 154*a1a3b679SAndreas Boehler $file = $this->calendar->getChild('hello'); 155*a1a3b679SAndreas Boehler $this->assertTrue($file instanceof CalendarObject); 156*a1a3b679SAndreas Boehler 157*a1a3b679SAndreas Boehler } 158*a1a3b679SAndreas Boehler 159*a1a3b679SAndreas Boehler function testCreateFileNoSupportedComponents() { 160*a1a3b679SAndreas Boehler 161*a1a3b679SAndreas Boehler $file = fopen('php://memory','r+'); 162*a1a3b679SAndreas Boehler fwrite($file,TestUtil::getTestCalendarData()); 163*a1a3b679SAndreas Boehler rewind($file); 164*a1a3b679SAndreas Boehler 165*a1a3b679SAndreas Boehler $calendar = new Calendar($this->backend, $this->calendars[1]); 166*a1a3b679SAndreas Boehler $calendar->createFile('hello',$file); 167*a1a3b679SAndreas Boehler 168*a1a3b679SAndreas Boehler $file = $calendar->getChild('hello'); 169*a1a3b679SAndreas Boehler $this->assertTrue($file instanceof CalendarObject); 170*a1a3b679SAndreas Boehler 171*a1a3b679SAndreas Boehler } 172*a1a3b679SAndreas Boehler 173*a1a3b679SAndreas Boehler function testDelete() { 174*a1a3b679SAndreas Boehler 175*a1a3b679SAndreas Boehler $this->calendar->delete(); 176*a1a3b679SAndreas Boehler 177*a1a3b679SAndreas Boehler $calendars = $this->backend->getCalendarsForUser('principals/user1'); 178*a1a3b679SAndreas Boehler $this->assertEquals(1, count($calendars)); 179*a1a3b679SAndreas Boehler } 180*a1a3b679SAndreas Boehler 181*a1a3b679SAndreas Boehler function testGetOwner() { 182*a1a3b679SAndreas Boehler 183*a1a3b679SAndreas Boehler $this->assertEquals('principals/user1',$this->calendar->getOwner()); 184*a1a3b679SAndreas Boehler 185*a1a3b679SAndreas Boehler } 186*a1a3b679SAndreas Boehler 187*a1a3b679SAndreas Boehler function testGetGroup() { 188*a1a3b679SAndreas Boehler 189*a1a3b679SAndreas Boehler $this->assertNull($this->calendar->getGroup()); 190*a1a3b679SAndreas Boehler 191*a1a3b679SAndreas Boehler } 192*a1a3b679SAndreas Boehler 193*a1a3b679SAndreas Boehler function testGetACL() { 194*a1a3b679SAndreas Boehler 195*a1a3b679SAndreas Boehler $expected = array( 196*a1a3b679SAndreas Boehler array( 197*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}read', 198*a1a3b679SAndreas Boehler 'principal' => 'principals/user1', 199*a1a3b679SAndreas Boehler 'protected' => true, 200*a1a3b679SAndreas Boehler ), 201*a1a3b679SAndreas Boehler array( 202*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}read', 203*a1a3b679SAndreas Boehler 'principal' => 'principals/user1/calendar-proxy-write', 204*a1a3b679SAndreas Boehler 'protected' => true, 205*a1a3b679SAndreas Boehler ), 206*a1a3b679SAndreas Boehler array( 207*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}read', 208*a1a3b679SAndreas Boehler 'principal' => 'principals/user1/calendar-proxy-read', 209*a1a3b679SAndreas Boehler 'protected' => true, 210*a1a3b679SAndreas Boehler ), 211*a1a3b679SAndreas Boehler array( 212*a1a3b679SAndreas Boehler 'privilege' => '{' . Plugin::NS_CALDAV . '}read-free-busy', 213*a1a3b679SAndreas Boehler 'principal' => '{DAV:}authenticated', 214*a1a3b679SAndreas Boehler 'protected' => true, 215*a1a3b679SAndreas Boehler ), 216*a1a3b679SAndreas Boehler array( 217*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}write', 218*a1a3b679SAndreas Boehler 'principal' => 'principals/user1', 219*a1a3b679SAndreas Boehler 'protected' => true, 220*a1a3b679SAndreas Boehler ), 221*a1a3b679SAndreas Boehler array( 222*a1a3b679SAndreas Boehler 'privilege' => '{DAV:}write', 223*a1a3b679SAndreas Boehler 'principal' => 'principals/user1/calendar-proxy-write', 224*a1a3b679SAndreas Boehler 'protected' => true, 225*a1a3b679SAndreas Boehler ), 226*a1a3b679SAndreas Boehler ); 227*a1a3b679SAndreas Boehler $this->assertEquals($expected, $this->calendar->getACL()); 228*a1a3b679SAndreas Boehler 229*a1a3b679SAndreas Boehler } 230*a1a3b679SAndreas Boehler 231*a1a3b679SAndreas Boehler /** 232*a1a3b679SAndreas Boehler * @expectedException Sabre\DAV\Exception\MethodNotAllowed 233*a1a3b679SAndreas Boehler */ 234*a1a3b679SAndreas Boehler function testSetACL() { 235*a1a3b679SAndreas Boehler 236*a1a3b679SAndreas Boehler $this->calendar->setACL(array()); 237*a1a3b679SAndreas Boehler 238*a1a3b679SAndreas Boehler } 239*a1a3b679SAndreas Boehler 240*a1a3b679SAndreas Boehler function testGetSupportedPrivilegesSet() { 241*a1a3b679SAndreas Boehler 242*a1a3b679SAndreas Boehler $result = $this->calendar->getSupportedPrivilegeSet(); 243*a1a3b679SAndreas Boehler 244*a1a3b679SAndreas Boehler $this->assertEquals( 245*a1a3b679SAndreas Boehler '{' . Plugin::NS_CALDAV . '}read-free-busy', 246*a1a3b679SAndreas Boehler $result['aggregates'][0]['aggregates'][2]['privilege'] 247*a1a3b679SAndreas Boehler ); 248*a1a3b679SAndreas Boehler 249*a1a3b679SAndreas Boehler } 250*a1a3b679SAndreas Boehler 251*a1a3b679SAndreas Boehler function testGetSyncToken() { 252*a1a3b679SAndreas Boehler 253*a1a3b679SAndreas Boehler $this->assertEquals(2, $this->calendar->getSyncToken()); 254*a1a3b679SAndreas Boehler 255*a1a3b679SAndreas Boehler } 256*a1a3b679SAndreas Boehler function testGetSyncToken2() { 257*a1a3b679SAndreas Boehler 258*a1a3b679SAndreas Boehler $calendar = new Calendar(new Backend\Mock([],[]), [ 259*a1a3b679SAndreas Boehler '{DAV:}sync-token' => 2 260*a1a3b679SAndreas Boehler ]); 261*a1a3b679SAndreas Boehler $this->assertEquals(2, $this->calendar->getSyncToken()); 262*a1a3b679SAndreas Boehler 263*a1a3b679SAndreas Boehler } 264*a1a3b679SAndreas Boehler 265*a1a3b679SAndreas Boehler function testGetSyncTokenNoSyncSupport() { 266*a1a3b679SAndreas Boehler 267*a1a3b679SAndreas Boehler $calendar = new Calendar(new Backend\Mock([],[]), []); 268*a1a3b679SAndreas Boehler $this->assertNull($calendar->getSyncToken()); 269*a1a3b679SAndreas Boehler 270*a1a3b679SAndreas Boehler } 271*a1a3b679SAndreas Boehler 272*a1a3b679SAndreas Boehler function testGetChanges() { 273*a1a3b679SAndreas Boehler 274*a1a3b679SAndreas Boehler $this->assertEquals([ 275*a1a3b679SAndreas Boehler 'syncToken' => 2, 276*a1a3b679SAndreas Boehler 'modified' => [], 277*a1a3b679SAndreas Boehler 'deleted' => [], 278*a1a3b679SAndreas Boehler 'added' => ['UUID-2345'], 279*a1a3b679SAndreas Boehler ], $this->calendar->getChanges(1, 1)); 280*a1a3b679SAndreas Boehler 281*a1a3b679SAndreas Boehler } 282*a1a3b679SAndreas Boehler 283*a1a3b679SAndreas Boehler function testGetChangesNoSyncSupport() { 284*a1a3b679SAndreas Boehler 285*a1a3b679SAndreas Boehler $calendar = new Calendar(new Backend\Mock([],[]), []); 286*a1a3b679SAndreas Boehler $this->assertNull($calendar->getChanges(1,null)); 287*a1a3b679SAndreas Boehler 288*a1a3b679SAndreas Boehler } 289*a1a3b679SAndreas Boehler} 290