diff --git a/build/integration/features/bootstrap/FeatureContext.php b/build/integration/features/bootstrap/FeatureContext.php index 70e73b66a71f0c47496324f90012303fa7f2b7cc..df4b853eddee8137bd6ace2ac188732a5fe850a6 100644 --- a/build/integration/features/bootstrap/FeatureContext.php +++ b/build/integration/features/bootstrap/FeatureContext.php @@ -23,6 +23,9 @@ class FeatureContext extends BehatContext { /** @var int */ private $apiVersion = 1; + /** @var SimpleXMLElement */ + private $lastShareData = null; + /** * Initializes context. * Every scenario gets it's own context object. @@ -197,16 +200,27 @@ class FeatureContext extends BehatContext { /** * @Given /^user "([^"]*)" exists$/ */ - public function userExists($user) { + public function assureUserExists($user) { + try { + $this->userExists($user); + } catch (\GuzzleHttp\Exception\ClientException $ex) { + $previous_user = $this->currentUser; + $this->currentUser = "admin"; + $this->creatingTheUser($user); + $this->currentUser = $previous_user; + } + $this->userExists($user); + PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); + + } + + public function userExists($user){ $fullUrl = $this->baseUrl . "v2.php/cloud/users/$user"; $client = new Client(); $options = []; - if ($this->currentUser === 'admin') { - $options['auth'] = $this->adminUser; - } + $options['auth'] = $this->adminUser; $this->response = $client->get($fullUrl, $options); - PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); } /** @@ -284,14 +298,23 @@ class FeatureContext extends BehatContext { PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); } - /** * @Given /^user "([^"]*)" does not exist$/ */ public function userDoesNotExist($user) { try { $this->userExists($user); - PHPUnit_Framework_Assert::fail('The user "' . $user . '" exists'); + } catch (\GuzzleHttp\Exception\ClientException $ex) { + $this->response = $ex->getResponse(); + PHPUnit_Framework_Assert::assertEquals(404, $ex->getResponse()->getStatusCode()); + return; + } + $previous_user = $this->currentUser; + $this->currentUser = "admin"; + $this->deletingTheUser($user); + $this->currentUser = $previous_user; + try { + $this->userExists($user); } catch (\GuzzleHttp\Exception\ClientException $ex) { $this->response = $ex->getResponse(); PHPUnit_Framework_Assert::assertEquals(404, $ex->getResponse()->getStatusCode()); @@ -332,56 +355,140 @@ class FeatureContext extends BehatContext { PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); } - /** - * @When /^creating the user "([^"]*)r"$/ - */ + public function createUser($user) { + $this->creatingTheUser($user); + $this->userExists($user); + } + + public function deleteUser($user) { + $this->deletingTheUser($user); + $this->userDoesNotExist($user); + } + + public function createGroup($group) { + $this->creatingTheGroup($group); + $this->groupExists($group); + } + + public function deleteGroup($group) { + $this->deletingTheGroup($group); + $this->groupDoesNotExist($group); + } + public function creatingTheUser($user) { - $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/users/$user"; + $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/users"; $client = new Client(); $options = []; if ($this->currentUser === 'admin') { $options['auth'] = $this->adminUser; } - $this->response = $client->post($fullUrl, [ - 'form_params' => [ - 'userid' => $user, - 'password' => '123456' - ] - ]); + $options['body'] = [ + 'userid' => $user, + 'password' => '123456' + ]; + + $this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); } /** - * @When /^creating the group "([^"]*)r"$/ + * @When /^creating the group "([^"]*)"$/ */ public function creatingTheGroup($group) { - $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/groups/addgroup"; + $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/groups"; $client = new Client(); $options = []; if ($this->currentUser === 'admin') { $options['auth'] = $this->adminUser; } - $this->response = $client->post($fullUrl, [ - 'form_params' => [ - 'groupid' => $user - ] - ]); + $options['body'] = [ + 'groupid' => $group, + ]; + + $this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); } /** - * @Given /^group "([^"]*)" exists$/ + * @When /^Deleting the user "([^"]*)"$/ */ - public function groupExists($group) { - $fullUrl = $this->baseUrl . "v2.php/cloud/groups/$group"; + public function deletingTheUser($user) { + $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/users/$user"; $client = new Client(); $options = []; if ($this->currentUser === 'admin') { $options['auth'] = $this->adminUser; } + $this->response = $client->send($client->createRequest("DELETE", $fullUrl, $options)); + } + + /** + * @When /^Deleting the group "([^"]*)"$/ + */ + public function deletingTheGroup($group) { + $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/groups/$group"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } + + $this->response = $client->send($client->createRequest("DELETE", $fullUrl, $options)); + } + + /** + * @Given /^Add user "([^"]*)" to the group "([^"]*)"$/ + */ + public function addUserToGroup($user, $group) { + $this->userExists($user); + $this->groupExists($group); + $this->addingUserToGroup($user, $group); + + } + + /** + * @When /^User "([^"]*)" is added to the group "([^"]*)"$/ + */ + public function addingUserToGroup($user, $group) { + $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/users/$user/groups"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } + + $options['body'] = [ + 'groupid' => $group, + ]; + + $this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); + } + + + public function groupExists($group) { + $fullUrl = $this->baseUrl . "v2.php/cloud/groups/$group"; + $client = new Client(); + $options = []; + $options['auth'] = $this->adminUser; + $this->response = $client->get($fullUrl, $options); + } + + /** + * @Given /^group "([^"]*)" exists$/ + */ + public function assureGroupExists($group) { + try { + $this->groupExists($group); + } catch (\GuzzleHttp\Exception\ClientException $ex) { + $previous_user = $this->currentUser; + $this->currentUser = "admin"; + $this->creatingTheGroup($group); + $this->currentUser = $previous_user; + } + $this->groupExists($group); PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); } @@ -391,7 +498,17 @@ class FeatureContext extends BehatContext { public function groupDoesNotExist($group) { try { $this->groupExists($group); - PHPUnit_Framework_Assert::fail('The group "' . $group . '" exists'); + } catch (\GuzzleHttp\Exception\ClientException $ex) { + $this->response = $ex->getResponse(); + PHPUnit_Framework_Assert::assertEquals(404, $ex->getResponse()->getStatusCode()); + return; + } + $previous_user = $this->currentUser; + $this->currentUser = "admin"; + $this->deletingTheGroup($group); + $this->currentUser = $previous_user; + try { + $this->groupExists($group); } catch (\GuzzleHttp\Exception\ClientException $ex) { $this->response = $ex->getResponse(); PHPUnit_Framework_Assert::assertEquals(404, $ex->getResponse()->getStatusCode()); @@ -422,4 +539,69 @@ class FeatureContext extends BehatContext { $this->response = $ex->getResponse(); } } + + /** + * @When /^creating a public share with$/ + * @param \Behat\Gherkin\Node\TableNode|null $formData + */ + public function createPublicShare($body) { + $this->sendingToWith("POST", "/apps/files_sharing/api/v1/shares", $body); + $this->lastShareData = $this->response->xml(); + } + + /** + * @Then /^Public shared file "([^"]*)" can be downloaded$/ + */ + public function checkPublicSharedFile($filename) { + $client = new Client(); + $options = []; + $url = $this->lastShareData->data[0]->url; + $fullUrl = $url . "/download"; + $options['save_to'] = "./$filename"; + $this->response = $client->get($fullUrl, $options); + $finfo = new finfo; + $fileinfo = $finfo->file("./$filename", FILEINFO_MIME_TYPE); + PHPUnit_Framework_Assert::assertEquals($fileinfo, "text/plain"); + if (file_exists("./$filename")) { + unlink("./$filename"); + } + } + + /** + * @Then /^Public shared file "([^"]*)" with password "([^"]*)" can be downloaded$/ + */ + public function checkPublicSharedFileWithPassword($filename, $password) { + $client = new Client(); + $options = []; + $token = $this->lastShareData->data[0]->token; + $fullUrl = substr($this->baseUrl, 0, -4) . "public.php/webdav"; + $options['auth'] = [$token, $password]; + $options['save_to'] = "./$filename"; + $this->response = $client->get($fullUrl, $options); + $finfo = new finfo; + $fileinfo = $finfo->file("./$filename", FILEINFO_MIME_TYPE); + PHPUnit_Framework_Assert::assertEquals($fileinfo, "text/plain"); + if (file_exists("./$filename")) { + unlink("./$filename"); + } + } + + /** + * @When /^Adding expiration date to last share$/ + */ + public function addingExpirationDate() { + $share_id = $this->lastShareData->data[0]->id; + $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/apps/files_sharing/api/v{$this->apiVersion}/shares/$share_id"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } else { + $options['auth'] = [$this->currentUser, $this->regularUser]; + } + $date = date('Y-m-d', strtotime("+3 days")); + $options['body'] = ['expireDate' => $date]; + $this->response = $client->send($client->createRequest("PUT", $fullUrl, $options)); + PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); + } } diff --git a/build/integration/features/sharing-v1.feature b/build/integration/features/sharing-v1.feature new file mode 100644 index 0000000000000000000000000000000000000000..ed5ac8930a6dafe3c50f39e4fd403533506510dc --- /dev/null +++ b/build/integration/features/sharing-v1.feature @@ -0,0 +1,68 @@ +Feature: sharing + Background: + Given using api version "1" + + Scenario: Creating a new share with user + Given user "user0" exists + And user "user1" exists + And As an "user0" + When sending "POST" to "/apps/files_sharing/api/v1/shares" with + | path | welcome.txt | + | shareWith | user1 | + | shareType | 0 | + Then the OCS status code should be "100" + And the HTTP status code should be "200" + And user "user0" does not exist + And user "user1" does not exist + + Scenario: Creating a share with a group + Given user "user0" exists + And user "user1" exists + And group "sharing-group" exists + And As an "user0" + When sending "POST" to "/apps/files_sharing/api/v1/shares" with + | path | welcome.txt | + | shareWith | sharing-group | + | shareType | 1 | + Then the OCS status code should be "100" + And the HTTP status code should be "200" + And user "user0" does not exist + And user "user1" does not exist + And group "sharing-group" does not exist + + Scenario: Creating a new public share + Given user "user0" exists + And As an "user0" + When creating a public share with + | path | welcome.txt | + | shareType | 3 | + Then the OCS status code should be "100" + And the HTTP status code should be "200" + And Public shared file "welcome.txt" can be downloaded + And user "user0" does not exist + + Scenario: Creating a new public share with password + Given user "user0" exists + And As an "user0" + When creating a public share with + | path | welcome.txt | + | shareType | 3 | + | password | publicpw | + Then the OCS status code should be "100" + And the HTTP status code should be "200" + And Public shared file "welcome.txt" with password "publicpw" can be downloaded + And user "user0" does not exist + + Scenario: Creating a new public share with password and adding an expiration date + Given user "user0" exists + And As an "user0" + When creating a public share with + | path | welcome.txt | + | shareType | 3 | + | password | publicpw | + And Adding expiration date to last share + Then the OCS status code should be "100" + And the HTTP status code should be "200" + And Public shared file "welcome.txt" with password "publicpw" can be downloaded + And user "user0" does not exist +