Blame view

sources/3rdparty/sabre/dav/tests/Sabre/CalDAV/Issue203Test.php 3.96 KB
6d9380f96   Cédric Dupont   Update sources OC...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
  <?php
  
  namespace Sabre\CalDAV;
  use Sabre\HTTP;
  use Sabre\VObject;
  
  /**
   * This unittest is created to find out why an overwritten DAILY event has wrong DTSTART, DTEND, SUMMARY and RECURRENCEID
   *
   *
   * @copyright Copyright (C) 2007-2014 Rooftop Solutions. All rights reserved.
   * @author Evert Pot (http://evertpot.com/)
   * @license http://sabre.io/license/ Modified BSD License
   */
  class Issue203Test extends \Sabre\DAVServerTest {
  
      protected $setupCalDAV = true;
  
      protected $caldavCalendars = array(
          array(
              'id' => 1,
              'name' => 'Calendar',
              'principaluri' => 'principals/user1',
              'uri' => 'calendar1',
          )
      );
  
      protected $caldavCalendarObjects = array(
          1 => array(
              'event.ics' => array(
                  'calendardata' => 'BEGIN:VCALENDAR
  VERSION:2.0
  BEGIN:VEVENT
  UID:20120330T155305CEST-6585fBUVgV
  DTSTAMP:20120330T135305Z
  DTSTART;TZID=Europe/Berlin:20120326T155200
  DTEND;TZID=Europe/Berlin:20120326T165200
  RRULE:FREQ=DAILY;COUNT=2;INTERVAL=1
  SUMMARY:original summary
  TRANSP:OPAQUE
  END:VEVENT
  BEGIN:VEVENT
  UID:20120330T155305CEST-6585fBUVgV
  DTSTAMP:20120330T135352Z
  DESCRIPTION:
  DTSTART;TZID=Europe/Berlin:20120328T155200
  DTEND;TZID=Europe/Berlin:20120328T165200
  RECURRENCE-ID;TZID=Europe/Berlin:20120327T155200
  SEQUENCE:1
  SUMMARY:overwritten summary
  TRANSP:OPAQUE
  END:VEVENT
  END:VCALENDAR
  ',
              ),
          ),
      );
  
      function testIssue203() {
  
          $request = new HTTP\Request(array(
              'REQUEST_METHOD' => 'REPORT',
              'HTTP_CONTENT_TYPE' => 'application/xml',
              'REQUEST_URI' => '/calendars/user1/calendar1',
              'HTTP_DEPTH' => '1',
          ));
  
          $request->setBody('<?xml version="1.0" encoding="utf-8" ?>
  <C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
      <D:prop>
          <C:calendar-data>
              <C:expand start="20120325T220000Z" end="20120401T215959Z"/>
          </C:calendar-data>
          <D:getetag/>
      </D:prop>
      <C:filter>
          <C:comp-filter name="VCALENDAR">
              <C:comp-filter name="VEVENT">
                  <C:time-range start="20120325T220000Z" end="20120401T215959Z"/>
              </C:comp-filter>
          </C:comp-filter>
      </C:filter>
  </C:calendar-query>');
  
          $response = $this->request($request);
  
          // Everts super awesome xml parser.
          $body = substr(
              $response->body,
              $start = strpos($response->body, 'BEGIN:VCALENDAR'),
              strpos($response->body, 'END:VCALENDAR') - $start + 13
          );
          $body = str_replace('&#13;','',$body);
  
          $vObject = VObject\Reader::read($body);
  
          $this->assertEquals(2, count($vObject->VEVENT));
  
  
          $expectedEvents = array(
              array(
                  'DTSTART' => '20120326T135200Z',
                  'DTEND'   => '20120326T145200Z',
                  'SUMMARY' => 'original summary',
              ),
              array(
                  'DTSTART'       => '20120328T135200Z',
                  'DTEND'         => '20120328T145200Z',
                  'SUMMARY'       => 'overwritten summary',
                  'RECURRENCE-ID' => '20120327T135200Z',
              )
          );
  
          // try to match agains $expectedEvents array
          foreach ($expectedEvents as $expectedEvent) {
  
              $matching = false;
  
              foreach ($vObject->VEVENT as $vevent) {
                  /** @var $vevent Sabre\VObject\Component\VEvent */
  
                  foreach ($vevent->children as $child) {
                      /** @var $child Sabre\VObject\Property */
  
                      if (isset($expectedEvent[$child->name])) {
                          if ($expectedEvent[$child->name] != $child->getValue()) {
                              continue 2;
                          }
                      }
                  }
  
                  $matching = true;
                  break;
              }
  
              $this->assertTrue($matching, 'Did not find the following event in the response: '.var_export($expectedEvent, true));
          }
      }
  }