summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2015-11-05 15:58:09 +0100
committerThomas Müller <thomas.mueller@tmit.eu>2015-11-05 15:58:09 +0100
commite28daf2b377fa0ab6450947e692c089624e3b727 (patch)
treeaf3d15d072e84b5814ae5e5a9916a38a3945e650
parent7969f79a78f6ebaf378b8faafdd4030c1e8472ce (diff)
parenteec7d2764c3248febe27d6b452a0ac5a47e83a69 (diff)
downloadnextcloud-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.php164
-rw-r--r--build/integration/features/sharing-v1.feature39
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"
+
+
+
+
+
+
+
+
+
+
+