From 0f27b719ea515e749fb26a90e1dd303e1e0733d7 Mon Sep 17 00:00:00 2001 From: Sergio Bertolin Date: Tue, 3 Nov 2015 16:08:01 +0000 Subject: [PATCH 1/4] enhancements to pre and post conditions --- .../features/bootstrap/FeatureContext.php | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/build/integration/features/bootstrap/FeatureContext.php b/build/integration/features/bootstrap/FeatureContext.php index 8633727ee04..d4a5a45dc3a 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) { @@ -388,6 +403,7 @@ class FeatureContext implements Context, SnippetAcceptingContext { $this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); $this->createdUsers[$user] = $user; + echo "Creating a user inside creatingTheuser\n"; } /** @@ -406,6 +422,7 @@ class FeatureContext implements Context, SnippetAcceptingContext { ]; $this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); + $this->createdGroups[$group] = $group; } /** @@ -603,6 +620,38 @@ class FeatureContext implements Context, SnippetAcceptingContext { PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); } + public static function createTextFile($path, $filename){ + $myfile = fopen("$path" . "$filename", "w") or die("Unable to open file!"); + $txt = "ownCloud test text file\n"; + fwrite($myfile, $txt); + fclose($myfile); + } + + 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++){ + self::createTextFile("../../core/skeleton/", "textfile" . "$i" . ".txt"); + } + + } + + /** + * @AfterSuite + */ + public static function removeFilesFromSkeleton(){ + for ($i=0; $i<5; $i++){ + self::removeFile("../../core/skeleton/", "textfile" . "$i" . ".txt"); + } + } + /** * @BeforeScenario * @AfterScenario @@ -614,4 +663,15 @@ class FeatureContext implements Context, SnippetAcceptingContext { } } + + /** + * @BeforeScenario + * @AfterScenario + */ + public function cleanupGroups() + { + foreach($this->createdGroups as $group) { + $this->deleteGroup($group); + } + } } From 05933815223043ddbe5bbcdaa7afb02801243739 Mon Sep 17 00:00:00 2001 From: Sergio Bertolin Date: Wed, 4 Nov 2015 12:16:00 +0000 Subject: [PATCH 2/4] Added general function to create shares in preconditions. --- .../features/bootstrap/FeatureContext.php | 85 +++++++++++++++++-- build/integration/features/sharing-v1.feature | 19 +++++ 2 files changed, 97 insertions(+), 7 deletions(-) diff --git a/build/integration/features/bootstrap/FeatureContext.php b/build/integration/features/bootstrap/FeatureContext.php index d4a5a45dc3a..a8ab5dc04e8 100644 --- a/build/integration/features/bootstrap/FeatureContext.php +++ b/build/integration/features/bootstrap/FeatureContext.php @@ -403,7 +403,6 @@ class FeatureContext implements Context, SnippetAcceptingContext { $this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); $this->createdUsers[$user] = $user; - echo "Creating a user inside creatingTheuser\n"; } /** @@ -620,11 +619,83 @@ class FeatureContext implements Context, SnippetAcceptingContext { PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); } - public static function createTextFile($path, $filename){ - $myfile = fopen("$path" . "$filename", "w") or die("Unable to open file!"); - $txt = "ownCloud test text file\n"; - fwrite($myfile, $txt); - fclose($myfile); + 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)); + } catch (\GuzzleHttp\Exception\ClientException $ex) { + $this->response = $ex->getResponse(); + } + + } + + 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)); + } public static function removeFile($path, $filename){ @@ -638,7 +709,7 @@ class FeatureContext implements Context, SnippetAcceptingContext { */ public static function addFilesToSkeleton(){ for ($i=0; $i<5; $i++){ - self::createTextFile("../../core/skeleton/", "textfile" . "$i" . ".txt"); + file_put_contents("../../core/skeleton/" . "textfile" . "$i" . ".txt", "ownCloud test text file\n"); } } diff --git a/build/integration/features/sharing-v1.feature b/build/integration/features/sharing-v1.feature index abf9fe1c8d8..0f9953bcccf 100644 --- a/build/integration/features/sharing-v1.feature +++ b/build/integration/features/sharing-v1.feature @@ -58,3 +58,22 @@ 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 + 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" + + + + + + + + + + + From 3b7690f84204303de84db96da0bf6812f01bc612 Mon Sep 17 00:00:00 2001 From: Sergio Bertolin Date: Wed, 4 Nov 2015 13:42:14 +0000 Subject: [PATCH 3/4] added test for deleting a share --- .../integration/features/bootstrap/FeatureContext.php | 11 ++++++++++- build/integration/features/sharing-v1.feature | 9 +++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/build/integration/features/bootstrap/FeatureContext.php b/build/integration/features/bootstrap/FeatureContext.php index a8ab5dc04e8..d3a04ee782e 100644 --- a/build/integration/features/bootstrap/FeatureContext.php +++ b/build/integration/features/bootstrap/FeatureContext.php @@ -659,6 +659,7 @@ class FeatureContext implements Context, SnippetAcceptingContext { try { $this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); + $this->lastShareData = $this->response->xml(); } catch (\GuzzleHttp\Exception\ClientException $ex) { $this->response = $ex->getResponse(); } @@ -695,7 +696,15 @@ class FeatureContext implements Context, SnippetAcceptingContext { } $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){ diff --git a/build/integration/features/sharing-v1.feature b/build/integration/features/sharing-v1.feature index 0f9953bcccf..b7bd8b70db7 100644 --- a/build/integration/features/sharing-v1.feature +++ b/build/integration/features/sharing-v1.feature @@ -67,6 +67,15 @@ Feature: sharing Then the OCS status code should be "100" And the HTTP status code should be "200" + 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" + From 1a51d4c4c715a0f30d9a91793b78702f18cd94bc Mon Sep 17 00:00:00 2001 From: Sergio Bertolin Date: Thu, 5 Nov 2015 09:10:46 +0000 Subject: [PATCH 4/4] Added changes in the verification of sharing get responses --- .../features/bootstrap/FeatureContext.php | 26 ++++++++++++++++++- build/integration/features/sharing-v1.feature | 13 +++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/build/integration/features/bootstrap/FeatureContext.php b/build/integration/features/bootstrap/FeatureContext.php index d3a04ee782e..93073263d88 100644 --- a/build/integration/features/bootstrap/FeatureContext.php +++ b/build/integration/features/bootstrap/FeatureContext.php @@ -666,6 +666,30 @@ class FeatureContext implements Context, SnippetAcceptingContext { } + 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) { @@ -709,7 +733,7 @@ class FeatureContext implements Context, SnippetAcceptingContext { public static function removeFile($path, $filename){ if (file_exists("$path" . "$filename")) { - unlink("$path" . "$filename"); + unlink("$path" . "$filename"); } } diff --git a/build/integration/features/sharing-v1.feature b/build/integration/features/sharing-v1.feature index b7bd8b70db7..8bdfd722652 100644 --- a/build/integration/features/sharing-v1.feature +++ b/build/integration/features/sharing-v1.feature @@ -58,7 +58,17 @@ 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 + 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" @@ -66,6 +76,7 @@ Feature: sharing 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