1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\VObject\Component; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse 6*a1a3b679SAndreas Boehler Sabre\VObject\Component, 7*a1a3b679SAndreas Boehler Sabre\VObject\Reader; 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehlerclass VTodoTest extends \PHPUnit_Framework_TestCase { 10*a1a3b679SAndreas Boehler 11*a1a3b679SAndreas Boehler /** 12*a1a3b679SAndreas Boehler * @dataProvider timeRangeTestData 13*a1a3b679SAndreas Boehler */ 14*a1a3b679SAndreas Boehler public function testInTimeRange(VTodo $vtodo,$start,$end,$outcome) { 15*a1a3b679SAndreas Boehler 16*a1a3b679SAndreas Boehler $this->assertEquals($outcome, $vtodo->isInTimeRange($start, $end)); 17*a1a3b679SAndreas Boehler 18*a1a3b679SAndreas Boehler } 19*a1a3b679SAndreas Boehler 20*a1a3b679SAndreas Boehler public function timeRangeTestData() { 21*a1a3b679SAndreas Boehler 22*a1a3b679SAndreas Boehler $tests = array(); 23*a1a3b679SAndreas Boehler 24*a1a3b679SAndreas Boehler $calendar = new VCalendar(); 25*a1a3b679SAndreas Boehler 26*a1a3b679SAndreas Boehler $vtodo = $calendar->createComponent('VTODO'); 27*a1a3b679SAndreas Boehler $vtodo->DTSTART = '20111223T120000Z'; 28*a1a3b679SAndreas Boehler $tests[] = array($vtodo, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true); 29*a1a3b679SAndreas Boehler $tests[] = array($vtodo, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false); 30*a1a3b679SAndreas Boehler 31*a1a3b679SAndreas Boehler $vtodo2 = clone $vtodo; 32*a1a3b679SAndreas Boehler $vtodo2->DURATION = 'P1D'; 33*a1a3b679SAndreas Boehler $tests[] = array($vtodo2, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true); 34*a1a3b679SAndreas Boehler $tests[] = array($vtodo2, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false); 35*a1a3b679SAndreas Boehler 36*a1a3b679SAndreas Boehler $vtodo3 = clone $vtodo; 37*a1a3b679SAndreas Boehler $vtodo3->DUE = '20111225'; 38*a1a3b679SAndreas Boehler $tests[] = array($vtodo3, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true); 39*a1a3b679SAndreas Boehler $tests[] = array($vtodo3, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false); 40*a1a3b679SAndreas Boehler 41*a1a3b679SAndreas Boehler $vtodo4 = $calendar->createComponent('VTODO'); 42*a1a3b679SAndreas Boehler $vtodo4->DUE = '20111225'; 43*a1a3b679SAndreas Boehler $tests[] = array($vtodo4, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true); 44*a1a3b679SAndreas Boehler $tests[] = array($vtodo4, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false); 45*a1a3b679SAndreas Boehler 46*a1a3b679SAndreas Boehler $vtodo5 = $calendar->createComponent('VTODO'); 47*a1a3b679SAndreas Boehler $vtodo5->COMPLETED = '20111225'; 48*a1a3b679SAndreas Boehler $tests[] = array($vtodo5, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true); 49*a1a3b679SAndreas Boehler $tests[] = array($vtodo5, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false); 50*a1a3b679SAndreas Boehler 51*a1a3b679SAndreas Boehler $vtodo6 = $calendar->createComponent('VTODO'); 52*a1a3b679SAndreas Boehler $vtodo6->CREATED = '20111225'; 53*a1a3b679SAndreas Boehler $tests[] = array($vtodo6, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true); 54*a1a3b679SAndreas Boehler $tests[] = array($vtodo6, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false); 55*a1a3b679SAndreas Boehler 56*a1a3b679SAndreas Boehler $vtodo7 = $calendar->createComponent('VTODO'); 57*a1a3b679SAndreas Boehler $vtodo7->CREATED = '20111225'; 58*a1a3b679SAndreas Boehler $vtodo7->COMPLETED = '20111226'; 59*a1a3b679SAndreas Boehler $tests[] = array($vtodo7, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true); 60*a1a3b679SAndreas Boehler $tests[] = array($vtodo7, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false); 61*a1a3b679SAndreas Boehler 62*a1a3b679SAndreas Boehler $vtodo7 = $calendar->createComponent('VTODO'); 63*a1a3b679SAndreas Boehler $tests[] = array($vtodo7, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true); 64*a1a3b679SAndreas Boehler $tests[] = array($vtodo7, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), true); 65*a1a3b679SAndreas Boehler 66*a1a3b679SAndreas Boehler return $tests; 67*a1a3b679SAndreas Boehler 68*a1a3b679SAndreas Boehler } 69*a1a3b679SAndreas Boehler 70*a1a3b679SAndreas Boehler public function testValidate() { 71*a1a3b679SAndreas Boehler 72*a1a3b679SAndreas Boehler $input = <<<HI 73*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 74*a1a3b679SAndreas BoehlerVERSION:2.0 75*a1a3b679SAndreas BoehlerPRODID:YoYo 76*a1a3b679SAndreas BoehlerBEGIN:VTODO 77*a1a3b679SAndreas BoehlerUID:1234-21355-123156 78*a1a3b679SAndreas BoehlerDTSTAMP:20140402T183400Z 79*a1a3b679SAndreas BoehlerEND:VTODO 80*a1a3b679SAndreas BoehlerEND:VCALENDAR 81*a1a3b679SAndreas BoehlerHI; 82*a1a3b679SAndreas Boehler 83*a1a3b679SAndreas Boehler $obj = Reader::read($input); 84*a1a3b679SAndreas Boehler 85*a1a3b679SAndreas Boehler $warnings = $obj->validate(); 86*a1a3b679SAndreas Boehler $messages = array(); 87*a1a3b679SAndreas Boehler foreach($warnings as $warning) { 88*a1a3b679SAndreas Boehler $messages[] = $warning['message']; 89*a1a3b679SAndreas Boehler } 90*a1a3b679SAndreas Boehler 91*a1a3b679SAndreas Boehler $this->assertEquals(array(), $messages); 92*a1a3b679SAndreas Boehler 93*a1a3b679SAndreas Boehler } 94*a1a3b679SAndreas Boehler 95*a1a3b679SAndreas Boehler public function testValidateInvalid() { 96*a1a3b679SAndreas Boehler 97*a1a3b679SAndreas Boehler $input = <<<HI 98*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 99*a1a3b679SAndreas BoehlerVERSION:2.0 100*a1a3b679SAndreas BoehlerPRODID:YoYo 101*a1a3b679SAndreas BoehlerBEGIN:VTODO 102*a1a3b679SAndreas BoehlerEND:VTODO 103*a1a3b679SAndreas BoehlerEND:VCALENDAR 104*a1a3b679SAndreas BoehlerHI; 105*a1a3b679SAndreas Boehler 106*a1a3b679SAndreas Boehler $obj = Reader::read($input); 107*a1a3b679SAndreas Boehler 108*a1a3b679SAndreas Boehler $warnings = $obj->validate(); 109*a1a3b679SAndreas Boehler $messages = array(); 110*a1a3b679SAndreas Boehler foreach($warnings as $warning) { 111*a1a3b679SAndreas Boehler $messages[] = $warning['message']; 112*a1a3b679SAndreas Boehler } 113*a1a3b679SAndreas Boehler 114*a1a3b679SAndreas Boehler $this->assertEquals(array( 115*a1a3b679SAndreas Boehler "UID MUST appear exactly once in a VTODO component", 116*a1a3b679SAndreas Boehler "DTSTAMP MUST appear exactly once in a VTODO component", 117*a1a3b679SAndreas Boehler ), $messages); 118*a1a3b679SAndreas Boehler 119*a1a3b679SAndreas Boehler } 120*a1a3b679SAndreas Boehler 121*a1a3b679SAndreas Boehler public function testValidateDUEDTSTARTMisMatch() { 122*a1a3b679SAndreas Boehler 123*a1a3b679SAndreas Boehler $input = <<<HI 124*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 125*a1a3b679SAndreas BoehlerVERSION:2.0 126*a1a3b679SAndreas BoehlerPRODID:YoYo 127*a1a3b679SAndreas BoehlerBEGIN:VTODO 128*a1a3b679SAndreas BoehlerUID:FOO 129*a1a3b679SAndreas BoehlerDTSTART;VALUE=DATE-TIME:20140520T131600Z 130*a1a3b679SAndreas BoehlerDUE;VALUE=DATE:20140520 131*a1a3b679SAndreas BoehlerDTSTAMP;VALUE=DATE-TIME:20140520T131600Z 132*a1a3b679SAndreas BoehlerEND:VTODO 133*a1a3b679SAndreas BoehlerEND:VCALENDAR 134*a1a3b679SAndreas BoehlerHI; 135*a1a3b679SAndreas Boehler 136*a1a3b679SAndreas Boehler $obj = Reader::read($input); 137*a1a3b679SAndreas Boehler 138*a1a3b679SAndreas Boehler $warnings = $obj->validate(); 139*a1a3b679SAndreas Boehler $messages = array(); 140*a1a3b679SAndreas Boehler foreach($warnings as $warning) { 141*a1a3b679SAndreas Boehler $messages[] = $warning['message']; 142*a1a3b679SAndreas Boehler } 143*a1a3b679SAndreas Boehler 144*a1a3b679SAndreas Boehler $this->assertEquals(array( 145*a1a3b679SAndreas Boehler "The value type (DATE or DATE-TIME) must be identical for DUE and DTSTART", 146*a1a3b679SAndreas Boehler ), $messages); 147*a1a3b679SAndreas Boehler 148*a1a3b679SAndreas Boehler } 149*a1a3b679SAndreas Boehler 150*a1a3b679SAndreas Boehler public function testValidateDUEbeforeDTSTART() { 151*a1a3b679SAndreas Boehler 152*a1a3b679SAndreas Boehler $input = <<<HI 153*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 154*a1a3b679SAndreas BoehlerVERSION:2.0 155*a1a3b679SAndreas BoehlerPRODID:YoYo 156*a1a3b679SAndreas BoehlerBEGIN:VTODO 157*a1a3b679SAndreas BoehlerUID:FOO 158*a1a3b679SAndreas BoehlerDTSTART;VALUE=DATE:20140520 159*a1a3b679SAndreas BoehlerDUE;VALUE=DATE:20140518 160*a1a3b679SAndreas BoehlerDTSTAMP;VALUE=DATE-TIME:20140520T131600Z 161*a1a3b679SAndreas BoehlerEND:VTODO 162*a1a3b679SAndreas BoehlerEND:VCALENDAR 163*a1a3b679SAndreas BoehlerHI; 164*a1a3b679SAndreas Boehler 165*a1a3b679SAndreas Boehler $obj = Reader::read($input); 166*a1a3b679SAndreas Boehler 167*a1a3b679SAndreas Boehler $warnings = $obj->validate(); 168*a1a3b679SAndreas Boehler $messages = array(); 169*a1a3b679SAndreas Boehler foreach($warnings as $warning) { 170*a1a3b679SAndreas Boehler $messages[] = $warning['message']; 171*a1a3b679SAndreas Boehler } 172*a1a3b679SAndreas Boehler 173*a1a3b679SAndreas Boehler $this->assertEquals(array( 174*a1a3b679SAndreas Boehler "DUE must occur after DTSTART", 175*a1a3b679SAndreas Boehler ), $messages); 176*a1a3b679SAndreas Boehler 177*a1a3b679SAndreas Boehler } 178*a1a3b679SAndreas Boehler 179*a1a3b679SAndreas Boehler} 180*a1a3b679SAndreas Boehler 181