diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2015-11-05 15:58:09 +0100 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2015-11-05 15:58:09 +0100 |
commit | e28daf2b377fa0ab6450947e692c089624e3b727 (patch) | |
tree | af3d15d072e84b5814ae5e5a9916a38a3945e650 | |
parent | 7969f79a78f6ebaf378b8faafdd4030c1e8472ce (diff) | |
parent | eec7d2764c3248febe27d6b452a0ac5a47e83a69 (diff) | |
download | nextcloud-server-e28daf2b377fa0ab6450947e692c089624e3b727.tar.gz nextcloud-server-e28daf2b377fa0ab6450947e692c089624e3b727.zip |
Merge pull request #20273 from owncloud/sharing-api-adding-tests
Adding more tests to the sharing API.
-rw-r--r-- | build/integration/features/bootstrap/FeatureContext.php | 164 | ||||
-rw-r--r-- | build/integration/features/sharing-v1.feature | 39 |
2 files changed, 203 insertions, 0 deletions
diff --git a/build/integration/features/bootstrap/FeatureContext.php b/build/integration/features/bootstrap/FeatureContext.php index 8633727ee04..93073263d88 100644 --- a/build/integration/features/bootstrap/FeatureContext.php +++ b/build/integration/features/bootstrap/FeatureContext.php @@ -30,6 +30,9 @@ class FeatureContext implements Context, SnippetAcceptingContext { /** @var array */ private $createdUsers = []; + /** @var array */ + private $createdGroups = []; + public function __construct($baseUrl, $admin, $regular_user_password) { // Initialize your context here @@ -354,23 +357,35 @@ class FeatureContext implements Context, SnippetAcceptingContext { } public function createUser($user) { + $previous_user = $this->currentUser; + $this->currentUser = "admin"; $this->creatingTheUser($user); $this->userExists($user); + $this->currentUser = $previous_user; } public function deleteUser($user) { + $previous_user = $this->currentUser; + $this->currentUser = "admin"; $this->deletingTheUser($user); $this->userDoesNotExist($user); + $this->currentUser = $previous_user; } public function createGroup($group) { + $previous_user = $this->currentUser; + $this->currentUser = "admin"; $this->creatingTheGroup($group); $this->groupExists($group); + $this->currentUser = $previous_user; } public function deleteGroup($group) { + $previous_user = $this->currentUser; + $this->currentUser = "admin"; $this->deletingTheGroup($group); $this->groupDoesNotExist($group); + $this->currentUser = $previous_user; } public function creatingTheUser($user) { @@ -406,6 +421,7 @@ class FeatureContext implements Context, SnippetAcceptingContext { ]; $this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); + $this->createdGroups[$group] = $group; } /** @@ -603,6 +619,143 @@ class FeatureContext implements Context, SnippetAcceptingContext { PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); } + public function createShare($user, + $path = null, + $shareType = null, + $shareWith = null, + $publicUpload = null, + $password = null, + $permissions = null){ + $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/apps/files_sharing/api/v{$this->apiVersion}/shares"; + $client = new Client(); + $options = []; + + if ($user === 'admin') { + $options['auth'] = $this->adminUser; + } else { + $options['auth'] = [$user, $this->regularUser]; + } + $fd = []; + if (!is_null($path)){ + $fd['path'] = $path; + } + if (!is_null($shareType)){ + $fd['shareType'] = $shareType; + } + if (!is_null($shareWith)){ + $fd['shareWith'] = $shareWith; + } + if (!is_null($publicUpload)){ + $fd['publicUpload'] = $publicUpload; + } + if (!is_null($password)){ + $fd['password'] = $password; + } + if (!is_null($permissions)){ + $fd['permissions'] = $permissions; + } + + $options['body'] = $fd; + + try { + $this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); + $this->lastShareData = $this->response->xml(); + } catch (\GuzzleHttp\Exception\ClientException $ex) { + $this->response = $ex->getResponse(); + } + + } + + public function isFieldInResponse($field, $content_expected){ + $data = $this->response->xml()->data[0]; + foreach($data as $element) { + if ($element->$field == $content_expected){ + return True; + } + } + return False; + } + + /** + * @Then /^File "([^"]*)" should be included in the response$/ + */ + public function checkSharedFileInResponse($filename){ + PHPUnit_Framework_Assert::assertEquals(True, $this->isFieldInResponse('file_target', "/$filename")); + } + + /** + * @Then /^File "([^"]*)" should not be included in the response$/ + */ + public function checkSharedFileNotInResponse($filename){ + PHPUnit_Framework_Assert::assertEquals(False, $this->isFieldInResponse('file_target', "/$filename")); + } + + public function isUserInSharedData($user){ + $data = $this->response->xml()->data[0]; + foreach($data as $element) { + if ($element->share_with == $user){ + return True; + } + } + return False; + } + + /** + * @Given /^file "([^"]*)" from user "([^"]*)" is shared with user "([^"]*)"$/ + */ + public function assureFileIsShared($filepath, $user1, $user2){ + $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/apps/files_sharing/api/v{$this->apiVersion}/shares" . "?path=$filepath"; + $client = new Client(); + $options = []; + if ($user1 === 'admin') { + $options['auth'] = $this->adminUser; + } else { + $options['auth'] = [$user1, $this->regularUser]; + } + $this->response = $client->get($fullUrl, $options); + if ($this->isUserInSharedData($user2)){ + return; + } else { + $this->createShare($user1, $filepath, 0, $user2, null, null, null); + } + $this->response = $client->get($fullUrl, $options); + PHPUnit_Framework_Assert::assertEquals(True, $this->isUserInSharedData($user2)); + } + + /** + * @When /^Deleting last share$/ + */ + public function deletingLastShare(){ + $share_id = $this->lastShareData->data[0]->id; + $url = "/apps/files_sharing/api/v{$this->apiVersion}/shares/$share_id"; + $this->sendingToWith("DELETE", $url, null); + } + + public static function removeFile($path, $filename){ + if (file_exists("$path" . "$filename")) { + unlink("$path" . "$filename"); + } + } + + /** + * @BeforeSuite + */ + public static function addFilesToSkeleton(){ + for ($i=0; $i<5; $i++){ + file_put_contents("../../core/skeleton/" . "textfile" . "$i" . ".txt", "ownCloud test text file\n"); + } + + } + + /** + * @AfterSuite + */ + public static function removeFilesFromSkeleton(){ + for ($i=0; $i<5; $i++){ + self::removeFile("../../core/skeleton/", "textfile" . "$i" . ".txt"); + } + } + /** * @BeforeScenario * @AfterScenario @@ -614,4 +767,15 @@ class FeatureContext implements Context, SnippetAcceptingContext { } } + + /** + * @BeforeScenario + * @AfterScenario + */ + public function cleanupGroups() + { + foreach($this->createdGroups as $group) { + $this->deleteGroup($group); + } + } } diff --git a/build/integration/features/sharing-v1.feature b/build/integration/features/sharing-v1.feature index abf9fe1c8d8..8bdfd722652 100644 --- a/build/integration/features/sharing-v1.feature +++ b/build/integration/features/sharing-v1.feature @@ -58,3 +58,42 @@ Feature: sharing And the HTTP status code should be "200" And Public shared file "welcome.txt" with password "publicpw" can be downloaded + Scenario: getting all shares of a user using that user + Given user "user0" exists + And user "user1" exists + And file "textfile0.txt" from user "user0" is shared with user "user1" + And As an "user0" + When sending "GET" to "/apps/files_sharing/api/v1/shares" + Then the OCS status code should be "100" + And the HTTP status code should be "200" + And File "textfile0.txt" should be included in the response + + Scenario: getting all shares of a user using another user + Given user "user0" exists + And user "user1" exists + And file "textfile0.txt" from user "user0" is shared with user "user1" + And As an "admin" + When sending "GET" to "/apps/files_sharing/api/v1/shares" + Then the OCS status code should be "100" + And the HTTP status code should be "200" + And File "textfile0.txt" should not be included in the response + + Scenario: delete a share + Given user "user0" exists + And user "user1" exists + And file "textfile0.txt" from user "user0" is shared with user "user1" + And As an "user0" + When Deleting last share + Then the OCS status code should be "100" + And the HTTP status code should be "200" + + + + + + + + + + + |