1<?php
2
3namespace Sabre\VObject\Component;
4
5use Sabre\VObject;
6use Sabre\VObject\Reader;
7
8class VFreeBusyTest extends \PHPUnit_Framework_TestCase {
9
10    function testIsFree() {
11
12        $input = <<<BLA
13BEGIN:VCALENDAR
14BEGIN:VFREEBUSY
15FREEBUSY;FBTYPE=FREE:20120912T000500Z/PT1H
16FREEBUSY;FBTYPE=BUSY:20120912T010000Z/20120912T020000Z
17FREEBUSY;FBTYPE=BUSY-TENTATIVE:20120912T020000Z/20120912T030000Z
18FREEBUSY;FBTYPE=BUSY-UNAVAILABLE:20120912T030000Z/20120912T040000Z
19FREEBUSY;FBTYPE=BUSY:20120912T050000Z/20120912T060000Z,20120912T080000Z/20120912T090000Z
20FREEBUSY;FBTYPE=BUSY:20120912T100000Z/PT1H
21END:VFREEBUSY
22END:VCALENDAR
23BLA;
24
25        $obj = VObject\Reader::read($input);
26        $vfb = $obj->VFREEBUSY;
27
28        $tz = new \DateTimeZone('UTC');
29
30        $this->assertFalse($vfb->isFree(new \DateTime('2012-09-12 01:15:00', $tz), new \DateTime('2012-09-12 01:45:00', $tz)));
31        $this->assertFalse($vfb->isFree(new \DateTime('2012-09-12 08:05:00', $tz), new \DateTime('2012-09-12 08:10:00', $tz)));
32        $this->assertFalse($vfb->isFree(new \DateTime('2012-09-12 10:15:00', $tz), new \DateTime('2012-09-12 10:45:00', $tz)));
33
34        // Checking whether the end time is treated as non-inclusive
35        $this->assertTrue($vfb->isFree(new \DateTime('2012-09-12 09:00:00', $tz), new \DateTime('2012-09-12 09:15:00', $tz)));
36        $this->assertTrue($vfb->isFree(new \DateTime('2012-09-12 09:45:00', $tz), new \DateTime('2012-09-12 10:00:00', $tz)));
37        $this->assertTrue($vfb->isFree(new \DateTime('2012-09-12 11:00:00', $tz), new \DateTime('2012-09-12 12:00:00', $tz)));
38
39    }
40
41    public function testValidate() {
42
43        $input = <<<HI
44BEGIN:VCALENDAR
45VERSION:2.0
46PRODID:YoYo
47BEGIN:VFREEBUSY
48UID:some-random-id
49DTSTAMP:20140402T180200Z
50END:VFREEBUSY
51END:VCALENDAR
52HI;
53
54        $obj = Reader::read($input);
55
56        $warnings = $obj->validate();
57        $messages = array();
58        foreach($warnings as $warning) {
59            $messages[] = $warning['message'];
60        }
61
62        $this->assertEquals(array(), $messages);
63
64    }
65
66}
67