xref: /plugin/davcal/vendor/sabre/dav/tests/Sabre/DAV/ClientTest.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1*a1a3b679SAndreas Boehler<?php
2*a1a3b679SAndreas Boehler
3*a1a3b679SAndreas Boehlernamespace Sabre\DAV;
4*a1a3b679SAndreas Boehler
5*a1a3b679SAndreas Boehleruse Sabre\HTTP\Request;
6*a1a3b679SAndreas Boehleruse Sabre\HTTP\Response;
7*a1a3b679SAndreas Boehler
8*a1a3b679SAndreas Boehlerrequire_once 'Sabre/DAV/ClientMock.php';
9*a1a3b679SAndreas Boehler
10*a1a3b679SAndreas Boehlerclass ClientTest extends \PHPUnit_Framework_TestCase {
11*a1a3b679SAndreas Boehler
12*a1a3b679SAndreas Boehler    function testConstruct() {
13*a1a3b679SAndreas Boehler
14*a1a3b679SAndreas Boehler        $client = new ClientMock(array(
15*a1a3b679SAndreas Boehler            'baseUri' => '/',
16*a1a3b679SAndreas Boehler        ));
17*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\DAV\ClientMock', $client);
18*a1a3b679SAndreas Boehler
19*a1a3b679SAndreas Boehler    }
20*a1a3b679SAndreas Boehler
21*a1a3b679SAndreas Boehler    /**
22*a1a3b679SAndreas Boehler     * @expectedException InvalidArgumentException
23*a1a3b679SAndreas Boehler     */
24*a1a3b679SAndreas Boehler    function testConstructNoBaseUri() {
25*a1a3b679SAndreas Boehler
26*a1a3b679SAndreas Boehler        $client = new ClientMock(array());
27*a1a3b679SAndreas Boehler
28*a1a3b679SAndreas Boehler    }
29*a1a3b679SAndreas Boehler
30*a1a3b679SAndreas Boehler    function testAuth() {
31*a1a3b679SAndreas Boehler
32*a1a3b679SAndreas Boehler        $client = new ClientMock([
33*a1a3b679SAndreas Boehler            'baseUri' => '/',
34*a1a3b679SAndreas Boehler            'userName' => 'foo',
35*a1a3b679SAndreas Boehler            'password' => 'bar',
36*a1a3b679SAndreas Boehler        ]);
37*a1a3b679SAndreas Boehler
38*a1a3b679SAndreas Boehler        $this->assertEquals("foo:bar", $client->curlSettings[CURLOPT_USERPWD]);
39*a1a3b679SAndreas Boehler        $this->assertEquals(CURLAUTH_BASIC | CURLAUTH_DIGEST, $client->curlSettings[CURLOPT_HTTPAUTH]);
40*a1a3b679SAndreas Boehler
41*a1a3b679SAndreas Boehler    }
42*a1a3b679SAndreas Boehler
43*a1a3b679SAndreas Boehler    function testBasicAuth() {
44*a1a3b679SAndreas Boehler
45*a1a3b679SAndreas Boehler        $client = new ClientMock([
46*a1a3b679SAndreas Boehler            'baseUri' => '/',
47*a1a3b679SAndreas Boehler            'userName' => 'foo',
48*a1a3b679SAndreas Boehler            'password' => 'bar',
49*a1a3b679SAndreas Boehler            'authType' => Client::AUTH_BASIC
50*a1a3b679SAndreas Boehler        ]);
51*a1a3b679SAndreas Boehler
52*a1a3b679SAndreas Boehler        $this->assertEquals("foo:bar", $client->curlSettings[CURLOPT_USERPWD]);
53*a1a3b679SAndreas Boehler        $this->assertEquals(CURLAUTH_BASIC, $client->curlSettings[CURLOPT_HTTPAUTH]);
54*a1a3b679SAndreas Boehler
55*a1a3b679SAndreas Boehler    }
56*a1a3b679SAndreas Boehler
57*a1a3b679SAndreas Boehler    function testDigestAuth() {
58*a1a3b679SAndreas Boehler
59*a1a3b679SAndreas Boehler        $client = new ClientMock([
60*a1a3b679SAndreas Boehler            'baseUri' => '/',
61*a1a3b679SAndreas Boehler            'userName' => 'foo',
62*a1a3b679SAndreas Boehler            'password' => 'bar',
63*a1a3b679SAndreas Boehler            'authType' => Client::AUTH_DIGEST
64*a1a3b679SAndreas Boehler        ]);
65*a1a3b679SAndreas Boehler
66*a1a3b679SAndreas Boehler        $this->assertEquals("foo:bar", $client->curlSettings[CURLOPT_USERPWD]);
67*a1a3b679SAndreas Boehler        $this->assertEquals(CURLAUTH_DIGEST, $client->curlSettings[CURLOPT_HTTPAUTH]);
68*a1a3b679SAndreas Boehler
69*a1a3b679SAndreas Boehler    }
70*a1a3b679SAndreas Boehler
71*a1a3b679SAndreas Boehler    function testNTLMAuth() {
72*a1a3b679SAndreas Boehler
73*a1a3b679SAndreas Boehler        $client = new ClientMock([
74*a1a3b679SAndreas Boehler            'baseUri' => '/',
75*a1a3b679SAndreas Boehler            'userName' => 'foo',
76*a1a3b679SAndreas Boehler            'password' => 'bar',
77*a1a3b679SAndreas Boehler            'authType' => Client::AUTH_NTLM
78*a1a3b679SAndreas Boehler        ]);
79*a1a3b679SAndreas Boehler
80*a1a3b679SAndreas Boehler        $this->assertEquals("foo:bar", $client->curlSettings[CURLOPT_USERPWD]);
81*a1a3b679SAndreas Boehler        $this->assertEquals(CURLAUTH_NTLM, $client->curlSettings[CURLOPT_HTTPAUTH]);
82*a1a3b679SAndreas Boehler
83*a1a3b679SAndreas Boehler    }
84*a1a3b679SAndreas Boehler
85*a1a3b679SAndreas Boehler    function testProxy() {
86*a1a3b679SAndreas Boehler
87*a1a3b679SAndreas Boehler        $client = new ClientMock([
88*a1a3b679SAndreas Boehler            'baseUri' => '/',
89*a1a3b679SAndreas Boehler            'proxy' => 'localhost:8888',
90*a1a3b679SAndreas Boehler        ]);
91*a1a3b679SAndreas Boehler
92*a1a3b679SAndreas Boehler        $this->assertEquals("localhost:8888", $client->curlSettings[CURLOPT_PROXY]);
93*a1a3b679SAndreas Boehler
94*a1a3b679SAndreas Boehler    }
95*a1a3b679SAndreas Boehler
96*a1a3b679SAndreas Boehler    function testEncoding() {
97*a1a3b679SAndreas Boehler
98*a1a3b679SAndreas Boehler        $client = new ClientMock([
99*a1a3b679SAndreas Boehler            'baseUri' => '/',
100*a1a3b679SAndreas Boehler            'encoding' => Client::ENCODING_IDENTITY | Client::ENCODING_GZIP | Client::ENCODING_DEFLATE,
101*a1a3b679SAndreas Boehler        ]);
102*a1a3b679SAndreas Boehler
103*a1a3b679SAndreas Boehler        $this->assertEquals("identity,deflate,gzip", $client->curlSettings[CURLOPT_ENCODING]);
104*a1a3b679SAndreas Boehler
105*a1a3b679SAndreas Boehler    }
106*a1a3b679SAndreas Boehler
107*a1a3b679SAndreas Boehler    function testPropFind() {
108*a1a3b679SAndreas Boehler
109*a1a3b679SAndreas Boehler        $client = new ClientMock([
110*a1a3b679SAndreas Boehler            'baseUri' => '/',
111*a1a3b679SAndreas Boehler        ]);
112*a1a3b679SAndreas Boehler
113*a1a3b679SAndreas Boehler        $responseBody = <<<XML
114*a1a3b679SAndreas Boehler<?xml version="1.0"?>
115*a1a3b679SAndreas Boehler<multistatus xmlns="DAV:">
116*a1a3b679SAndreas Boehler<response>
117*a1a3b679SAndreas Boehler  <href>/foo</href>
118*a1a3b679SAndreas Boehler  <propstat>
119*a1a3b679SAndreas Boehler    <prop>
120*a1a3b679SAndreas Boehler      <displayname>bar</displayname>
121*a1a3b679SAndreas Boehler    </prop>
122*a1a3b679SAndreas Boehler    <status>HTTP/1.1 200 OK</status>
123*a1a3b679SAndreas Boehler  </propstat>
124*a1a3b679SAndreas Boehler</response>
125*a1a3b679SAndreas Boehler</multistatus>
126*a1a3b679SAndreas BoehlerXML;
127*a1a3b679SAndreas Boehler
128*a1a3b679SAndreas Boehler        $client->response = new Response(207, [], $responseBody);
129*a1a3b679SAndreas Boehler        $result = $client->propfind('foo', ['{DAV:}displayname', '{urn:zim}gir']);
130*a1a3b679SAndreas Boehler
131*a1a3b679SAndreas Boehler        $this->assertEquals(['{DAV:}displayname' => 'bar'], $result);
132*a1a3b679SAndreas Boehler
133*a1a3b679SAndreas Boehler        $request = $client->request;
134*a1a3b679SAndreas Boehler        $this->assertEquals('PROPFIND', $request->getMethod());
135*a1a3b679SAndreas Boehler        $this->assertEquals('/foo', $request->getUrl());
136*a1a3b679SAndreas Boehler        $this->assertEquals([
137*a1a3b679SAndreas Boehler            'Depth' => ['0'],
138*a1a3b679SAndreas Boehler            'Content-Type' => ['application/xml'],
139*a1a3b679SAndreas Boehler        ], $request->getHeaders());
140*a1a3b679SAndreas Boehler
141*a1a3b679SAndreas Boehler    }
142*a1a3b679SAndreas Boehler
143*a1a3b679SAndreas Boehler    /**
144*a1a3b679SAndreas Boehler     * @expectedException \Sabre\DAV\Exception
145*a1a3b679SAndreas Boehler     */
146*a1a3b679SAndreas Boehler    function testPropFindError() {
147*a1a3b679SAndreas Boehler
148*a1a3b679SAndreas Boehler        $client = new ClientMock([
149*a1a3b679SAndreas Boehler            'baseUri' => '/',
150*a1a3b679SAndreas Boehler        ]);
151*a1a3b679SAndreas Boehler
152*a1a3b679SAndreas Boehler        $client->response = new Response(405, []);
153*a1a3b679SAndreas Boehler        $client->propfind('foo', ['{DAV:}displayname', '{urn:zim}gir']);
154*a1a3b679SAndreas Boehler
155*a1a3b679SAndreas Boehler    }
156*a1a3b679SAndreas Boehler
157*a1a3b679SAndreas Boehler    function testPropFindDepth1() {
158*a1a3b679SAndreas Boehler
159*a1a3b679SAndreas Boehler        $client = new ClientMock([
160*a1a3b679SAndreas Boehler            'baseUri' => '/',
161*a1a3b679SAndreas Boehler        ]);
162*a1a3b679SAndreas Boehler
163*a1a3b679SAndreas Boehler        $responseBody = <<<XML
164*a1a3b679SAndreas Boehler<?xml version="1.0"?>
165*a1a3b679SAndreas Boehler<multistatus xmlns="DAV:">
166*a1a3b679SAndreas Boehler<response>
167*a1a3b679SAndreas Boehler  <href>/foo</href>
168*a1a3b679SAndreas Boehler  <propstat>
169*a1a3b679SAndreas Boehler    <prop>
170*a1a3b679SAndreas Boehler      <displayname>bar</displayname>
171*a1a3b679SAndreas Boehler    </prop>
172*a1a3b679SAndreas Boehler    <status>HTTP/1.1 200 OK</status>
173*a1a3b679SAndreas Boehler  </propstat>
174*a1a3b679SAndreas Boehler</response>
175*a1a3b679SAndreas Boehler</multistatus>
176*a1a3b679SAndreas BoehlerXML;
177*a1a3b679SAndreas Boehler
178*a1a3b679SAndreas Boehler        $client->response = new Response(207, [], $responseBody);
179*a1a3b679SAndreas Boehler        $result = $client->propfind('foo', ['{DAV:}displayname', '{urn:zim}gir'], 1);
180*a1a3b679SAndreas Boehler
181*a1a3b679SAndreas Boehler        $this->assertEquals([
182*a1a3b679SAndreas Boehler            '/foo' => [
183*a1a3b679SAndreas Boehler            '{DAV:}displayname' => 'bar'
184*a1a3b679SAndreas Boehler            ],
185*a1a3b679SAndreas Boehler        ], $result);
186*a1a3b679SAndreas Boehler
187*a1a3b679SAndreas Boehler        $request = $client->request;
188*a1a3b679SAndreas Boehler        $this->assertEquals('PROPFIND', $request->getMethod());
189*a1a3b679SAndreas Boehler        $this->assertEquals('/foo', $request->getUrl());
190*a1a3b679SAndreas Boehler        $this->assertEquals([
191*a1a3b679SAndreas Boehler            'Depth' => ['1'],
192*a1a3b679SAndreas Boehler            'Content-Type' => ['application/xml'],
193*a1a3b679SAndreas Boehler        ], $request->getHeaders());
194*a1a3b679SAndreas Boehler
195*a1a3b679SAndreas Boehler    }
196*a1a3b679SAndreas Boehler
197*a1a3b679SAndreas Boehler    function testPropPatch() {
198*a1a3b679SAndreas Boehler
199*a1a3b679SAndreas Boehler        $client = new ClientMock([
200*a1a3b679SAndreas Boehler            'baseUri' => '/',
201*a1a3b679SAndreas Boehler        ]);
202*a1a3b679SAndreas Boehler
203*a1a3b679SAndreas Boehler        $responseBody = <<<XML
204*a1a3b679SAndreas Boehler<?xml version="1.0"?>
205*a1a3b679SAndreas Boehler<multistatus xmlns="DAV:">
206*a1a3b679SAndreas Boehler<response>
207*a1a3b679SAndreas Boehler  <href>/foo</href>
208*a1a3b679SAndreas Boehler  <propstat>
209*a1a3b679SAndreas Boehler    <prop>
210*a1a3b679SAndreas Boehler      <displayname>bar</displayname>
211*a1a3b679SAndreas Boehler    </prop>
212*a1a3b679SAndreas Boehler    <status>HTTP/1.1 200 OK</status>
213*a1a3b679SAndreas Boehler  </propstat>
214*a1a3b679SAndreas Boehler</response>
215*a1a3b679SAndreas Boehler</multistatus>
216*a1a3b679SAndreas BoehlerXML;
217*a1a3b679SAndreas Boehler
218*a1a3b679SAndreas Boehler        $client->response = new Response(207, [], $responseBody);
219*a1a3b679SAndreas Boehler        $result = $client->propPatch('foo', ['{DAV:}displayname' => 'hi', '{urn:zim}gir' => null], 1);
220*a1a3b679SAndreas Boehler        $request = $client->request;
221*a1a3b679SAndreas Boehler        $this->assertEquals('PROPPATCH', $request->getMethod());
222*a1a3b679SAndreas Boehler        $this->assertEquals('/foo', $request->getUrl());
223*a1a3b679SAndreas Boehler        $this->assertEquals([
224*a1a3b679SAndreas Boehler            'Content-Type' => ['application/xml'],
225*a1a3b679SAndreas Boehler        ], $request->getHeaders());
226*a1a3b679SAndreas Boehler
227*a1a3b679SAndreas Boehler    }
228*a1a3b679SAndreas Boehler
229*a1a3b679SAndreas Boehler    function testOPTIONS() {
230*a1a3b679SAndreas Boehler
231*a1a3b679SAndreas Boehler        $client = new ClientMock([
232*a1a3b679SAndreas Boehler            'baseUri' => '/',
233*a1a3b679SAndreas Boehler        ]);
234*a1a3b679SAndreas Boehler
235*a1a3b679SAndreas Boehler        $client->response = new Response(207, [
236*a1a3b679SAndreas Boehler            'DAV' => 'calendar-access, extended-mkcol',
237*a1a3b679SAndreas Boehler        ]);
238*a1a3b679SAndreas Boehler        $result = $client->options();
239*a1a3b679SAndreas Boehler
240*a1a3b679SAndreas Boehler        $this->assertEquals(
241*a1a3b679SAndreas Boehler            ['calendar-access', 'extended-mkcol'],
242*a1a3b679SAndreas Boehler            $result
243*a1a3b679SAndreas Boehler        );
244*a1a3b679SAndreas Boehler
245*a1a3b679SAndreas Boehler        $request = $client->request;
246*a1a3b679SAndreas Boehler        $this->assertEquals('OPTIONS', $request->getMethod());
247*a1a3b679SAndreas Boehler        $this->assertEquals('/', $request->getUrl());
248*a1a3b679SAndreas Boehler        $this->assertEquals([
249*a1a3b679SAndreas Boehler        ], $request->getHeaders());
250*a1a3b679SAndreas Boehler
251*a1a3b679SAndreas Boehler    }
252*a1a3b679SAndreas Boehler}
253