summaryrefslogtreecommitdiffstats
path: root/build
diff options
context:
space:
mode:
authorSergio Bertolin <sbertolin@solidgear.es>2015-10-09 13:00:34 +0000
committerThomas Müller <thomas.mueller@tmit.eu>2015-10-29 17:10:49 +0100
commitd11b69bfb9fdb75389fd6c3f6234e52eb85b88ce (patch)
tree5a04dfccccdb25b04898e220d3ad1dd2ded8e406 /build
parent73d9699be9d2a343b0573dc6a5bcc65f5f9c7303 (diff)
downloadnextcloud-server-d11b69bfb9fdb75389fd6c3f6234e52eb85b88ce.tar.gz
nextcloud-server-d11b69bfb9fdb75389fd6c3f6234e52eb85b88ce.zip
added sharing feature file
added logic necessary for preconditions and postconditions of sharing tests Added sharing by link tests and sharing with group Added test which reproduces issue 19950 (adding expiration date) refactored given and then statements to be preconditions and not operations
Diffstat (limited to 'build')
-rw-r--r--build/integration/features/bootstrap/FeatureContext.php238
-rw-r--r--build/integration/features/sharing-v1.feature68
2 files changed, 278 insertions, 28 deletions
diff --git a/build/integration/features/bootstrap/FeatureContext.php b/build/integration/features/bootstrap/FeatureContext.php
index 70e73b66a71..df4b853edde 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 00000000000..ed5ac8930a6
--- /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
+