123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394 |
- <?php
- namespace Sabre\VObject;
- class FreeBusyGeneratorTest extends \PHPUnit_Framework_TestCase {
- function getInput() {
- $tests = array();
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar
- DTSTART:20110101T120000Z
- DTEND:20110101T130000Z
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- $blob,
- "20110101T120000Z/20110101T130000Z"
- );
- // opaque, shows up
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar2
- TRANSP:OPAQUE
- DTSTART:20110101T130000Z
- DTEND:20110101T140000Z
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- $blob,
- "20110101T130000Z/20110101T140000Z"
- );
- // transparent, hidden
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar3
- TRANSP:TRANSPARENT
- DTSTART:20110101T140000Z
- DTEND:20110101T150000Z
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- $blob,
- null,
- );
- // cancelled, hidden
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar4
- STATUS:CANCELLED
- DTSTART:20110101T160000Z
- DTEND:20110101T170000Z
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- $blob,
- null,
- );
- // tentative, shows up
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar5
- STATUS:TENTATIVE
- DTSTART:20110101T180000Z
- DTEND:20110101T190000Z
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- $blob,
- '20110101T180000Z/20110101T190000Z',
- );
- // outside of time-range, hidden
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar6
- DTSTART:20110101T090000Z
- DTEND:20110101T100000Z
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- $blob,
- null,
- );
- // outside of time-range, hidden
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar7
- DTSTART:20110104T090000Z
- DTEND:20110104T100000Z
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- $blob,
- null,
- );
- // using duration, shows up
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar8
- DTSTART:20110101T190000Z
- DURATION:PT1H
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- $blob,
- '20110101T190000Z/20110101T200000Z',
- );
- // Day-long event, shows up
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar9
- DTSTART;VALUE=DATE:20110102
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- $blob,
- '20110102T000000Z/20110103T000000Z',
- );
- // No duration, does not show up
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar10
- DTSTART:20110101T200000Z
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- $blob,
- null,
- );
- // encoded as object, shows up
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar11
- DTSTART:20110101T210000Z
- DURATION:PT1H
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- Reader::read($blob),
- '20110101T210000Z/20110101T220000Z',
- );
- // Freebusy. Some parts show up
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VFREEBUSY
- FREEBUSY:20110103T010000Z/20110103T020000Z
- FREEBUSY;FBTYPE=FREE:20110103T020000Z/20110103T030000Z
- FREEBUSY:20110103T030000Z/20110103T040000Z,20110103T040000Z/20110103T050000Z
- FREEBUSY:20120101T000000Z/20120101T010000Z
- FREEBUSY:20110103T050000Z/PT1H
- END:VFREEBUSY
- END:VCALENDAR
- ICS;
- $tests[] = array(
- Reader::read($blob),
- array(
- '20110103T010000Z/20110103T020000Z',
- '20110103T030000Z/20110103T040000Z',
- '20110103T040000Z/20110103T050000Z',
- '20110103T050000Z/20110103T060000Z',
- )
- );
- // Yearly recurrence rule, shows up
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar13
- DTSTART:20100101T220000Z
- DTEND:20100101T230000Z
- RRULE:FREQ=YEARLY
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- Reader::read($blob),
- '20110101T220000Z/20110101T230000Z',
- );
- // Yearly recurrence rule + duration, shows up
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar14
- DTSTART:20100101T230000Z
- DURATION:PT1H
- RRULE:FREQ=YEARLY
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- Reader::read($blob),
- '20110101T230000Z/20110102T000000Z',
- );
- // Floating time, no timezone
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar
- DTSTART:20110101T120000
- DTEND:20110101T130000
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- $blob,
- "20110101T120000Z/20110101T130000Z"
- );
- // Floating time + reference timezone
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar
- DTSTART:20110101T120000
- DTEND:20110101T130000
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- $blob,
- "20110101T170000Z/20110101T180000Z",
- new \DateTimeZone('America/Toronto')
- );
- // All-day event
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar
- DTSTART;VALUE=DATE:20110101
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- $blob,
- "20110101T000000Z/20110102T000000Z"
- );
- // All-day event + reference timezone
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar
- DTSTART;VALUE=DATE:20110101
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- $blob,
- "20110101T050000Z/20110102T050000Z",
- new \DateTimeZone('America/Toronto')
- );
- // Recurrence rule with no valid instances
- $blob = <<<ICS
- BEGIN:VCALENDAR
- BEGIN:VEVENT
- UID:foobar
- DTSTART:20110101T100000Z
- DTEND:20110103T120000Z
- RRULE:FREQ=WEEKLY;COUNT=1
- EXDATE:20110101T100000Z
- END:VEVENT
- END:VCALENDAR
- ICS;
- $tests[] = array(
- $blob,
- array()
- );
- return $tests;
- }
- /**
- * @dataProvider getInput
- */
- function testGenerator($input, $expected, $timeZone = null) {
- $gen = new FreeBusyGenerator(
- new \DateTime('20110101T110000Z', new \DateTimeZone('UTC')),
- new \DateTime('20110103T110000Z', new \DateTimeZone('UTC')),
- $input,
- $timeZone
- );
- $result = $gen->getResult();
- $expected = (array)$expected;
- $freebusy = $result->VFREEBUSY->select('FREEBUSY');
- foreach($freebusy as $fb) {
- $this->assertContains((string)$fb, $expected, "$fb did not appear in our list of expected freebusy strings. This is concerning!");
- $k = array_search((string)$fb, $expected);
- unset($expected[$k]);
- }
- $this->assertTrue(
- count($expected) === 0,
- 'There were elements in the expected array that were not found in the output: ' . "\n" . print_r($expected,true) . "\n" . $result->serialize()
- );
- }
- function testGeneratorBaseObject() {
- $obj = new Component\VCalendar();
- $obj->METHOD = 'PUBLISH';
- $gen = new FreeBusyGenerator();
- $gen->setObjects(array());
- $gen->setBaseObject($obj);
- $result = $gen->getResult();
- $this->assertEquals('PUBLISH', $result->METHOD->getValue());
- }
- /**
- * @expectedException InvalidArgumentException
- */
- function testInvalidArg() {
- $gen = new FreeBusyGenerator(
- new \DateTime('2012-01-01'),
- new \DateTime('2012-12-31'),
- new \StdClass()
- );
- }
- }
|