diff options
Diffstat (limited to 'build/integration/features/bootstrap/CardDavContext.php')
-rw-r--r-- | build/integration/features/bootstrap/CardDavContext.php | 226 |
1 files changed, 190 insertions, 36 deletions
diff --git a/build/integration/features/bootstrap/CardDavContext.php b/build/integration/features/bootstrap/CardDavContext.php index d317ba5193f..733c98dca02 100644 --- a/build/integration/features/bootstrap/CardDavContext.php +++ b/build/integration/features/bootstrap/CardDavContext.php @@ -1,31 +1,18 @@ <?php + /** - * @author Lukas Reschke <lukas@owncloud.com> - * - * @copyright Copyright (c) 2016, ownCloud, Inc. - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - require __DIR__ . '/../../vendor/autoload.php'; use GuzzleHttp\Client; +use GuzzleHttp\Exception\GuzzleException; use GuzzleHttp\Message\ResponseInterface; class CardDavContext implements \Behat\Behat\Context\Context { - /** @var string */ + /** @var string */ private $baseUrl; /** @var Client */ private $client; @@ -48,7 +35,7 @@ class CardDavContext implements \Behat\Behat\Context\Context { } /** @BeforeScenario */ - public function tearUpScenario() { + public function setUpScenario() { $this->client = new Client(); $this->responseXml = ''; } @@ -67,23 +54,25 @@ class CardDavContext implements \Behat\Behat\Context\Context { ], ] ); - } catch (\GuzzleHttp\Exception\ClientException $e) {} + } catch (\GuzzleHttp\Exception\ClientException $e) { + } } - /** - * @When :user requests addressbook :addressBook with statuscode :statusCode + * @When :user requests addressbook :addressBook with statuscode :statusCode on the endpoint :endpoint * @param string $user * @param string $addressBook * @param int $statusCode + * @param string $endpoint * @throws \Exception */ - public function requestsAddressbookWithStatuscode($user, $addressBook, $statusCode) { - $davUrl = $this->baseUrl . '/remote.php/dav/addressbooks/users/'.$addressBook; + public function requestsAddressbookWithStatuscodeOnTheEndpoint($user, $addressBook, $statusCode, $endpoint) { + $davUrl = $this->baseUrl . $endpoint . $addressBook; $password = ($user === 'admin') ? 'admin' : '123456'; try { - $this->response = $this->client->get( + $this->response = $this->client->request( + 'PROPFIND', $davUrl, [ 'auth' => [ @@ -96,7 +85,7 @@ class CardDavContext implements \Behat\Behat\Context\Context { $this->response = $e->getResponse(); } - if((int)$statusCode !== $this->response->getStatusCode()) { + if ((int)$statusCode !== $this->response->getStatusCode()) { throw new \Exception( sprintf( 'Expected %s got %s', @@ -107,7 +96,7 @@ class CardDavContext implements \Behat\Behat\Context\Context { } $body = $this->response->getBody()->getContents(); - if(substr($body, 0, 1) === '<') { + if (substr($body, 0, 1) === '<') { $reader = new Sabre\Xml\Reader(); $reader->xml($body); $this->responseXml = $reader->parse(); @@ -122,10 +111,10 @@ class CardDavContext implements \Behat\Behat\Context\Context { * @throws \Exception */ public function createsAnAddressbookNamedWithStatuscode($user, $addressBook, $statusCode) { - $davUrl = $this->baseUrl . '/remote.php/dav/addressbooks/users/'.$user.'/'.$addressBook; + $davUrl = $this->baseUrl . '/remote.php/dav/addressbooks/users/' . $user . '/' . $addressBook; $password = ($user === 'admin') ? 'admin' : '123456'; - $request = $this->client->createRequest( + $this->response = $this->client->request( 'MKCOL', $davUrl, [ @@ -135,7 +124,7 @@ class CardDavContext implements \Behat\Behat\Context\Context { <d:prop> <d:resourcetype> <d:collection />,<card:addressbook /> - </d:resourcetype>,<d:displayname>'.$addressBook.'</d:displayname> + </d:resourcetype>,<d:displayname>' . $addressBook . '</d:displayname> </d:prop> </d:set> </d:mkcol>', @@ -149,9 +138,7 @@ class CardDavContext implements \Behat\Behat\Context\Context { ] ); - $this->response = $this->client->send($request); - - if($this->response->getStatusCode() !== (int)$statusCode) { + if ($this->response->getStatusCode() !== (int)$statusCode) { throw new \Exception( sprintf( 'Expected %s got %s', @@ -170,7 +157,7 @@ class CardDavContext implements \Behat\Behat\Context\Context { public function theCarddavExceptionIs($message) { $result = $this->responseXml['value'][0]['value']; - if($message !== $result) { + if ($message !== $result) { throw new \Exception( sprintf( 'Expected %s got %s', @@ -189,7 +176,7 @@ class CardDavContext implements \Behat\Behat\Context\Context { public function theCarddavErrorMessageIs($message) { $result = $this->responseXml['value'][1]['value']; - if($message !== $result) { + if ($message !== $result) { throw new \Exception( sprintf( 'Expected %s got %s', @@ -200,4 +187,171 @@ class CardDavContext implements \Behat\Behat\Context\Context { } } + /** + * @Given :user uploads the contact :fileName to the addressbook :addressbook + */ + public function uploadsTheContactToTheAddressbook($user, $fileName, $addressBook) { + $davUrl = $this->baseUrl . '/remote.php/dav/addressbooks/users/' . $user . '/' . $addressBook . '/' . $fileName; + $password = ($user === 'admin') ? 'admin' : '123456'; + + $this->response = $this->client->request( + 'PUT', + $davUrl, + [ + 'body' => file_get_contents(__DIR__ . '/../../data/' . $fileName), + 'auth' => [ + $user, + $password, + ], + 'headers' => [ + 'Content-Type' => 'application/xml;charset=UTF-8', + ], + ] + ); + + if ($this->response->getStatusCode() !== 201) { + throw new \Exception( + sprintf( + 'Expected %s got %s', + 201, + $this->response->getStatusCode() + ) + ); + } + } + + /** + * @When Exporting the picture of contact :fileName from addressbook :addressBook as user :user + */ + public function whenExportingThePictureOfContactFromAddressbookAsUser($fileName, $addressBook, $user) { + $davUrl = $this->baseUrl . '/remote.php/dav/addressbooks/users/' . $user . '/' . $addressBook . '/' . $fileName . '?photo=true'; + $password = ($user === 'admin') ? 'admin' : '123456'; + + try { + $this->response = $this->client->request( + 'GET', + $davUrl, + [ + 'auth' => [ + $user, + $password, + ], + 'headers' => [ + 'Content-Type' => 'application/xml;charset=UTF-8', + ], + ] + ); + } catch (\GuzzleHttp\Exception\ClientException $e) { + $this->response = $e->getResponse(); + } + } + + /** + * @When Downloading the contact :fileName from addressbook :addressBook as user :user + */ + public function whenDownloadingTheContactFromAddressbookAsUser($fileName, $addressBook, $user) { + $davUrl = $this->baseUrl . '/remote.php/dav/addressbooks/users/' . $user . '/' . $addressBook . '/' . $fileName; + $password = ($user === 'admin') ? 'admin' : '123456'; + + try { + $this->response = $this->client->request( + 'GET', + $davUrl, + [ + 'auth' => [ + $user, + $password, + ], + 'headers' => [ + 'Content-Type' => 'application/xml;charset=UTF-8', + ], + ] + ); + } catch (\GuzzleHttp\Exception\ClientException $e) { + $this->response = $e->getResponse(); + } + } + + /** + * @Then The following HTTP headers should be set + * @param \Behat\Gherkin\Node\TableNode $table + * @throws \Exception + */ + public function theFollowingHttpHeadersShouldBeSet(\Behat\Gherkin\Node\TableNode $table) { + foreach ($table->getTable() as $header) { + $headerName = $header[0]; + $expectedHeaderValue = $header[1]; + $returnedHeader = $this->response->getHeader($headerName)[0]; + if ($returnedHeader !== $expectedHeaderValue) { + throw new \Exception( + sprintf( + "Expected value '%s' for header '%s', got '%s'", + $expectedHeaderValue, + $headerName, + $returnedHeader + ) + ); + } + } + } + + /** + * @When :user sends a create addressbook request to :addressbook on the endpoint :endpoint + */ + public function sendsCreateAddressbookRequest(string $user, string $addressbook, string $endpoint) { + $davUrl = $this->baseUrl . $endpoint . $addressbook; + $password = ($user === 'admin') ? 'admin' : '123456'; + + try { + $this->response = $this->client->request( + 'MKCOL', + $davUrl, + [ + 'body' => '<d:mkcol xmlns:card="urn:ietf:params:xml:ns:carddav" + xmlns:d="DAV:"> + <d:set> + <d:prop> + <d:resourcetype> + <d:collection />,<card:addressbook /> + </d:resourcetype>,<d:displayname>' . $addressbook . '</d:displayname> + </d:prop> + </d:set> + </d:mkcol>', + 'auth' => [ + $user, + $password, + ], + 'headers' => [ + 'Content-Type' => 'application/xml;charset=UTF-8', + ], + ] + ); + } catch (GuzzleException $e) { + $this->response = $e->getResponse(); + } + } + + /** + * @Then The CardDAV HTTP status code should be :code + * @param int $code + * @throws \Exception + */ + public function theCarddavHttpStatusCodeShouldBe($code) { + if ((int)$code !== $this->response->getStatusCode()) { + throw new \Exception( + sprintf( + 'Expected %s got %s', + (int)$code, + $this->response->getStatusCode() + ) + ); + } + + $body = $this->response->getBody()->getContents(); + if ($body && substr($body, 0, 1) === '<') { + $reader = new Sabre\Xml\Reader(); + $reader->xml($body); + $this->responseXml = $reader->parse(); + } + } } |