xref: /plugin/davcal/vendor/sabre/vobject/tests/VObject/Component/VAlarmTest.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1*a1a3b679SAndreas Boehler<?php
2*a1a3b679SAndreas Boehler
3*a1a3b679SAndreas Boehlernamespace Sabre\VObject\Component;
4*a1a3b679SAndreas Boehler
5*a1a3b679SAndreas Boehleruse Sabre\VObject\Component;
6*a1a3b679SAndreas Boehleruse DateTime;
7*a1a3b679SAndreas Boehleruse Sabre\VObject\Reader;
8*a1a3b679SAndreas Boehler
9*a1a3b679SAndreas Boehlerclass VAlarmTest extends \PHPUnit_Framework_TestCase {
10*a1a3b679SAndreas Boehler
11*a1a3b679SAndreas Boehler    /**
12*a1a3b679SAndreas Boehler     * @dataProvider timeRangeTestData
13*a1a3b679SAndreas Boehler     */
14*a1a3b679SAndreas Boehler    public function testInTimeRange(VAlarm $valarm,$start,$end,$outcome) {
15*a1a3b679SAndreas Boehler
16*a1a3b679SAndreas Boehler        $this->assertEquals($outcome, $valarm->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        // Hard date and time
27*a1a3b679SAndreas Boehler        $valarm1 = $calendar->createComponent('VALARM');
28*a1a3b679SAndreas Boehler        $valarm1->add(
29*a1a3b679SAndreas Boehler            $calendar->createProperty('TRIGGER', '20120312T130000Z', array('VALUE' => 'DATE-TIME'))
30*a1a3b679SAndreas Boehler        );
31*a1a3b679SAndreas Boehler
32*a1a3b679SAndreas Boehler        $tests[] = array($valarm1, new DateTime('2012-03-01 01:00:00'), new DateTime('2012-04-01 01:00:00'), true);
33*a1a3b679SAndreas Boehler        $tests[] = array($valarm1, new DateTime('2012-03-01 01:00:00'), new DateTime('2012-03-10 01:00:00'), false);
34*a1a3b679SAndreas Boehler
35*a1a3b679SAndreas Boehler        // Relation to start time of event
36*a1a3b679SAndreas Boehler        $valarm2 = $calendar->createComponent('VALARM');
37*a1a3b679SAndreas Boehler        $valarm2->add(
38*a1a3b679SAndreas Boehler            $calendar->createProperty('TRIGGER', '-P1D', array('VALUE' => 'DURATION'))
39*a1a3b679SAndreas Boehler        );
40*a1a3b679SAndreas Boehler
41*a1a3b679SAndreas Boehler        $vevent2 = $calendar->createComponent('VEVENT');
42*a1a3b679SAndreas Boehler        $vevent2->DTSTART = '20120313T130000Z';
43*a1a3b679SAndreas Boehler        $vevent2->add($valarm2);
44*a1a3b679SAndreas Boehler
45*a1a3b679SAndreas Boehler        $tests[] = array($valarm2, new DateTime('2012-03-01 01:00:00'), new DateTime('2012-04-01 01:00:00'), true);
46*a1a3b679SAndreas Boehler        $tests[] = array($valarm2, new DateTime('2012-03-01 01:00:00'), new DateTime('2012-03-10 01:00:00'), false);
47*a1a3b679SAndreas Boehler
48*a1a3b679SAndreas Boehler        // Relation to end time of event
49*a1a3b679SAndreas Boehler        $valarm3 = $calendar->createComponent('VALARM');
50*a1a3b679SAndreas Boehler        $valarm3->add( $calendar->createProperty('TRIGGER', '-P1D', array('VALUE'=>'DURATION', 'RELATED' => 'END')) );
51*a1a3b679SAndreas Boehler
52*a1a3b679SAndreas Boehler        $vevent3 = $calendar->createComponent('VEVENT');
53*a1a3b679SAndreas Boehler        $vevent3->DTSTART = '20120301T130000Z';
54*a1a3b679SAndreas Boehler        $vevent3->DTEND = '20120401T130000Z';
55*a1a3b679SAndreas Boehler        $vevent3->add($valarm3);
56*a1a3b679SAndreas Boehler
57*a1a3b679SAndreas Boehler        $tests[] = array($valarm3, new DateTime('2012-02-25 01:00:00'), new DateTime('2012-03-05 01:00:00'), false);
58*a1a3b679SAndreas Boehler        $tests[] = array($valarm3, new DateTime('2012-03-25 01:00:00'), new DateTime('2012-04-05 01:00:00'), true);
59*a1a3b679SAndreas Boehler
60*a1a3b679SAndreas Boehler        // Relation to end time of todo
61*a1a3b679SAndreas Boehler        $valarm4 = $calendar->createComponent('VALARM');
62*a1a3b679SAndreas Boehler        $valarm4->TRIGGER = '-P1D';
63*a1a3b679SAndreas Boehler        $valarm4->TRIGGER['VALUE'] = 'DURATION';
64*a1a3b679SAndreas Boehler        $valarm4->TRIGGER['RELATED']= 'END';
65*a1a3b679SAndreas Boehler
66*a1a3b679SAndreas Boehler        $vtodo4 = $calendar->createComponent('VTODO');
67*a1a3b679SAndreas Boehler        $vtodo4->DTSTART = '20120301T130000Z';
68*a1a3b679SAndreas Boehler        $vtodo4->DUE = '20120401T130000Z';
69*a1a3b679SAndreas Boehler        $vtodo4->add($valarm4);
70*a1a3b679SAndreas Boehler
71*a1a3b679SAndreas Boehler        $tests[] = array($valarm4, new DateTime('2012-02-25 01:00:00'), new DateTime('2012-03-05 01:00:00'), false);
72*a1a3b679SAndreas Boehler        $tests[] = array($valarm4, new DateTime('2012-03-25 01:00:00'), new DateTime('2012-04-05 01:00:00'), true);
73*a1a3b679SAndreas Boehler
74*a1a3b679SAndreas Boehler        // Relation to start time of event + repeat
75*a1a3b679SAndreas Boehler        $valarm5 = $calendar->createComponent('VALARM');
76*a1a3b679SAndreas Boehler        $valarm5->TRIGGER = '-P1D';
77*a1a3b679SAndreas Boehler        $valarm5->TRIGGER['VALUE'] = 'DURATION';
78*a1a3b679SAndreas Boehler        $valarm5->REPEAT = 10;
79*a1a3b679SAndreas Boehler        $valarm5->DURATION = 'P1D';
80*a1a3b679SAndreas Boehler
81*a1a3b679SAndreas Boehler        $vevent5 = $calendar->createComponent('VEVENT');
82*a1a3b679SAndreas Boehler        $vevent5->DTSTART = '20120301T130000Z';
83*a1a3b679SAndreas Boehler        $vevent5->add($valarm5);
84*a1a3b679SAndreas Boehler
85*a1a3b679SAndreas Boehler        $tests[] = array($valarm5, new DateTime('2012-03-09 01:00:00'), new DateTime('2012-03-10 01:00:00'), true);
86*a1a3b679SAndreas Boehler
87*a1a3b679SAndreas Boehler        // Relation to start time of event + duration, but no repeat
88*a1a3b679SAndreas Boehler        $valarm6 = $calendar->createComponent('VALARM');
89*a1a3b679SAndreas Boehler        $valarm6->TRIGGER = '-P1D';
90*a1a3b679SAndreas Boehler        $valarm6->TRIGGER['VALUE'] = 'DURATION';
91*a1a3b679SAndreas Boehler        $valarm6->DURATION = 'P1D';
92*a1a3b679SAndreas Boehler
93*a1a3b679SAndreas Boehler        $vevent6 = $calendar->createComponent('VEVENT');
94*a1a3b679SAndreas Boehler        $vevent6->DTSTART = '20120313T130000Z';
95*a1a3b679SAndreas Boehler        $vevent6->add($valarm6);
96*a1a3b679SAndreas Boehler
97*a1a3b679SAndreas Boehler        $tests[] = array($valarm6, new DateTime('2012-03-01 01:00:00'), new DateTime('2012-04-01 01:00:00'), true);
98*a1a3b679SAndreas Boehler        $tests[] = array($valarm6, new DateTime('2012-03-01 01:00:00'), new DateTime('2012-03-10 01:00:00'), false);
99*a1a3b679SAndreas Boehler
100*a1a3b679SAndreas Boehler
101*a1a3b679SAndreas Boehler        // Relation to end time of event (DURATION instead of DTEND)
102*a1a3b679SAndreas Boehler        $valarm7 = $calendar->createComponent('VALARM');
103*a1a3b679SAndreas Boehler        $valarm7->TRIGGER = '-P1D';
104*a1a3b679SAndreas Boehler        $valarm7->TRIGGER['VALUE'] = 'DURATION';
105*a1a3b679SAndreas Boehler        $valarm7->TRIGGER['RELATED']= 'END';
106*a1a3b679SAndreas Boehler
107*a1a3b679SAndreas Boehler        $vevent7 = $calendar->createComponent('VEVENT');
108*a1a3b679SAndreas Boehler        $vevent7->DTSTART = '20120301T130000Z';
109*a1a3b679SAndreas Boehler        $vevent7->DURATION = 'P30D';
110*a1a3b679SAndreas Boehler        $vevent7->add($valarm7);
111*a1a3b679SAndreas Boehler
112*a1a3b679SAndreas Boehler        $tests[] = array($valarm7, new DateTime('2012-02-25 01:00:00'), new DateTime('2012-03-05 01:00:00'), false);
113*a1a3b679SAndreas Boehler        $tests[] = array($valarm7, new DateTime('2012-03-25 01:00:00'), new DateTime('2012-04-05 01:00:00'), true);
114*a1a3b679SAndreas Boehler
115*a1a3b679SAndreas Boehler        // Relation to end time of event (No DTEND or DURATION)
116*a1a3b679SAndreas Boehler        $valarm7 = $calendar->createComponent('VALARM');
117*a1a3b679SAndreas Boehler        $valarm7->TRIGGER = '-P1D';
118*a1a3b679SAndreas Boehler        $valarm7->TRIGGER['VALUE'] = 'DURATION';
119*a1a3b679SAndreas Boehler        $valarm7->TRIGGER['RELATED']= 'END';
120*a1a3b679SAndreas Boehler
121*a1a3b679SAndreas Boehler        $vevent7 = $calendar->createComponent('VEVENT');
122*a1a3b679SAndreas Boehler        $vevent7->DTSTART = '20120301T130000Z';
123*a1a3b679SAndreas Boehler        $vevent7->add($valarm7);
124*a1a3b679SAndreas Boehler
125*a1a3b679SAndreas Boehler        $tests[] = array($valarm7, new DateTime('2012-02-25 01:00:00'), new DateTime('2012-03-05 01:00:00'), true);
126*a1a3b679SAndreas Boehler        $tests[] = array($valarm7, new DateTime('2012-03-25 01:00:00'), new DateTime('2012-04-05 01:00:00'), false);
127*a1a3b679SAndreas Boehler
128*a1a3b679SAndreas Boehler
129*a1a3b679SAndreas Boehler        return $tests;
130*a1a3b679SAndreas Boehler    }
131*a1a3b679SAndreas Boehler
132*a1a3b679SAndreas Boehler    /**
133*a1a3b679SAndreas Boehler     * @expectedException LogicException
134*a1a3b679SAndreas Boehler     */
135*a1a3b679SAndreas Boehler    public function testInTimeRangeInvalidComponent() {
136*a1a3b679SAndreas Boehler
137*a1a3b679SAndreas Boehler        $calendar = new VCalendar();
138*a1a3b679SAndreas Boehler        $valarm = $calendar->createComponent('VALARM');
139*a1a3b679SAndreas Boehler        $valarm->TRIGGER = '-P1D';
140*a1a3b679SAndreas Boehler        $valarm->TRIGGER['RELATED'] = 'END';
141*a1a3b679SAndreas Boehler
142*a1a3b679SAndreas Boehler        $vjournal = $calendar->createComponent('VJOURNAL');
143*a1a3b679SAndreas Boehler        $vjournal->add($valarm);
144*a1a3b679SAndreas Boehler
145*a1a3b679SAndreas Boehler        $valarm->isInTimeRange(new DateTime('2012-02-25 01:00:00'), new DateTime('2012-03-05 01:00:00'));
146*a1a3b679SAndreas Boehler
147*a1a3b679SAndreas Boehler    }
148*a1a3b679SAndreas Boehler
149*a1a3b679SAndreas Boehler    /**
150*a1a3b679SAndreas Boehler     * This bug was found and reported on the mailing list.
151*a1a3b679SAndreas Boehler     */
152*a1a3b679SAndreas Boehler    public function testInTimeRangeBuggy() {
153*a1a3b679SAndreas Boehler
154*a1a3b679SAndreas Boehler$input = <<<BLA
155*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
156*a1a3b679SAndreas BoehlerBEGIN:VTODO
157*a1a3b679SAndreas BoehlerDTSTAMP:20121003T064931Z
158*a1a3b679SAndreas BoehlerUID:b848cb9a7bb16e464a06c222ca1f8102@examle.com
159*a1a3b679SAndreas BoehlerSTATUS:NEEDS-ACTION
160*a1a3b679SAndreas BoehlerDUE:20121005T000000Z
161*a1a3b679SAndreas BoehlerSUMMARY:Task 1
162*a1a3b679SAndreas BoehlerCATEGORIES:AlarmCategory
163*a1a3b679SAndreas BoehlerBEGIN:VALARM
164*a1a3b679SAndreas BoehlerTRIGGER:-PT10M
165*a1a3b679SAndreas BoehlerACTION:DISPLAY
166*a1a3b679SAndreas BoehlerDESCRIPTION:Task 1
167*a1a3b679SAndreas BoehlerEND:VALARM
168*a1a3b679SAndreas BoehlerEND:VTODO
169*a1a3b679SAndreas BoehlerEND:VCALENDAR
170*a1a3b679SAndreas BoehlerBLA;
171*a1a3b679SAndreas Boehler
172*a1a3b679SAndreas Boehler        $vobj = Reader::read($input);
173*a1a3b679SAndreas Boehler
174*a1a3b679SAndreas Boehler        $this->assertTrue($vobj->VTODO->VALARM->isInTimeRange(new \DateTime('2012-10-01 00:00:00'), new \DateTime('2012-11-01 00:00:00')));
175*a1a3b679SAndreas Boehler
176*a1a3b679SAndreas Boehler    }
177*a1a3b679SAndreas Boehler
178*a1a3b679SAndreas Boehler}
179*a1a3b679SAndreas Boehler
180