xref: /plugin/davcal/vendor/sabre/dav/tests/Sabre/CalDAV/Schedule/ScheduleDeliverTest.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1*a1a3b679SAndreas Boehler<?php
2*a1a3b679SAndreas Boehler
3*a1a3b679SAndreas Boehlernamespace Sabre\CalDAV\Schedule;
4*a1a3b679SAndreas Boehler
5*a1a3b679SAndreas Boehleruse Sabre\HTTP\Request;
6*a1a3b679SAndreas Boehler
7*a1a3b679SAndreas Boehlerclass ScheduleDeliverTest extends \Sabre\DAVServerTest {
8*a1a3b679SAndreas Boehler
9*a1a3b679SAndreas Boehler    public $setupCalDAV = true;
10*a1a3b679SAndreas Boehler    public $setupCalDAVScheduling = true;
11*a1a3b679SAndreas Boehler    public $setupACL = true;
12*a1a3b679SAndreas Boehler    public $autoLogin = 'user1';
13*a1a3b679SAndreas Boehler
14*a1a3b679SAndreas Boehler    public $caldavCalendars = [
15*a1a3b679SAndreas Boehler        [
16*a1a3b679SAndreas Boehler            'principaluri' => 'principals/user1',
17*a1a3b679SAndreas Boehler            'uri' => 'cal',
18*a1a3b679SAndreas Boehler        ],
19*a1a3b679SAndreas Boehler        [
20*a1a3b679SAndreas Boehler            'principaluri' => 'principals/user2',
21*a1a3b679SAndreas Boehler            'uri' => 'cal',
22*a1a3b679SAndreas Boehler        ],
23*a1a3b679SAndreas Boehler    ];
24*a1a3b679SAndreas Boehler
25*a1a3b679SAndreas Boehler    function setUp() {
26*a1a3b679SAndreas Boehler
27*a1a3b679SAndreas Boehler        $this->calendarObjectUri = '/calendars/user1/cal/object.ics';
28*a1a3b679SAndreas Boehler
29*a1a3b679SAndreas Boehler        parent::setUp();
30*a1a3b679SAndreas Boehler
31*a1a3b679SAndreas Boehler    }
32*a1a3b679SAndreas Boehler
33*a1a3b679SAndreas Boehler    function testNewInvite() {
34*a1a3b679SAndreas Boehler
35*a1a3b679SAndreas Boehler        $newObject = <<<ICS
36*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
37*a1a3b679SAndreas BoehlerBEGIN:VEVENT
38*a1a3b679SAndreas BoehlerUID:foo
39*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
40*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
41*a1a3b679SAndreas BoehlerATTENDEE:mailto:user2.sabredav@sabredav.org
42*a1a3b679SAndreas BoehlerEND:VEVENT
43*a1a3b679SAndreas BoehlerEND:VCALENDAR
44*a1a3b679SAndreas BoehlerICS;
45*a1a3b679SAndreas Boehler
46*a1a3b679SAndreas Boehler        $this->deliver(null, $newObject);
47*a1a3b679SAndreas Boehler        $this->assertItemsInInbox('user2', 1);
48*a1a3b679SAndreas Boehler
49*a1a3b679SAndreas Boehler        $expected = <<<ICS
50*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
51*a1a3b679SAndreas BoehlerBEGIN:VEVENT
52*a1a3b679SAndreas BoehlerUID:foo
53*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
54*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
55*a1a3b679SAndreas BoehlerATTENDEE;SCHEDULE-STATUS=1.2:mailto:user2.sabredav@sabredav.org
56*a1a3b679SAndreas BoehlerEND:VEVENT
57*a1a3b679SAndreas BoehlerEND:VCALENDAR
58*a1a3b679SAndreas BoehlerICS;
59*a1a3b679SAndreas Boehler
60*a1a3b679SAndreas Boehler        $this->assertVObjEquals(
61*a1a3b679SAndreas Boehler            $expected,
62*a1a3b679SAndreas Boehler            $newObject
63*a1a3b679SAndreas Boehler        );
64*a1a3b679SAndreas Boehler
65*a1a3b679SAndreas Boehler    }
66*a1a3b679SAndreas Boehler
67*a1a3b679SAndreas Boehler    function testNewOnWrongCollection() {
68*a1a3b679SAndreas Boehler
69*a1a3b679SAndreas Boehler        $newObject = <<<ICS
70*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
71*a1a3b679SAndreas BoehlerBEGIN:VEVENT
72*a1a3b679SAndreas BoehlerUID:foo
73*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
74*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
75*a1a3b679SAndreas BoehlerATTENDEE:mailto:user2.sabredav@sabredav.org
76*a1a3b679SAndreas BoehlerEND:VEVENT
77*a1a3b679SAndreas BoehlerEND:VCALENDAR
78*a1a3b679SAndreas BoehlerICS;
79*a1a3b679SAndreas Boehler
80*a1a3b679SAndreas Boehler        $this->calendarObjectUri = '/calendars/user1/object.ics';
81*a1a3b679SAndreas Boehler        $this->deliver(null, $newObject);
82*a1a3b679SAndreas Boehler        $this->assertItemsInInbox('user2', 0);
83*a1a3b679SAndreas Boehler
84*a1a3b679SAndreas Boehler
85*a1a3b679SAndreas Boehler    }
86*a1a3b679SAndreas Boehler    function testNewInviteSchedulingDisabled() {
87*a1a3b679SAndreas Boehler
88*a1a3b679SAndreas Boehler        $newObject = <<<ICS
89*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
90*a1a3b679SAndreas BoehlerBEGIN:VEVENT
91*a1a3b679SAndreas BoehlerUID:foo
92*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
93*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
94*a1a3b679SAndreas BoehlerATTENDEE:mailto:user2.sabredav@sabredav.org
95*a1a3b679SAndreas BoehlerEND:VEVENT
96*a1a3b679SAndreas BoehlerEND:VCALENDAR
97*a1a3b679SAndreas BoehlerICS;
98*a1a3b679SAndreas Boehler
99*a1a3b679SAndreas Boehler        $this->deliver(null, $newObject, true);
100*a1a3b679SAndreas Boehler        $this->assertItemsInInbox('user2', 0);
101*a1a3b679SAndreas Boehler
102*a1a3b679SAndreas Boehler    }
103*a1a3b679SAndreas Boehler    function testUpdatedInvite() {
104*a1a3b679SAndreas Boehler
105*a1a3b679SAndreas Boehler        $newObject = <<<ICS
106*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
107*a1a3b679SAndreas BoehlerBEGIN:VEVENT
108*a1a3b679SAndreas BoehlerUID:foo
109*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
110*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
111*a1a3b679SAndreas BoehlerATTENDEE:mailto:user2.sabredav@sabredav.org
112*a1a3b679SAndreas BoehlerEND:VEVENT
113*a1a3b679SAndreas BoehlerEND:VCALENDAR
114*a1a3b679SAndreas BoehlerICS;
115*a1a3b679SAndreas Boehler        $oldObject = <<<ICS
116*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
117*a1a3b679SAndreas BoehlerBEGIN:VEVENT
118*a1a3b679SAndreas BoehlerUID:foo
119*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
120*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
121*a1a3b679SAndreas BoehlerEND:VEVENT
122*a1a3b679SAndreas BoehlerEND:VCALENDAR
123*a1a3b679SAndreas BoehlerICS;
124*a1a3b679SAndreas Boehler
125*a1a3b679SAndreas Boehler        $this->deliver($oldObject, $newObject);
126*a1a3b679SAndreas Boehler        $this->assertItemsInInbox('user2', 1);
127*a1a3b679SAndreas Boehler
128*a1a3b679SAndreas Boehler        $expected = <<<ICS
129*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
130*a1a3b679SAndreas BoehlerBEGIN:VEVENT
131*a1a3b679SAndreas BoehlerUID:foo
132*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
133*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
134*a1a3b679SAndreas BoehlerATTENDEE;SCHEDULE-STATUS=1.2:mailto:user2.sabredav@sabredav.org
135*a1a3b679SAndreas BoehlerEND:VEVENT
136*a1a3b679SAndreas BoehlerEND:VCALENDAR
137*a1a3b679SAndreas BoehlerICS;
138*a1a3b679SAndreas Boehler
139*a1a3b679SAndreas Boehler        $this->assertVObjEquals(
140*a1a3b679SAndreas Boehler            $expected,
141*a1a3b679SAndreas Boehler            $newObject
142*a1a3b679SAndreas Boehler        );
143*a1a3b679SAndreas Boehler
144*a1a3b679SAndreas Boehler
145*a1a3b679SAndreas Boehler    }
146*a1a3b679SAndreas Boehler    function testUpdatedInviteSchedulingDisabled() {
147*a1a3b679SAndreas Boehler
148*a1a3b679SAndreas Boehler        $newObject = <<<ICS
149*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
150*a1a3b679SAndreas BoehlerBEGIN:VEVENT
151*a1a3b679SAndreas BoehlerUID:foo
152*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
153*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
154*a1a3b679SAndreas BoehlerATTENDEE:mailto:user2.sabredav@sabredav.org
155*a1a3b679SAndreas BoehlerEND:VEVENT
156*a1a3b679SAndreas BoehlerEND:VCALENDAR
157*a1a3b679SAndreas BoehlerICS;
158*a1a3b679SAndreas Boehler        $oldObject = <<<ICS
159*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
160*a1a3b679SAndreas BoehlerBEGIN:VEVENT
161*a1a3b679SAndreas BoehlerUID:foo
162*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
163*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
164*a1a3b679SAndreas BoehlerEND:VEVENT
165*a1a3b679SAndreas BoehlerEND:VCALENDAR
166*a1a3b679SAndreas BoehlerICS;
167*a1a3b679SAndreas Boehler
168*a1a3b679SAndreas Boehler        $this->deliver($oldObject, $newObject, true);
169*a1a3b679SAndreas Boehler        $this->assertItemsInInbox('user2', 0);
170*a1a3b679SAndreas Boehler
171*a1a3b679SAndreas Boehler    }
172*a1a3b679SAndreas Boehler
173*a1a3b679SAndreas Boehler    function testUpdatedInviteWrongPath() {
174*a1a3b679SAndreas Boehler
175*a1a3b679SAndreas Boehler        $newObject = <<<ICS
176*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
177*a1a3b679SAndreas BoehlerBEGIN:VEVENT
178*a1a3b679SAndreas BoehlerUID:foo
179*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
180*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
181*a1a3b679SAndreas BoehlerATTENDEE:mailto:user2.sabredav@sabredav.org
182*a1a3b679SAndreas BoehlerEND:VEVENT
183*a1a3b679SAndreas BoehlerEND:VCALENDAR
184*a1a3b679SAndreas BoehlerICS;
185*a1a3b679SAndreas Boehler        $oldObject = <<<ICS
186*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
187*a1a3b679SAndreas BoehlerBEGIN:VEVENT
188*a1a3b679SAndreas BoehlerUID:foo
189*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
190*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
191*a1a3b679SAndreas BoehlerEND:VEVENT
192*a1a3b679SAndreas BoehlerEND:VCALENDAR
193*a1a3b679SAndreas BoehlerICS;
194*a1a3b679SAndreas Boehler
195*a1a3b679SAndreas Boehler        $this->calendarObjectUri = '/calendars/user1/inbox/foo.ics';
196*a1a3b679SAndreas Boehler        $this->deliver($oldObject, $newObject);
197*a1a3b679SAndreas Boehler        $this->assertItemsInInbox('user2', 0);
198*a1a3b679SAndreas Boehler
199*a1a3b679SAndreas Boehler    }
200*a1a3b679SAndreas Boehler
201*a1a3b679SAndreas Boehler    function testDeletedInvite() {
202*a1a3b679SAndreas Boehler
203*a1a3b679SAndreas Boehler        $newObject = null;
204*a1a3b679SAndreas Boehler
205*a1a3b679SAndreas Boehler        $oldObject = <<<ICS
206*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
207*a1a3b679SAndreas BoehlerBEGIN:VEVENT
208*a1a3b679SAndreas BoehlerUID:foo
209*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
210*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
211*a1a3b679SAndreas BoehlerATTENDEE:mailto:user2.sabredav@sabredav.org
212*a1a3b679SAndreas BoehlerEND:VEVENT
213*a1a3b679SAndreas BoehlerEND:VCALENDAR
214*a1a3b679SAndreas BoehlerICS;
215*a1a3b679SAndreas Boehler
216*a1a3b679SAndreas Boehler        $this->deliver($oldObject, $newObject);
217*a1a3b679SAndreas Boehler        $this->assertItemsInInbox('user2', 1);
218*a1a3b679SAndreas Boehler
219*a1a3b679SAndreas Boehler    }
220*a1a3b679SAndreas Boehler
221*a1a3b679SAndreas Boehler    function testDeletedInviteSchedulingDisabled() {
222*a1a3b679SAndreas Boehler
223*a1a3b679SAndreas Boehler        $newObject = null;
224*a1a3b679SAndreas Boehler
225*a1a3b679SAndreas Boehler        $oldObject = <<<ICS
226*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
227*a1a3b679SAndreas BoehlerBEGIN:VEVENT
228*a1a3b679SAndreas BoehlerUID:foo
229*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
230*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
231*a1a3b679SAndreas BoehlerATTENDEE:mailto:user2.sabredav@sabredav.org
232*a1a3b679SAndreas BoehlerEND:VEVENT
233*a1a3b679SAndreas BoehlerEND:VCALENDAR
234*a1a3b679SAndreas BoehlerICS;
235*a1a3b679SAndreas Boehler
236*a1a3b679SAndreas Boehler        $this->deliver($oldObject, $newObject, true);
237*a1a3b679SAndreas Boehler        $this->assertItemsInInbox('user2', 0);
238*a1a3b679SAndreas Boehler
239*a1a3b679SAndreas Boehler    }
240*a1a3b679SAndreas Boehler
241*a1a3b679SAndreas Boehler    /**
242*a1a3b679SAndreas Boehler     * A MOVE request will trigger an unbind on a scheduling resource.
243*a1a3b679SAndreas Boehler     *
244*a1a3b679SAndreas Boehler     * However, we must not treat it as a cancellation, it just got moved to a
245*a1a3b679SAndreas Boehler     * different calendar.
246*a1a3b679SAndreas Boehler     */
247*a1a3b679SAndreas Boehler    function testUnbindIgnoredOnMove() {
248*a1a3b679SAndreas Boehler
249*a1a3b679SAndreas Boehler        $newObject = null;
250*a1a3b679SAndreas Boehler
251*a1a3b679SAndreas Boehler        $oldObject = <<<ICS
252*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
253*a1a3b679SAndreas BoehlerBEGIN:VEVENT
254*a1a3b679SAndreas BoehlerUID:foo
255*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
256*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
257*a1a3b679SAndreas BoehlerATTENDEE:mailto:user2.sabredav@sabredav.org
258*a1a3b679SAndreas BoehlerEND:VEVENT
259*a1a3b679SAndreas BoehlerEND:VCALENDAR
260*a1a3b679SAndreas BoehlerICS;
261*a1a3b679SAndreas Boehler
262*a1a3b679SAndreas Boehler
263*a1a3b679SAndreas Boehler        $this->server->httpRequest->setMethod('MOVE');
264*a1a3b679SAndreas Boehler        $this->deliver($oldObject, $newObject);
265*a1a3b679SAndreas Boehler        $this->assertItemsInInbox('user2', 0);
266*a1a3b679SAndreas Boehler
267*a1a3b679SAndreas Boehler    }
268*a1a3b679SAndreas Boehler
269*a1a3b679SAndreas Boehler    function testDeletedInviteWrongUrl() {
270*a1a3b679SAndreas Boehler
271*a1a3b679SAndreas Boehler        $newObject = null;
272*a1a3b679SAndreas Boehler
273*a1a3b679SAndreas Boehler        $oldObject = <<<ICS
274*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
275*a1a3b679SAndreas BoehlerBEGIN:VEVENT
276*a1a3b679SAndreas BoehlerUID:foo
277*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
278*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
279*a1a3b679SAndreas BoehlerATTENDEE:mailto:user2.sabredav@sabredav.org
280*a1a3b679SAndreas BoehlerEND:VEVENT
281*a1a3b679SAndreas BoehlerEND:VCALENDAR
282*a1a3b679SAndreas BoehlerICS;
283*a1a3b679SAndreas Boehler
284*a1a3b679SAndreas Boehler        $this->calendarObjectUri = '/calendars/user1/inbox/foo.ics';
285*a1a3b679SAndreas Boehler        $this->deliver($oldObject, $newObject);
286*a1a3b679SAndreas Boehler        $this->assertItemsInInbox('user2', 0);
287*a1a3b679SAndreas Boehler
288*a1a3b679SAndreas Boehler    }
289*a1a3b679SAndreas Boehler
290*a1a3b679SAndreas Boehler    function testReply() {
291*a1a3b679SAndreas Boehler
292*a1a3b679SAndreas Boehler        $oldObject = <<<ICS
293*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
294*a1a3b679SAndreas BoehlerBEGIN:VEVENT
295*a1a3b679SAndreas BoehlerUID:foo
296*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
297*a1a3b679SAndreas BoehlerORGANIZER:mailto:user2.sabredav@sabredav.org
298*a1a3b679SAndreas BoehlerATTENDEE;PARTSTAT=ACCEPTED:mailto:user2.sabredav@sabredav.org
299*a1a3b679SAndreas BoehlerATTENDEE:mailto:user1.sabredav@sabredav.org
300*a1a3b679SAndreas BoehlerATTENDEE:mailto:user3.sabredav@sabredav.org
301*a1a3b679SAndreas BoehlerEND:VEVENT
302*a1a3b679SAndreas BoehlerEND:VCALENDAR
303*a1a3b679SAndreas BoehlerICS;
304*a1a3b679SAndreas Boehler
305*a1a3b679SAndreas Boehler        $newObject = <<<ICS
306*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
307*a1a3b679SAndreas BoehlerBEGIN:VEVENT
308*a1a3b679SAndreas BoehlerUID:foo
309*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
310*a1a3b679SAndreas BoehlerORGANIZER:mailto:user2.sabredav@sabredav.org
311*a1a3b679SAndreas BoehlerATTENDEE;PARTSTAT=ACCEPTED:mailto:user2.sabredav@sabredav.org
312*a1a3b679SAndreas BoehlerATTENDEE;PARTSTAT=ACCEPTED:mailto:user1.sabredav@sabredav.org
313*a1a3b679SAndreas BoehlerATTENDEE:mailto:user3.sabredav@sabredav.org
314*a1a3b679SAndreas BoehlerEND:VEVENT
315*a1a3b679SAndreas BoehlerEND:VCALENDAR
316*a1a3b679SAndreas BoehlerICS;
317*a1a3b679SAndreas Boehler
318*a1a3b679SAndreas Boehler        $this->putPath('calendars/user2/cal/foo.ics', $oldObject);
319*a1a3b679SAndreas Boehler
320*a1a3b679SAndreas Boehler        $this->deliver($oldObject, $newObject);
321*a1a3b679SAndreas Boehler        $this->assertItemsInInbox('user2', 1);
322*a1a3b679SAndreas Boehler        $this->assertItemsInInbox('user1', 0);
323*a1a3b679SAndreas Boehler
324*a1a3b679SAndreas Boehler        $expected = <<<ICS
325*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
326*a1a3b679SAndreas BoehlerBEGIN:VEVENT
327*a1a3b679SAndreas BoehlerUID:foo
328*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
329*a1a3b679SAndreas BoehlerORGANIZER;SCHEDULE-STATUS=1.2:mailto:user2.sabredav@sabredav.org
330*a1a3b679SAndreas BoehlerATTENDEE;PARTSTAT=ACCEPTED:mailto:user2.sabredav@sabredav.org
331*a1a3b679SAndreas BoehlerATTENDEE;PARTSTAT=ACCEPTED:mailto:user1.sabredav@sabredav.org
332*a1a3b679SAndreas BoehlerATTENDEE:mailto:user3.sabredav@sabredav.org
333*a1a3b679SAndreas BoehlerEND:VEVENT
334*a1a3b679SAndreas BoehlerEND:VCALENDAR
335*a1a3b679SAndreas BoehlerICS;
336*a1a3b679SAndreas Boehler
337*a1a3b679SAndreas Boehler        $this->assertVObjEquals(
338*a1a3b679SAndreas Boehler            $expected,
339*a1a3b679SAndreas Boehler            $newObject
340*a1a3b679SAndreas Boehler        );
341*a1a3b679SAndreas Boehler
342*a1a3b679SAndreas Boehler    }
343*a1a3b679SAndreas Boehler
344*a1a3b679SAndreas Boehler
345*a1a3b679SAndreas Boehler
346*a1a3b679SAndreas Boehler    function testInviteUnknownUser() {
347*a1a3b679SAndreas Boehler
348*a1a3b679SAndreas Boehler        $newObject = <<<ICS
349*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
350*a1a3b679SAndreas BoehlerBEGIN:VEVENT
351*a1a3b679SAndreas BoehlerUID:foo
352*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
353*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
354*a1a3b679SAndreas BoehlerATTENDEE:mailto:user3.sabredav@sabredav.org
355*a1a3b679SAndreas BoehlerEND:VEVENT
356*a1a3b679SAndreas BoehlerEND:VCALENDAR
357*a1a3b679SAndreas BoehlerICS;
358*a1a3b679SAndreas Boehler
359*a1a3b679SAndreas Boehler        $this->deliver(null, $newObject);
360*a1a3b679SAndreas Boehler
361*a1a3b679SAndreas Boehler        $expected = <<<ICS
362*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
363*a1a3b679SAndreas BoehlerBEGIN:VEVENT
364*a1a3b679SAndreas BoehlerUID:foo
365*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
366*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
367*a1a3b679SAndreas BoehlerATTENDEE;SCHEDULE-STATUS=3.7:mailto:user3.sabredav@sabredav.org
368*a1a3b679SAndreas BoehlerEND:VEVENT
369*a1a3b679SAndreas BoehlerEND:VCALENDAR
370*a1a3b679SAndreas BoehlerICS;
371*a1a3b679SAndreas Boehler
372*a1a3b679SAndreas Boehler        $this->assertVObjEquals(
373*a1a3b679SAndreas Boehler            $expected,
374*a1a3b679SAndreas Boehler            $newObject
375*a1a3b679SAndreas Boehler        );
376*a1a3b679SAndreas Boehler
377*a1a3b679SAndreas Boehler    }
378*a1a3b679SAndreas Boehler
379*a1a3b679SAndreas Boehler    function testInviteNoInboxUrl() {
380*a1a3b679SAndreas Boehler
381*a1a3b679SAndreas Boehler        $newObject = <<<ICS
382*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
383*a1a3b679SAndreas BoehlerBEGIN:VEVENT
384*a1a3b679SAndreas BoehlerUID:foo
385*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
386*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
387*a1a3b679SAndreas BoehlerATTENDEE:mailto:user2.sabredav@sabredav.org
388*a1a3b679SAndreas BoehlerEND:VEVENT
389*a1a3b679SAndreas BoehlerEND:VCALENDAR
390*a1a3b679SAndreas BoehlerICS;
391*a1a3b679SAndreas Boehler
392*a1a3b679SAndreas Boehler        $this->server->on('propFind', function($propFind) {
393*a1a3b679SAndreas Boehler            $propFind->set('{' . Plugin::NS_CALDAV . '}schedule-inbox-URL', null, 403);
394*a1a3b679SAndreas Boehler        });
395*a1a3b679SAndreas Boehler        $this->deliver(null, $newObject);
396*a1a3b679SAndreas Boehler
397*a1a3b679SAndreas Boehler        $expected = <<<ICS
398*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
399*a1a3b679SAndreas BoehlerBEGIN:VEVENT
400*a1a3b679SAndreas BoehlerUID:foo
401*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
402*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
403*a1a3b679SAndreas BoehlerATTENDEE;SCHEDULE-STATUS=5.2:mailto:user2.sabredav@sabredav.org
404*a1a3b679SAndreas BoehlerEND:VEVENT
405*a1a3b679SAndreas BoehlerEND:VCALENDAR
406*a1a3b679SAndreas BoehlerICS;
407*a1a3b679SAndreas Boehler
408*a1a3b679SAndreas Boehler        $this->assertVObjEquals(
409*a1a3b679SAndreas Boehler            $expected,
410*a1a3b679SAndreas Boehler            $newObject
411*a1a3b679SAndreas Boehler        );
412*a1a3b679SAndreas Boehler
413*a1a3b679SAndreas Boehler    }
414*a1a3b679SAndreas Boehler
415*a1a3b679SAndreas Boehler    function testInviteNoCalendarHomeSet() {
416*a1a3b679SAndreas Boehler
417*a1a3b679SAndreas Boehler        $newObject = <<<ICS
418*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
419*a1a3b679SAndreas BoehlerBEGIN:VEVENT
420*a1a3b679SAndreas BoehlerUID:foo
421*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
422*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
423*a1a3b679SAndreas BoehlerATTENDEE:mailto:user2.sabredav@sabredav.org
424*a1a3b679SAndreas BoehlerEND:VEVENT
425*a1a3b679SAndreas BoehlerEND:VCALENDAR
426*a1a3b679SAndreas BoehlerICS;
427*a1a3b679SAndreas Boehler
428*a1a3b679SAndreas Boehler        $this->server->on('propFind', function($propFind) {
429*a1a3b679SAndreas Boehler            $propFind->set('{' . Plugin::NS_CALDAV . '}calendar-home-set', null, 403);
430*a1a3b679SAndreas Boehler        });
431*a1a3b679SAndreas Boehler        $this->deliver(null, $newObject);
432*a1a3b679SAndreas Boehler
433*a1a3b679SAndreas Boehler        $expected = <<<ICS
434*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
435*a1a3b679SAndreas BoehlerBEGIN:VEVENT
436*a1a3b679SAndreas BoehlerUID:foo
437*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
438*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
439*a1a3b679SAndreas BoehlerATTENDEE;SCHEDULE-STATUS=5.2:mailto:user2.sabredav@sabredav.org
440*a1a3b679SAndreas BoehlerEND:VEVENT
441*a1a3b679SAndreas BoehlerEND:VCALENDAR
442*a1a3b679SAndreas BoehlerICS;
443*a1a3b679SAndreas Boehler
444*a1a3b679SAndreas Boehler        $this->assertVObjEquals(
445*a1a3b679SAndreas Boehler            $expected,
446*a1a3b679SAndreas Boehler            $newObject
447*a1a3b679SAndreas Boehler        );
448*a1a3b679SAndreas Boehler
449*a1a3b679SAndreas Boehler    }
450*a1a3b679SAndreas Boehler    function testInviteNoDefaultCalendar() {
451*a1a3b679SAndreas Boehler
452*a1a3b679SAndreas Boehler        $newObject = <<<ICS
453*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
454*a1a3b679SAndreas BoehlerBEGIN:VEVENT
455*a1a3b679SAndreas BoehlerUID:foo
456*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
457*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
458*a1a3b679SAndreas BoehlerATTENDEE:mailto:user2.sabredav@sabredav.org
459*a1a3b679SAndreas BoehlerEND:VEVENT
460*a1a3b679SAndreas BoehlerEND:VCALENDAR
461*a1a3b679SAndreas BoehlerICS;
462*a1a3b679SAndreas Boehler
463*a1a3b679SAndreas Boehler        $this->server->on('propFind', function($propFind) {
464*a1a3b679SAndreas Boehler            $propFind->set('{' . Plugin::NS_CALDAV . '}schedule-default-calendar-URL', null, 403);
465*a1a3b679SAndreas Boehler        });
466*a1a3b679SAndreas Boehler        $this->deliver(null, $newObject);
467*a1a3b679SAndreas Boehler
468*a1a3b679SAndreas Boehler        $expected = <<<ICS
469*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
470*a1a3b679SAndreas BoehlerBEGIN:VEVENT
471*a1a3b679SAndreas BoehlerUID:foo
472*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
473*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
474*a1a3b679SAndreas BoehlerATTENDEE;SCHEDULE-STATUS=5.2:mailto:user2.sabredav@sabredav.org
475*a1a3b679SAndreas BoehlerEND:VEVENT
476*a1a3b679SAndreas BoehlerEND:VCALENDAR
477*a1a3b679SAndreas BoehlerICS;
478*a1a3b679SAndreas Boehler
479*a1a3b679SAndreas Boehler        $this->assertVObjEquals(
480*a1a3b679SAndreas Boehler            $expected,
481*a1a3b679SAndreas Boehler            $newObject
482*a1a3b679SAndreas Boehler        );
483*a1a3b679SAndreas Boehler
484*a1a3b679SAndreas Boehler    }
485*a1a3b679SAndreas Boehler    function testInviteNoScheduler() {
486*a1a3b679SAndreas Boehler
487*a1a3b679SAndreas Boehler        $newObject = <<<ICS
488*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
489*a1a3b679SAndreas BoehlerBEGIN:VEVENT
490*a1a3b679SAndreas BoehlerUID:foo
491*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
492*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
493*a1a3b679SAndreas BoehlerATTENDEE:mailto:user2.sabredav@sabredav.org
494*a1a3b679SAndreas BoehlerEND:VEVENT
495*a1a3b679SAndreas BoehlerEND:VCALENDAR
496*a1a3b679SAndreas BoehlerICS;
497*a1a3b679SAndreas Boehler
498*a1a3b679SAndreas Boehler        $this->server->removeAllListeners('schedule');
499*a1a3b679SAndreas Boehler        $this->deliver(null, $newObject);
500*a1a3b679SAndreas Boehler
501*a1a3b679SAndreas Boehler        $expected = <<<ICS
502*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
503*a1a3b679SAndreas BoehlerBEGIN:VEVENT
504*a1a3b679SAndreas BoehlerUID:foo
505*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
506*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
507*a1a3b679SAndreas BoehlerATTENDEE;SCHEDULE-STATUS=5.2:mailto:user2.sabredav@sabredav.org
508*a1a3b679SAndreas BoehlerEND:VEVENT
509*a1a3b679SAndreas BoehlerEND:VCALENDAR
510*a1a3b679SAndreas BoehlerICS;
511*a1a3b679SAndreas Boehler
512*a1a3b679SAndreas Boehler        $this->assertVObjEquals(
513*a1a3b679SAndreas Boehler            $expected,
514*a1a3b679SAndreas Boehler            $newObject
515*a1a3b679SAndreas Boehler        );
516*a1a3b679SAndreas Boehler
517*a1a3b679SAndreas Boehler    }
518*a1a3b679SAndreas Boehler    function testInviteNoACLPlugin() {
519*a1a3b679SAndreas Boehler
520*a1a3b679SAndreas Boehler        $this->setupACL = false;
521*a1a3b679SAndreas Boehler        parent::setUp();
522*a1a3b679SAndreas Boehler
523*a1a3b679SAndreas Boehler        $newObject = <<<ICS
524*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
525*a1a3b679SAndreas BoehlerBEGIN:VEVENT
526*a1a3b679SAndreas BoehlerUID:foo
527*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
528*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
529*a1a3b679SAndreas BoehlerATTENDEE:mailto:user2.sabredav@sabredav.org
530*a1a3b679SAndreas BoehlerEND:VEVENT
531*a1a3b679SAndreas BoehlerEND:VCALENDAR
532*a1a3b679SAndreas BoehlerICS;
533*a1a3b679SAndreas Boehler
534*a1a3b679SAndreas Boehler        $this->deliver(null, $newObject);
535*a1a3b679SAndreas Boehler
536*a1a3b679SAndreas Boehler        $expected = <<<ICS
537*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
538*a1a3b679SAndreas BoehlerBEGIN:VEVENT
539*a1a3b679SAndreas BoehlerUID:foo
540*a1a3b679SAndreas BoehlerDTSTART:20140811T230000Z
541*a1a3b679SAndreas BoehlerORGANIZER:mailto:user1.sabredav@sabredav.org
542*a1a3b679SAndreas BoehlerATTENDEE;SCHEDULE-STATUS=5.2:mailto:user2.sabredav@sabredav.org
543*a1a3b679SAndreas BoehlerEND:VEVENT
544*a1a3b679SAndreas BoehlerEND:VCALENDAR
545*a1a3b679SAndreas BoehlerICS;
546*a1a3b679SAndreas Boehler
547*a1a3b679SAndreas Boehler        $this->assertVObjEquals(
548*a1a3b679SAndreas Boehler            $expected,
549*a1a3b679SAndreas Boehler            $newObject
550*a1a3b679SAndreas Boehler        );
551*a1a3b679SAndreas Boehler
552*a1a3b679SAndreas Boehler    }
553*a1a3b679SAndreas Boehler
554*a1a3b679SAndreas Boehler    protected $calendarObjectUri;
555*a1a3b679SAndreas Boehler
556*a1a3b679SAndreas Boehler    function deliver($oldObject, &$newObject, $disableScheduling = false) {
557*a1a3b679SAndreas Boehler
558*a1a3b679SAndreas Boehler        $this->server->httpRequest->setUrl($this->calendarObjectUri);
559*a1a3b679SAndreas Boehler        if ($disableScheduling) {
560*a1a3b679SAndreas Boehler            $this->server->httpRequest->setHeader('Schedule-Reply','F');
561*a1a3b679SAndreas Boehler        }
562*a1a3b679SAndreas Boehler
563*a1a3b679SAndreas Boehler        if ($oldObject && $newObject) {
564*a1a3b679SAndreas Boehler            // update
565*a1a3b679SAndreas Boehler            $this->putPath($this->calendarObjectUri, $oldObject);
566*a1a3b679SAndreas Boehler
567*a1a3b679SAndreas Boehler            $stream = fopen('php://memory','r+');
568*a1a3b679SAndreas Boehler            fwrite($stream, $newObject);
569*a1a3b679SAndreas Boehler            rewind($stream);
570*a1a3b679SAndreas Boehler            $modified = false;
571*a1a3b679SAndreas Boehler
572*a1a3b679SAndreas Boehler            $this->server->emit('beforeWriteContent', [
573*a1a3b679SAndreas Boehler                $this->calendarObjectUri,
574*a1a3b679SAndreas Boehler                $this->server->tree->getNodeForPath($this->calendarObjectUri),
575*a1a3b679SAndreas Boehler                &$stream,
576*a1a3b679SAndreas Boehler                &$modified
577*a1a3b679SAndreas Boehler            ]);
578*a1a3b679SAndreas Boehler            if ($modified) {
579*a1a3b679SAndreas Boehler                $newObject = $stream;
580*a1a3b679SAndreas Boehler            }
581*a1a3b679SAndreas Boehler
582*a1a3b679SAndreas Boehler        } elseif ($oldObject && !$newObject) {
583*a1a3b679SAndreas Boehler            // delete
584*a1a3b679SAndreas Boehler            $this->putPath($this->calendarObjectUri, $oldObject);
585*a1a3b679SAndreas Boehler
586*a1a3b679SAndreas Boehler            $this->caldavSchedulePlugin->beforeUnbind(
587*a1a3b679SAndreas Boehler                $this->calendarObjectUri
588*a1a3b679SAndreas Boehler            );
589*a1a3b679SAndreas Boehler        } else {
590*a1a3b679SAndreas Boehler
591*a1a3b679SAndreas Boehler            // create
592*a1a3b679SAndreas Boehler            $stream = fopen('php://memory','r+');
593*a1a3b679SAndreas Boehler            fwrite($stream, $newObject);
594*a1a3b679SAndreas Boehler            rewind($stream);
595*a1a3b679SAndreas Boehler            $modified = false;
596*a1a3b679SAndreas Boehler            $this->server->emit('beforeCreateFile', [
597*a1a3b679SAndreas Boehler                $this->calendarObjectUri,
598*a1a3b679SAndreas Boehler                &$stream,
599*a1a3b679SAndreas Boehler                $this->server->tree->getNodeForPath(dirname($this->calendarObjectUri)),
600*a1a3b679SAndreas Boehler                &$modified
601*a1a3b679SAndreas Boehler            ]);
602*a1a3b679SAndreas Boehler
603*a1a3b679SAndreas Boehler            if ($modified) {
604*a1a3b679SAndreas Boehler                $newObject = $stream;
605*a1a3b679SAndreas Boehler            }
606*a1a3b679SAndreas Boehler        }
607*a1a3b679SAndreas Boehler
608*a1a3b679SAndreas Boehler    }
609*a1a3b679SAndreas Boehler
610*a1a3b679SAndreas Boehler
611*a1a3b679SAndreas Boehler    /**
612*a1a3b679SAndreas Boehler     * Creates or updates a node at the specified path.
613*a1a3b679SAndreas Boehler     *
614*a1a3b679SAndreas Boehler     * This circumvents sabredav's internal server apis, so all events and
615*a1a3b679SAndreas Boehler     * access control is skipped.
616*a1a3b679SAndreas Boehler     *
617*a1a3b679SAndreas Boehler     * @param string $path
618*a1a3b679SAndreas Boehler     * @param string $data
619*a1a3b679SAndreas Boehler     * @return void
620*a1a3b679SAndreas Boehler     */
621*a1a3b679SAndreas Boehler    function putPath($path, $data) {
622*a1a3b679SAndreas Boehler
623*a1a3b679SAndreas Boehler        list($parent, $base) = \Sabre\HTTP\UrlUtil::splitPath($path);
624*a1a3b679SAndreas Boehler        $parentNode = $this->server->tree->getNodeForPath($parent);
625*a1a3b679SAndreas Boehler
626*a1a3b679SAndreas Boehler        /*
627*a1a3b679SAndreas Boehler        if ($parentNode->childExists($base)) {
628*a1a3b679SAndreas Boehler            $childNode = $parentNode->getChild($base);
629*a1a3b679SAndreas Boehler            $childNode->put($data);
630*a1a3b679SAndreas Boehler        } else {*/
631*a1a3b679SAndreas Boehler            $parentNode->createFile($base, $data);
632*a1a3b679SAndreas Boehler        //}
633*a1a3b679SAndreas Boehler
634*a1a3b679SAndreas Boehler    }
635*a1a3b679SAndreas Boehler
636*a1a3b679SAndreas Boehler    function assertItemsInInbox($user, $count) {
637*a1a3b679SAndreas Boehler
638*a1a3b679SAndreas Boehler        $inboxNode = $this->server->tree->getNodeForPath('calendars/'.$user.'/inbox');
639*a1a3b679SAndreas Boehler        $this->assertEquals($count, count($inboxNode->getChildren()));
640*a1a3b679SAndreas Boehler
641*a1a3b679SAndreas Boehler    }
642*a1a3b679SAndreas Boehler
643*a1a3b679SAndreas Boehler    function assertVObjEquals($expected, $actual) {
644*a1a3b679SAndreas Boehler
645*a1a3b679SAndreas Boehler        $format = function($data) {
646*a1a3b679SAndreas Boehler
647*a1a3b679SAndreas Boehler            $data = trim($data, "\r\n");
648*a1a3b679SAndreas Boehler            $data = str_replace("\r","", $data);
649*a1a3b679SAndreas Boehler            // Unfolding lines.
650*a1a3b679SAndreas Boehler            $data = str_replace("\n ", "", $data);
651*a1a3b679SAndreas Boehler
652*a1a3b679SAndreas Boehler            return $data;
653*a1a3b679SAndreas Boehler
654*a1a3b679SAndreas Boehler        };
655*a1a3b679SAndreas Boehler
656*a1a3b679SAndreas Boehler        $this->assertEquals(
657*a1a3b679SAndreas Boehler            $format($expected),
658*a1a3b679SAndreas Boehler            $format($actual)
659*a1a3b679SAndreas Boehler        );
660*a1a3b679SAndreas Boehler
661*a1a3b679SAndreas Boehler    }
662*a1a3b679SAndreas Boehler
663*a1a3b679SAndreas Boehler}
664*a1a3b679SAndreas Boehler
665