1, 'principaluri' => 'principals/user1', 'uri' => 'foo', ] ]; protected $caldavCalendarObjects = [ 1 => [ 'bar.ics' => [ 'uri' => 'bar.ics', 'calendarid' => 1, 'calendardata' => "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n", 'lastmodified' => null ] ], ]; function testGet() { $headers = [ 'Accept' => 'application/calendar+json', ]; $request = new Request('GET', '/calendars/user1/foo/bar.ics', $headers); $response = $this->request($request); $body = $response->getBodyAsString(); $this->assertEquals(200, $response->getStatus(), "Incorrect status code: " . $body); $response = json_decode($body,true); if (json_last_error() !== JSON_ERROR_NONE) { $this->fail('Json decoding error: ' . json_last_error_msg()); } $this->assertEquals( [ 'vcalendar', [], [ [ 'vevent', [], [], ], ], ], $response ); } function testMultiGet() { $xml = << /calendars/user1/foo/bar.ics XML; $headers = []; $request = new Request('REPORT', '/calendars/user1/foo', $headers, $xml); $response = $this->request($request); $this->assertEquals(207, $response->getStatus(), 'Full rsponse: ' . $response->getBodyAsString()); $multiStatus = $this->server->xml->parse( $response->getBodyAsString() ); $responses = $multiStatus->getResponses(); $this->assertEquals(1, count($responses)); $response = $responses[0]->getResponseProperties()[200]["{urn:ietf:params:xml:ns:caldav}calendar-data"]; $jresponse = json_decode($response,true); if (json_last_error()) { $this->fail('Json decoding error: ' . json_last_error_msg() . '. Full response: ' . $response); } $this->assertEquals( [ 'vcalendar', [], [ [ 'vevent', [], [], ], ], ], $jresponse ); } function testCalendarQueryDepth1() { $xml = << XML; $headers = [ 'Depth' => '1', ]; $request = new Request('REPORT', '/calendars/user1/foo', $headers, $xml); $response = $this->request($request); $this->assertEquals(207, $response->getStatus(), "Invalid response code. Full body: " . $response->getBodyAsString()); $multiStatus = $this->server->xml->parse( $response->getBodyAsString() ); $responses = $multiStatus->getResponses(); $this->assertEquals(1, count($responses)); $response = $responses[0]->getResponseProperties()[200]["{urn:ietf:params:xml:ns:caldav}calendar-data"]; $response = json_decode($response,true); if (json_last_error()) { $this->fail('Json decoding error: ' . json_last_error_msg()); } $this->assertEquals( [ 'vcalendar', [], [ [ 'vevent', [], [], ], ], ], $response ); } function testCalendarQueryDepth0() { $xml = << XML; $headers = [ 'Depth' => '0', ]; $request = new Request('REPORT', '/calendars/user1/foo/bar.ics', $headers, $xml); $response = $this->request($request); $this->assertEquals(207, $response->getStatus(), "Invalid response code. Full body: " . $response->getBodyAsString()); $multiStatus = $this->server->xml->parse( $response->getBodyAsString() ); $responses = $multiStatus->getResponses(); $this->assertEquals(1, count($responses)); $response = $responses[0]->getResponseProperties()[200]["{urn:ietf:params:xml:ns:caldav}calendar-data"]; $response = json_decode($response,true); if (json_last_error()) { $this->fail('Json decoding error: ' . json_last_error_msg()); } $this->assertEquals( [ 'vcalendar', [], [ [ 'vevent', [], [], ], ], ], $response ); } function testValidateICalendar() { $input = [ 'vcalendar', [], [ [ 'vevent', [ ['uid', (object)[], 'text', 'foo'], ], [], ], ], ]; $input = json_encode($input); $this->caldavPlugin->beforeWriteContent( 'calendars/user1/foo/bar.ics', $this->server->tree->getNodeForPath('calendars/user1/foo/bar.ics'), $input, $modified ); $this->assertEquals("BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nUID:foo\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n", $input); } }