1<?php
2
3namespace Sabre\CalDAV\Subscriptions;
4
5use Sabre\CalDAV;
6use Sabre\HTTP\Request;
7
8class CreateSubscriptionTest extends \Sabre\DAVServerTest {
9
10    protected $setupCalDAV = true;
11    protected $setupCalDAVSubscriptions = true;
12
13    /**
14     * OS X 10.7 - 10.9.1
15     */
16    function testMKCOL() {
17
18        $body = <<<XML
19<A:mkcol xmlns:A="DAV:">
20    <A:set>
21        <A:prop>
22            <B:subscribed-strip-attachments xmlns:B="http://calendarserver.org/ns/" />
23            <B:subscribed-strip-todos xmlns:B="http://calendarserver.org/ns/" />
24            <A:resourcetype>
25                <A:collection />
26                <B:subscribed xmlns:B="http://calendarserver.org/ns/" />
27            </A:resourcetype>
28            <E:calendar-color xmlns:E="http://apple.com/ns/ical/">#1C4587FF</E:calendar-color>
29            <A:displayname>Jewish holidays</A:displayname>
30            <C:calendar-description xmlns:C="urn:ietf:params:xml:ns:caldav">Foo</C:calendar-description>
31            <E:calendar-order xmlns:E="http://apple.com/ns/ical/">19</E:calendar-order>
32            <B:source xmlns:B="http://calendarserver.org/ns/">
33                <A:href>webcal://www.example.org/</A:href>
34            </B:source>
35            <E:refreshrate xmlns:E="http://apple.com/ns/ical/">P1W</E:refreshrate>
36            <B:subscribed-strip-alarms xmlns:B="http://calendarserver.org/ns/" />
37        </A:prop>
38    </A:set>
39</A:mkcol>
40XML;
41
42        $headers = [
43            'Content-Type' => 'application/xml',
44        ];
45        $request = new Request('MKCOL', '/calendars/user1/subscription1', $headers, $body);
46
47        $response = $this->request($request);
48        $this->assertEquals(201, $response->getStatus());
49        $subscriptions = $this->caldavBackend->getSubscriptionsForUser('principals/user1');
50        $this->assertSubscription($subscriptions[0]);
51
52
53    }
54    /**
55     * OS X 10.9.2 and up
56     */
57    function testMKCALENDAR() {
58
59        $body = <<<XML
60<B:mkcalendar xmlns:B="urn:ietf:params:xml:ns:caldav">
61    <A:set xmlns:A="DAV:">
62        <A:prop>
63            <B:supported-calendar-component-set>
64                <B:comp name="VEVENT" />
65            </B:supported-calendar-component-set>
66            <C:subscribed-strip-alarms xmlns:C="http://calendarserver.org/ns/" />
67            <C:subscribed-strip-attachments xmlns:C="http://calendarserver.org/ns/" />
68            <A:resourcetype>
69                <A:collection />
70                <C:subscribed xmlns:C="http://calendarserver.org/ns/" />
71            </A:resourcetype>
72            <D:refreshrate xmlns:D="http://apple.com/ns/ical/">P1W</D:refreshrate>
73            <C:source xmlns:C="http://calendarserver.org/ns/">
74                <A:href>webcal://www.example.org/</A:href>
75            </C:source>
76            <D:calendar-color xmlns:D="http://apple.com/ns/ical/">#1C4587FF</D:calendar-color>
77            <D:calendar-order xmlns:D="http://apple.com/ns/ical/">19</D:calendar-order>
78            <B:calendar-description>Foo</B:calendar-description>
79            <C:subscribed-strip-todos xmlns:C="http://calendarserver.org/ns/" />
80            <A:displayname>Jewish holidays</A:displayname>
81        </A:prop>
82    </A:set>
83</B:mkcalendar>
84XML;
85
86        $headers = [
87            'Content-Type' => 'application/xml',
88        ];
89        $request = new Request('MKCALENDAR', '/calendars/user1/subscription1', $headers, $body);
90
91        $response = $this->request($request);
92        $this->assertEquals(201, $response->getStatus());
93        $subscriptions = $this->caldavBackend->getSubscriptionsForUser('principals/user1');
94        $this->assertSubscription($subscriptions[0]);
95
96        // Also seeing if it works when calling this as a PROPFIND.
97        $this->assertEquals([
98                '{http://calendarserver.org/ns/}subscribed-strip-alarms' => '',
99            ],
100            $this->server->getProperties('calendars/user1/subscription1', ['{http://calendarserver.org/ns/}subscribed-strip-alarms'])
101        );
102
103
104    }
105
106    function assertSubscription($subscription) {
107
108        $this->assertEquals('', $subscription['{http://calendarserver.org/ns/}subscribed-strip-attachments']);
109        $this->assertEquals('', $subscription['{http://calendarserver.org/ns/}subscribed-strip-todos']);
110        $this->assertEquals('#1C4587FF', $subscription['{http://apple.com/ns/ical/}calendar-color']);
111        $this->assertEquals('Jewish holidays', $subscription['{DAV:}displayname']);
112        $this->assertEquals('Foo', $subscription['{urn:ietf:params:xml:ns:caldav}calendar-description']);
113        $this->assertEquals('19', $subscription['{http://apple.com/ns/ical/}calendar-order']);
114        $this->assertEquals('webcal://www.example.org/', $subscription['{http://calendarserver.org/ns/}source']->getHref());
115        $this->assertEquals('P1W', $subscription['{http://apple.com/ns/ical/}refreshrate']);
116        $this->assertEquals('subscription1', $subscription['uri']);
117        $this->assertEquals('principals/user1', $subscription['principaluri']);
118        $this->assertEquals('webcal://www.example.org/', $subscription['source']);
119        $this->assertEquals(['principals/user1', 1], $subscription['id']);
120
121    }
122
123}
124