1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\VObject\ITip; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehlerclass BrokerNewEventTest extends \PHPUnit_Framework_TestCase { 6*a1a3b679SAndreas Boehler 7*a1a3b679SAndreas Boehler function testNoAttendee() { 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehler $message = <<<ICS 10*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 11*a1a3b679SAndreas BoehlerBEGIN:VEVENT 12*a1a3b679SAndreas BoehlerUID:foobar 13*a1a3b679SAndreas BoehlerDTSTART:20140811T220000Z 14*a1a3b679SAndreas BoehlerEND:VEVENT 15*a1a3b679SAndreas BoehlerEND:VCALENDAR 16*a1a3b679SAndreas BoehlerICS; 17*a1a3b679SAndreas Boehler 18*a1a3b679SAndreas Boehler $result = $this->parse($message); 19*a1a3b679SAndreas Boehler 20*a1a3b679SAndreas Boehler } 21*a1a3b679SAndreas Boehler 22*a1a3b679SAndreas Boehler function testVTODO() { 23*a1a3b679SAndreas Boehler 24*a1a3b679SAndreas Boehler $message = <<<ICS 25*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 26*a1a3b679SAndreas BoehlerBEGIN:VTODO 27*a1a3b679SAndreas BoehlerUID:foobar 28*a1a3b679SAndreas BoehlerEND:VTODO 29*a1a3b679SAndreas BoehlerEND:VCALENDAR 30*a1a3b679SAndreas BoehlerICS; 31*a1a3b679SAndreas Boehler 32*a1a3b679SAndreas Boehler $result = $this->parse($message); 33*a1a3b679SAndreas Boehler 34*a1a3b679SAndreas Boehler } 35*a1a3b679SAndreas Boehler 36*a1a3b679SAndreas Boehler function testSimpleInvite() { 37*a1a3b679SAndreas Boehler 38*a1a3b679SAndreas Boehler $message = <<<ICS 39*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 40*a1a3b679SAndreas BoehlerVERSION:2.0 41*a1a3b679SAndreas BoehlerBEGIN:VEVENT 42*a1a3b679SAndreas BoehlerUID:foobar 43*a1a3b679SAndreas BoehlerDTSTART:20140811T220000Z 44*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 45*a1a3b679SAndreas BoehlerATTENDEE;CN=White:mailto:white@example.org 46*a1a3b679SAndreas BoehlerEND:VEVENT 47*a1a3b679SAndreas BoehlerEND:VCALENDAR 48*a1a3b679SAndreas BoehlerICS; 49*a1a3b679SAndreas Boehler 50*a1a3b679SAndreas Boehler $version = \Sabre\VObject\Version::VERSION; 51*a1a3b679SAndreas Boehler $expectedMessage = <<<ICS 52*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 53*a1a3b679SAndreas BoehlerVERSION:2.0 54*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject $version//EN 55*a1a3b679SAndreas BoehlerCALSCALE:GREGORIAN 56*a1a3b679SAndreas BoehlerMETHOD:REQUEST 57*a1a3b679SAndreas BoehlerBEGIN:VEVENT 58*a1a3b679SAndreas BoehlerUID:foobar 59*a1a3b679SAndreas BoehlerDTSTART:20140811T220000Z 60*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 61*a1a3b679SAndreas BoehlerATTENDEE;CN=White;PARTSTAT=NEEDS-ACTION:mailto:white@example.org 62*a1a3b679SAndreas BoehlerEND:VEVENT 63*a1a3b679SAndreas BoehlerEND:VCALENDAR 64*a1a3b679SAndreas BoehlerICS; 65*a1a3b679SAndreas Boehler 66*a1a3b679SAndreas Boehler $expected = array( 67*a1a3b679SAndreas Boehler array( 68*a1a3b679SAndreas Boehler 'uid' => 'foobar', 69*a1a3b679SAndreas Boehler 'method' => 'REQUEST', 70*a1a3b679SAndreas Boehler 'component' => 'VEVENT', 71*a1a3b679SAndreas Boehler 'sender' => 'mailto:strunk@example.org', 72*a1a3b679SAndreas Boehler 'senderName' => 'Strunk', 73*a1a3b679SAndreas Boehler 'recipient' => 'mailto:white@example.org', 74*a1a3b679SAndreas Boehler 'recipientName' => 'White', 75*a1a3b679SAndreas Boehler 'message' => $expectedMessage, 76*a1a3b679SAndreas Boehler ), 77*a1a3b679SAndreas Boehler ); 78*a1a3b679SAndreas Boehler 79*a1a3b679SAndreas Boehler $result = $this->parse($message, $expected); 80*a1a3b679SAndreas Boehler 81*a1a3b679SAndreas Boehler } 82*a1a3b679SAndreas Boehler 83*a1a3b679SAndreas Boehler /** 84*a1a3b679SAndreas Boehler * @expectedException \Sabre\VObject\ITip\ITipException 85*a1a3b679SAndreas Boehler */ 86*a1a3b679SAndreas Boehler function testBrokenEventUIDMisMatch() { 87*a1a3b679SAndreas Boehler 88*a1a3b679SAndreas Boehler $message = <<<ICS 89*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 90*a1a3b679SAndreas BoehlerVERSION:2.0 91*a1a3b679SAndreas BoehlerBEGIN:VEVENT 92*a1a3b679SAndreas BoehlerUID:foobar 93*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 94*a1a3b679SAndreas BoehlerATTENDEE;CN=White:mailto:white@example.org 95*a1a3b679SAndreas BoehlerEND:VEVENT 96*a1a3b679SAndreas BoehlerBEGIN:VEVENT 97*a1a3b679SAndreas BoehlerUID:foobar2 98*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 99*a1a3b679SAndreas BoehlerATTENDEE;CN=White:mailto:white@example.org 100*a1a3b679SAndreas BoehlerEND:VEVENT 101*a1a3b679SAndreas BoehlerEND:VCALENDAR 102*a1a3b679SAndreas BoehlerICS; 103*a1a3b679SAndreas Boehler 104*a1a3b679SAndreas Boehler $expected = array(); 105*a1a3b679SAndreas Boehler $this->parse($message, array()); 106*a1a3b679SAndreas Boehler 107*a1a3b679SAndreas Boehler } 108*a1a3b679SAndreas Boehler /** 109*a1a3b679SAndreas Boehler * @expectedException \Sabre\VObject\ITip\ITipException 110*a1a3b679SAndreas Boehler */ 111*a1a3b679SAndreas Boehler function testBrokenEventOrganizerMisMatch() { 112*a1a3b679SAndreas Boehler 113*a1a3b679SAndreas Boehler $message = <<<ICS 114*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 115*a1a3b679SAndreas BoehlerVERSION:2.0 116*a1a3b679SAndreas BoehlerBEGIN:VEVENT 117*a1a3b679SAndreas BoehlerUID:foobar 118*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 119*a1a3b679SAndreas BoehlerATTENDEE;CN=White:mailto:white@example.org 120*a1a3b679SAndreas BoehlerEND:VEVENT 121*a1a3b679SAndreas BoehlerBEGIN:VEVENT 122*a1a3b679SAndreas BoehlerUID:foobar 123*a1a3b679SAndreas BoehlerORGANIZER:mailto:foo@example.org 124*a1a3b679SAndreas BoehlerATTENDEE;CN=White:mailto:white@example.org 125*a1a3b679SAndreas BoehlerEND:VEVENT 126*a1a3b679SAndreas BoehlerEND:VCALENDAR 127*a1a3b679SAndreas BoehlerICS; 128*a1a3b679SAndreas Boehler 129*a1a3b679SAndreas Boehler $expected = array(); 130*a1a3b679SAndreas Boehler $this->parse($message, array()); 131*a1a3b679SAndreas Boehler 132*a1a3b679SAndreas Boehler } 133*a1a3b679SAndreas Boehler 134*a1a3b679SAndreas Boehler function testRecurrenceInvite() { 135*a1a3b679SAndreas Boehler 136*a1a3b679SAndreas Boehler $message = <<<ICS 137*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 138*a1a3b679SAndreas BoehlerVERSION:2.0 139*a1a3b679SAndreas BoehlerBEGIN:VEVENT 140*a1a3b679SAndreas BoehlerUID:foobar 141*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 142*a1a3b679SAndreas BoehlerATTENDEE;CN=One:mailto:one@example.org 143*a1a3b679SAndreas BoehlerATTENDEE;CN=Two:mailto:two@example.org 144*a1a3b679SAndreas BoehlerDTSTART:20140716T120000Z 145*a1a3b679SAndreas BoehlerRRULE:FREQ=DAILY 146*a1a3b679SAndreas BoehlerEXDATE:20140717T120000Z 147*a1a3b679SAndreas BoehlerEND:VEVENT 148*a1a3b679SAndreas BoehlerBEGIN:VEVENT 149*a1a3b679SAndreas BoehlerUID:foobar 150*a1a3b679SAndreas BoehlerRECURRENCE-ID:20140718T120000Z 151*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 152*a1a3b679SAndreas BoehlerATTENDEE;CN=Two:mailto:two@example.org 153*a1a3b679SAndreas BoehlerATTENDEE;CN=Three:mailto:three@example.org 154*a1a3b679SAndreas BoehlerDTSTART:20140718T120000Z 155*a1a3b679SAndreas BoehlerEND:VEVENT 156*a1a3b679SAndreas BoehlerEND:VCALENDAR 157*a1a3b679SAndreas BoehlerICS; 158*a1a3b679SAndreas Boehler 159*a1a3b679SAndreas Boehler $version = \Sabre\VObject\Version::VERSION; 160*a1a3b679SAndreas Boehler 161*a1a3b679SAndreas Boehler $expected = array( 162*a1a3b679SAndreas Boehler array( 163*a1a3b679SAndreas Boehler 'uid' => 'foobar', 164*a1a3b679SAndreas Boehler 'method' => 'REQUEST', 165*a1a3b679SAndreas Boehler 'component' => 'VEVENT', 166*a1a3b679SAndreas Boehler 'sender' => 'mailto:strunk@example.org', 167*a1a3b679SAndreas Boehler 'senderName' => 'Strunk', 168*a1a3b679SAndreas Boehler 'recipient' => 'mailto:one@example.org', 169*a1a3b679SAndreas Boehler 'recipientName' => 'One', 170*a1a3b679SAndreas Boehler 'message' => <<<ICS 171*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 172*a1a3b679SAndreas BoehlerVERSION:2.0 173*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject $version//EN 174*a1a3b679SAndreas BoehlerCALSCALE:GREGORIAN 175*a1a3b679SAndreas BoehlerMETHOD:REQUEST 176*a1a3b679SAndreas BoehlerBEGIN:VEVENT 177*a1a3b679SAndreas BoehlerUID:foobar 178*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 179*a1a3b679SAndreas BoehlerATTENDEE;CN=One;PARTSTAT=NEEDS-ACTION:mailto:one@example.org 180*a1a3b679SAndreas BoehlerATTENDEE;CN=Two;PARTSTAT=NEEDS-ACTION:mailto:two@example.org 181*a1a3b679SAndreas BoehlerDTSTART:20140716T120000Z 182*a1a3b679SAndreas BoehlerRRULE:FREQ=DAILY 183*a1a3b679SAndreas BoehlerEXDATE:20140717T120000Z,20140718T120000Z 184*a1a3b679SAndreas BoehlerEND:VEVENT 185*a1a3b679SAndreas BoehlerEND:VCALENDAR 186*a1a3b679SAndreas BoehlerICS 187*a1a3b679SAndreas Boehler 188*a1a3b679SAndreas Boehler ), 189*a1a3b679SAndreas Boehler array( 190*a1a3b679SAndreas Boehler 'uid' => 'foobar', 191*a1a3b679SAndreas Boehler 'method' => 'REQUEST', 192*a1a3b679SAndreas Boehler 'component' => 'VEVENT', 193*a1a3b679SAndreas Boehler 'sender' => 'mailto:strunk@example.org', 194*a1a3b679SAndreas Boehler 'senderName' => 'Strunk', 195*a1a3b679SAndreas Boehler 'recipient' => 'mailto:two@example.org', 196*a1a3b679SAndreas Boehler 'recipientName' => 'Two', 197*a1a3b679SAndreas Boehler 'message' => <<<ICS 198*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 199*a1a3b679SAndreas BoehlerVERSION:2.0 200*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject $version//EN 201*a1a3b679SAndreas BoehlerCALSCALE:GREGORIAN 202*a1a3b679SAndreas BoehlerMETHOD:REQUEST 203*a1a3b679SAndreas BoehlerBEGIN:VEVENT 204*a1a3b679SAndreas BoehlerUID:foobar 205*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 206*a1a3b679SAndreas BoehlerATTENDEE;CN=One;PARTSTAT=NEEDS-ACTION:mailto:one@example.org 207*a1a3b679SAndreas BoehlerATTENDEE;CN=Two;PARTSTAT=NEEDS-ACTION:mailto:two@example.org 208*a1a3b679SAndreas BoehlerDTSTART:20140716T120000Z 209*a1a3b679SAndreas BoehlerRRULE:FREQ=DAILY 210*a1a3b679SAndreas BoehlerEXDATE:20140717T120000Z 211*a1a3b679SAndreas BoehlerEND:VEVENT 212*a1a3b679SAndreas BoehlerBEGIN:VEVENT 213*a1a3b679SAndreas BoehlerUID:foobar 214*a1a3b679SAndreas BoehlerRECURRENCE-ID:20140718T120000Z 215*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 216*a1a3b679SAndreas BoehlerATTENDEE;CN=Two:mailto:two@example.org 217*a1a3b679SAndreas BoehlerATTENDEE;CN=Three:mailto:three@example.org 218*a1a3b679SAndreas BoehlerDTSTART:20140718T120000Z 219*a1a3b679SAndreas BoehlerEND:VEVENT 220*a1a3b679SAndreas BoehlerEND:VCALENDAR 221*a1a3b679SAndreas BoehlerICS 222*a1a3b679SAndreas Boehler 223*a1a3b679SAndreas Boehler ), 224*a1a3b679SAndreas Boehler array( 225*a1a3b679SAndreas Boehler 'uid' => 'foobar', 226*a1a3b679SAndreas Boehler 'method' => 'REQUEST', 227*a1a3b679SAndreas Boehler 'component' => 'VEVENT', 228*a1a3b679SAndreas Boehler 'sender' => 'mailto:strunk@example.org', 229*a1a3b679SAndreas Boehler 'senderName' => 'Strunk', 230*a1a3b679SAndreas Boehler 'recipient' => 'mailto:three@example.org', 231*a1a3b679SAndreas Boehler 'recipientName' => 'Three', 232*a1a3b679SAndreas Boehler 'message' => <<<ICS 233*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 234*a1a3b679SAndreas BoehlerVERSION:2.0 235*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject $version//EN 236*a1a3b679SAndreas BoehlerCALSCALE:GREGORIAN 237*a1a3b679SAndreas BoehlerMETHOD:REQUEST 238*a1a3b679SAndreas BoehlerBEGIN:VEVENT 239*a1a3b679SAndreas BoehlerUID:foobar 240*a1a3b679SAndreas BoehlerRECURRENCE-ID:20140718T120000Z 241*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 242*a1a3b679SAndreas BoehlerATTENDEE;CN=Two:mailto:two@example.org 243*a1a3b679SAndreas BoehlerATTENDEE;CN=Three:mailto:three@example.org 244*a1a3b679SAndreas BoehlerDTSTART:20140718T120000Z 245*a1a3b679SAndreas BoehlerEND:VEVENT 246*a1a3b679SAndreas BoehlerEND:VCALENDAR 247*a1a3b679SAndreas BoehlerICS 248*a1a3b679SAndreas Boehler 249*a1a3b679SAndreas Boehler ), 250*a1a3b679SAndreas Boehler ); 251*a1a3b679SAndreas Boehler 252*a1a3b679SAndreas Boehler $result = $this->parse($message, $expected); 253*a1a3b679SAndreas Boehler 254*a1a3b679SAndreas Boehler } 255*a1a3b679SAndreas Boehler 256*a1a3b679SAndreas Boehler function testRecurrenceInvite2() { 257*a1a3b679SAndreas Boehler 258*a1a3b679SAndreas Boehler // This method tests a nearly identical path, but in this case the 259*a1a3b679SAndreas Boehler // master event does not have an EXDATE. 260*a1a3b679SAndreas Boehler $message = <<<ICS 261*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 262*a1a3b679SAndreas BoehlerVERSION:2.0 263*a1a3b679SAndreas BoehlerBEGIN:VEVENT 264*a1a3b679SAndreas BoehlerUID:foobar 265*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 266*a1a3b679SAndreas BoehlerATTENDEE;CN=One:mailto:one@example.org 267*a1a3b679SAndreas BoehlerATTENDEE;CN=Two:mailto:two@example.org 268*a1a3b679SAndreas BoehlerDTSTART:20140716T120000Z 269*a1a3b679SAndreas BoehlerRRULE:FREQ=DAILY 270*a1a3b679SAndreas BoehlerEND:VEVENT 271*a1a3b679SAndreas BoehlerBEGIN:VEVENT 272*a1a3b679SAndreas BoehlerUID:foobar 273*a1a3b679SAndreas BoehlerRECURRENCE-ID:20140718T120000Z 274*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 275*a1a3b679SAndreas BoehlerATTENDEE;CN=Two:mailto:two@example.org 276*a1a3b679SAndreas BoehlerATTENDEE;CN=Three:mailto:three@example.org 277*a1a3b679SAndreas BoehlerDTSTART:20140718T120000Z 278*a1a3b679SAndreas BoehlerEND:VEVENT 279*a1a3b679SAndreas BoehlerEND:VCALENDAR 280*a1a3b679SAndreas BoehlerICS; 281*a1a3b679SAndreas Boehler 282*a1a3b679SAndreas Boehler $version = \Sabre\VObject\Version::VERSION; 283*a1a3b679SAndreas Boehler 284*a1a3b679SAndreas Boehler $expected = array( 285*a1a3b679SAndreas Boehler array( 286*a1a3b679SAndreas Boehler 'uid' => 'foobar', 287*a1a3b679SAndreas Boehler 'method' => 'REQUEST', 288*a1a3b679SAndreas Boehler 'component' => 'VEVENT', 289*a1a3b679SAndreas Boehler 'sender' => 'mailto:strunk@example.org', 290*a1a3b679SAndreas Boehler 'senderName' => 'Strunk', 291*a1a3b679SAndreas Boehler 'recipient' => 'mailto:one@example.org', 292*a1a3b679SAndreas Boehler 'recipientName' => 'One', 293*a1a3b679SAndreas Boehler 'message' => <<<ICS 294*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 295*a1a3b679SAndreas BoehlerVERSION:2.0 296*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject $version//EN 297*a1a3b679SAndreas BoehlerCALSCALE:GREGORIAN 298*a1a3b679SAndreas BoehlerMETHOD:REQUEST 299*a1a3b679SAndreas BoehlerBEGIN:VEVENT 300*a1a3b679SAndreas BoehlerUID:foobar 301*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 302*a1a3b679SAndreas BoehlerATTENDEE;CN=One;PARTSTAT=NEEDS-ACTION:mailto:one@example.org 303*a1a3b679SAndreas BoehlerATTENDEE;CN=Two;PARTSTAT=NEEDS-ACTION:mailto:two@example.org 304*a1a3b679SAndreas BoehlerDTSTART:20140716T120000Z 305*a1a3b679SAndreas BoehlerRRULE:FREQ=DAILY 306*a1a3b679SAndreas BoehlerEXDATE:20140718T120000Z 307*a1a3b679SAndreas BoehlerEND:VEVENT 308*a1a3b679SAndreas BoehlerEND:VCALENDAR 309*a1a3b679SAndreas BoehlerICS 310*a1a3b679SAndreas Boehler 311*a1a3b679SAndreas Boehler ), 312*a1a3b679SAndreas Boehler array( 313*a1a3b679SAndreas Boehler 'uid' => 'foobar', 314*a1a3b679SAndreas Boehler 'method' => 'REQUEST', 315*a1a3b679SAndreas Boehler 'component' => 'VEVENT', 316*a1a3b679SAndreas Boehler 'sender' => 'mailto:strunk@example.org', 317*a1a3b679SAndreas Boehler 'senderName' => 'Strunk', 318*a1a3b679SAndreas Boehler 'recipient' => 'mailto:two@example.org', 319*a1a3b679SAndreas Boehler 'recipientName' => 'Two', 320*a1a3b679SAndreas Boehler 'message' => <<<ICS 321*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 322*a1a3b679SAndreas BoehlerVERSION:2.0 323*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject $version//EN 324*a1a3b679SAndreas BoehlerCALSCALE:GREGORIAN 325*a1a3b679SAndreas BoehlerMETHOD:REQUEST 326*a1a3b679SAndreas BoehlerBEGIN:VEVENT 327*a1a3b679SAndreas BoehlerUID:foobar 328*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 329*a1a3b679SAndreas BoehlerATTENDEE;CN=One;PARTSTAT=NEEDS-ACTION:mailto:one@example.org 330*a1a3b679SAndreas BoehlerATTENDEE;CN=Two;PARTSTAT=NEEDS-ACTION:mailto:two@example.org 331*a1a3b679SAndreas BoehlerDTSTART:20140716T120000Z 332*a1a3b679SAndreas BoehlerRRULE:FREQ=DAILY 333*a1a3b679SAndreas BoehlerEND:VEVENT 334*a1a3b679SAndreas BoehlerBEGIN:VEVENT 335*a1a3b679SAndreas BoehlerUID:foobar 336*a1a3b679SAndreas BoehlerRECURRENCE-ID:20140718T120000Z 337*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 338*a1a3b679SAndreas BoehlerATTENDEE;CN=Two:mailto:two@example.org 339*a1a3b679SAndreas BoehlerATTENDEE;CN=Three:mailto:three@example.org 340*a1a3b679SAndreas BoehlerDTSTART:20140718T120000Z 341*a1a3b679SAndreas BoehlerEND:VEVENT 342*a1a3b679SAndreas BoehlerEND:VCALENDAR 343*a1a3b679SAndreas BoehlerICS 344*a1a3b679SAndreas Boehler 345*a1a3b679SAndreas Boehler ), 346*a1a3b679SAndreas Boehler array( 347*a1a3b679SAndreas Boehler 'uid' => 'foobar', 348*a1a3b679SAndreas Boehler 'method' => 'REQUEST', 349*a1a3b679SAndreas Boehler 'component' => 'VEVENT', 350*a1a3b679SAndreas Boehler 'sender' => 'mailto:strunk@example.org', 351*a1a3b679SAndreas Boehler 'senderName' => 'Strunk', 352*a1a3b679SAndreas Boehler 'recipient' => 'mailto:three@example.org', 353*a1a3b679SAndreas Boehler 'recipientName' => 'Three', 354*a1a3b679SAndreas Boehler 'message' => <<<ICS 355*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 356*a1a3b679SAndreas BoehlerVERSION:2.0 357*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject $version//EN 358*a1a3b679SAndreas BoehlerCALSCALE:GREGORIAN 359*a1a3b679SAndreas BoehlerMETHOD:REQUEST 360*a1a3b679SAndreas BoehlerBEGIN:VEVENT 361*a1a3b679SAndreas BoehlerUID:foobar 362*a1a3b679SAndreas BoehlerRECURRENCE-ID:20140718T120000Z 363*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 364*a1a3b679SAndreas BoehlerATTENDEE;CN=Two:mailto:two@example.org 365*a1a3b679SAndreas BoehlerATTENDEE;CN=Three:mailto:three@example.org 366*a1a3b679SAndreas BoehlerDTSTART:20140718T120000Z 367*a1a3b679SAndreas BoehlerEND:VEVENT 368*a1a3b679SAndreas BoehlerEND:VCALENDAR 369*a1a3b679SAndreas BoehlerICS 370*a1a3b679SAndreas Boehler 371*a1a3b679SAndreas Boehler ), 372*a1a3b679SAndreas Boehler ); 373*a1a3b679SAndreas Boehler 374*a1a3b679SAndreas Boehler $result = $this->parse($message, $expected); 375*a1a3b679SAndreas Boehler 376*a1a3b679SAndreas Boehler } 377*a1a3b679SAndreas Boehler 378*a1a3b679SAndreas Boehler function testScheduleAgentClient() { 379*a1a3b679SAndreas Boehler 380*a1a3b679SAndreas Boehler $message = <<<ICS 381*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 382*a1a3b679SAndreas BoehlerVERSION:2.0 383*a1a3b679SAndreas BoehlerBEGIN:VEVENT 384*a1a3b679SAndreas BoehlerUID:foobar 385*a1a3b679SAndreas BoehlerDTSTART:20140811T220000Z 386*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 387*a1a3b679SAndreas BoehlerATTENDEE;CN=White;SCHEDULE-AGENT=CLIENT:mailto:white@example.org 388*a1a3b679SAndreas BoehlerEND:VEVENT 389*a1a3b679SAndreas BoehlerEND:VCALENDAR 390*a1a3b679SAndreas BoehlerICS; 391*a1a3b679SAndreas Boehler 392*a1a3b679SAndreas Boehler $version = \Sabre\VObject\Version::VERSION; 393*a1a3b679SAndreas Boehler 394*a1a3b679SAndreas Boehler $expected = array(); 395*a1a3b679SAndreas Boehler $result = $this->parse($message, $expected); 396*a1a3b679SAndreas Boehler 397*a1a3b679SAndreas Boehler } 398*a1a3b679SAndreas Boehler 399*a1a3b679SAndreas Boehler /** 400*a1a3b679SAndreas Boehler * @expectedException Sabre\VObject\ITip\ITipException 401*a1a3b679SAndreas Boehler */ 402*a1a3b679SAndreas Boehler function testMultipleUID() { 403*a1a3b679SAndreas Boehler 404*a1a3b679SAndreas Boehler $message = <<<ICS 405*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 406*a1a3b679SAndreas BoehlerVERSION:2.0 407*a1a3b679SAndreas BoehlerBEGIN:VEVENT 408*a1a3b679SAndreas BoehlerUID:foobar 409*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 410*a1a3b679SAndreas BoehlerATTENDEE;CN=One:mailto:one@example.org 411*a1a3b679SAndreas BoehlerATTENDEE;CN=Two:mailto:two@example.org 412*a1a3b679SAndreas BoehlerDTSTART:20140716T120000Z 413*a1a3b679SAndreas BoehlerRRULE:FREQ=DAILY 414*a1a3b679SAndreas BoehlerEND:VEVENT 415*a1a3b679SAndreas BoehlerBEGIN:VEVENT 416*a1a3b679SAndreas BoehlerUID:foobar2 417*a1a3b679SAndreas BoehlerRECURRENCE-ID:20140718T120000Z 418*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 419*a1a3b679SAndreas BoehlerATTENDEE;CN=Two:mailto:two@example.org 420*a1a3b679SAndreas BoehlerATTENDEE;CN=Three:mailto:three@example.org 421*a1a3b679SAndreas BoehlerDTSTART:20140718T120000Z 422*a1a3b679SAndreas BoehlerEND:VEVENT 423*a1a3b679SAndreas BoehlerEND:VCALENDAR 424*a1a3b679SAndreas BoehlerICS; 425*a1a3b679SAndreas Boehler 426*a1a3b679SAndreas Boehler $version = \Sabre\VObject\Version::VERSION; 427*a1a3b679SAndreas Boehler $result = $this->parse($message, array()); 428*a1a3b679SAndreas Boehler 429*a1a3b679SAndreas Boehler } 430*a1a3b679SAndreas Boehler 431*a1a3b679SAndreas Boehler /** 432*a1a3b679SAndreas Boehler * @expectedException Sabre\VObject\ITip\SameOrganizerForAllComponentsException 433*a1a3b679SAndreas Boehler * 434*a1a3b679SAndreas Boehler */ 435*a1a3b679SAndreas Boehler function testChangingOrganizers() { 436*a1a3b679SAndreas Boehler 437*a1a3b679SAndreas Boehler $message = <<<ICS 438*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 439*a1a3b679SAndreas BoehlerVERSION:2.0 440*a1a3b679SAndreas BoehlerBEGIN:VEVENT 441*a1a3b679SAndreas BoehlerUID:foobar 442*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:strunk@example.org 443*a1a3b679SAndreas BoehlerATTENDEE;CN=One:mailto:one@example.org 444*a1a3b679SAndreas BoehlerATTENDEE;CN=Two:mailto:two@example.org 445*a1a3b679SAndreas BoehlerDTSTART:20140716T120000Z 446*a1a3b679SAndreas BoehlerRRULE:FREQ=DAILY 447*a1a3b679SAndreas BoehlerEND:VEVENT 448*a1a3b679SAndreas BoehlerBEGIN:VEVENT 449*a1a3b679SAndreas BoehlerUID:foobar 450*a1a3b679SAndreas BoehlerRECURRENCE-ID:20140718T120000Z 451*a1a3b679SAndreas BoehlerORGANIZER;CN=Strunk:mailto:ew@example.org 452*a1a3b679SAndreas BoehlerATTENDEE;CN=Two:mailto:two@example.org 453*a1a3b679SAndreas BoehlerATTENDEE;CN=Three:mailto:three@example.org 454*a1a3b679SAndreas BoehlerDTSTART:20140718T120000Z 455*a1a3b679SAndreas BoehlerEND:VEVENT 456*a1a3b679SAndreas BoehlerEND:VCALENDAR 457*a1a3b679SAndreas BoehlerICS; 458*a1a3b679SAndreas Boehler 459*a1a3b679SAndreas Boehler $version = \Sabre\VObject\Version::VERSION; 460*a1a3b679SAndreas Boehler $result = $this->parse($message, array()); 461*a1a3b679SAndreas Boehler 462*a1a3b679SAndreas Boehler } 463*a1a3b679SAndreas Boehler function testNoOrganizerHasAttendee() { 464*a1a3b679SAndreas Boehler 465*a1a3b679SAndreas Boehler $message = <<<ICS 466*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 467*a1a3b679SAndreas BoehlerBEGIN:VEVENT 468*a1a3b679SAndreas BoehlerUID:foobar 469*a1a3b679SAndreas BoehlerDTSTART:20140811T220000Z 470*a1a3b679SAndreas BoehlerATTENDEE;CN=Two:mailto:two@example.org 471*a1a3b679SAndreas BoehlerEND:VEVENT 472*a1a3b679SAndreas BoehlerEND:VCALENDAR 473*a1a3b679SAndreas BoehlerICS; 474*a1a3b679SAndreas Boehler 475*a1a3b679SAndreas Boehler $this->parse($message, array()); 476*a1a3b679SAndreas Boehler 477*a1a3b679SAndreas Boehler } 478*a1a3b679SAndreas Boehler 479*a1a3b679SAndreas Boehler function parse($message, $expected = array()) { 480*a1a3b679SAndreas Boehler 481*a1a3b679SAndreas Boehler $broker = new Broker(); 482*a1a3b679SAndreas Boehler $result = $broker->parseEvent($message, 'mailto:strunk@example.org'); 483*a1a3b679SAndreas Boehler 484*a1a3b679SAndreas Boehler $this->assertEquals(count($expected), count($result)); 485*a1a3b679SAndreas Boehler 486*a1a3b679SAndreas Boehler foreach($expected as $index=>$ex) { 487*a1a3b679SAndreas Boehler 488*a1a3b679SAndreas Boehler $message = $result[$index]; 489*a1a3b679SAndreas Boehler 490*a1a3b679SAndreas Boehler foreach($ex as $key=>$val) { 491*a1a3b679SAndreas Boehler 492*a1a3b679SAndreas Boehler if ($key==='message') { 493*a1a3b679SAndreas Boehler $this->assertEquals( 494*a1a3b679SAndreas Boehler str_replace("\n", "\r\n", $val), 495*a1a3b679SAndreas Boehler rtrim($message->message->serialize(), "\r\n") 496*a1a3b679SAndreas Boehler ); 497*a1a3b679SAndreas Boehler } else { 498*a1a3b679SAndreas Boehler $this->assertEquals($val, $message->$key); 499*a1a3b679SAndreas Boehler } 500*a1a3b679SAndreas Boehler 501*a1a3b679SAndreas Boehler } 502*a1a3b679SAndreas Boehler 503*a1a3b679SAndreas Boehler } 504*a1a3b679SAndreas Boehler 505*a1a3b679SAndreas Boehler } 506*a1a3b679SAndreas Boehler 507*a1a3b679SAndreas Boehler} 508