ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
SupportedReportSetTest.php
Go to the documentation of this file.
1 <?php
2 
4 
5 use Sabre\DAV;
6 use Sabre\HTTP;
7 
8 require_once 'Sabre/HTTP/ResponseMock.php';
9 require_once 'Sabre/DAV/AbstractServer.php';
10 
12 
13  function sendPROPFIND($body) {
14 
15  $serverVars = [
16  'REQUEST_URI' => '/',
17  'REQUEST_METHOD' => 'PROPFIND',
18  'HTTP_DEPTH' => '0',
19  ];
20 
22  $request->setBody($body);
23 
24  $this->server->httpRequest = ($request);
25  $this->server->exec();
26 
27  }
28 
31  function testNoReports() {
32 
33  $xml = '<?xml version="1.0"?>
34 <d:propfind xmlns:d="DAV:">
35  <d:prop>
36  <d:supported-report-set />
37  </d:prop>
38 </d:propfind>';
39 
40  $this->sendPROPFIND($xml);
41 
42  $this->assertEquals(207, $this->response->status, 'We expected a multi-status response. Full response body: ' . $this->response->body);
43 
44  $body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/", "xmlns\\1=\"urn:DAV\"", $this->response->body);
45  $xml = simplexml_load_string($body);
46  $xml->registerXPathNamespace('d', 'urn:DAV');
47 
48  $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop');
49  $this->assertEquals(1, count($data), 'We expected 1 \'d:prop\' element');
50 
51  $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supported-report-set');
52  $this->assertEquals(1, count($data), 'We expected 1 \'d:supported-report-set\' element');
53 
54  $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:status');
55  $this->assertEquals(1, count($data), 'We expected 1 \'d:status\' element');
56 
57  $this->assertEquals('HTTP/1.1 200 OK', (string)$data[0], 'The status for this property should have been 200');
58 
59  }
60 
64  function testCustomReport() {
65 
66  // Intercepting the report property
67  $this->server->on('propFind', function(DAV\PropFind $propFind, DAV\INode $node) {
68  if ($prop = $propFind->get('{DAV:}supported-report-set')) {
69  $prop->addReport('{http://www.rooftopsolutions.nl/testnamespace}myreport');
70  $prop->addReport('{DAV:}anotherreport');
71  }
72  }, 200);
73 
74  $xml = '<?xml version="1.0"?>
75 <d:propfind xmlns:d="DAV:">
76  <d:prop>
77  <d:supported-report-set />
78  </d:prop>
79 </d:propfind>';
80 
81  $this->sendPROPFIND($xml);
82 
83  $this->assertEquals(207, $this->response->status, 'We expected a multi-status response. Full response body: ' . $this->response->body);
84 
85  $body = preg_replace("/xmlns(:[A-Za-z0-9_])?=(\"|\')DAV:(\"|\')/", "xmlns\\1=\"urn:DAV\"", $this->response->body);
86  $xml = simplexml_load_string($body);
87  $xml->registerXPathNamespace('d', 'urn:DAV');
88  $xml->registerXPathNamespace('x', 'http://www.rooftopsolutions.nl/testnamespace');
89 
90  $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop');
91  $this->assertEquals(1, count($data), 'We expected 1 \'d:prop\' element');
92 
93  $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supported-report-set');
94  $this->assertEquals(1, count($data), 'We expected 1 \'d:supported-report-set\' element');
95 
96  $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supported-report-set/d:supported-report');
97  $this->assertEquals(2, count($data), 'We expected 2 \'d:supported-report\' elements');
98 
99  $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supported-report-set/d:supported-report/d:report');
100  $this->assertEquals(2, count($data), 'We expected 2 \'d:report\' elements');
101 
102  $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supported-report-set/d:supported-report/d:report/x:myreport');
103  $this->assertEquals(1, count($data), 'We expected 1 \'x:myreport\' element. Full body: ' . $this->response->body);
104 
105  $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:prop/d:supported-report-set/d:supported-report/d:report/d:anotherreport');
106  $this->assertEquals(1, count($data), 'We expected 1 \'d:anotherreport\' element. Full body: ' . $this->response->body);
107 
108  $data = $xml->xpath('/d:multistatus/d:response/d:propstat/d:status');
109  $this->assertEquals(1, count($data), 'We expected 1 \'d:status\' element');
110 
111  $this->assertEquals('HTTP/1.1 200 OK', (string)$data[0], 'The status for this property should have been 200');
112 
113  }
114 
115 }
This class holds all the information about a PROPFIND request.
Definition: PropFind.php:11
The INode interface is the base interface, and the parent class of both ICollection and IFile...
Definition: INode.php:12
static createFromServerArray(array $serverArray)
This static method will create a new Request object, based on a PHP $_SERVER array.
Definition: Sapi.php:107
$data
Definition: bench.php:6