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
This commit is contained in:
Sergio Bertolin 2015-10-09 13:00:34 +00:00 committed by Thomas Müller
parent 73d9699be9
commit d11b69bfb9
2 changed files with 284 additions and 34 deletions

View File

@ -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,10 +355,65 @@ 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";
$client = new Client();
$options = [];
if ($this->currentUser === 'admin') {
$options['auth'] = $this->adminUser;
}
$options['body'] = [
'userid' => $user,
'password' => '123456'
];
$this->response = $client->send($client->createRequest("POST", $fullUrl, $options));
}
/**
* @When /^creating the group "([^"]*)"$/
*/
public function creatingTheGroup($group) {
$fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/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));
}
/**
* @When /^Deleting the user "([^"]*)"$/
*/
public function deletingTheUser($user) {
$fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/users/$user";
$client = new Client();
$options = [];
@ -343,45 +421,74 @@ class FeatureContext extends BehatContext {
$options['auth'] = $this->adminUser;
}
$this->response = $client->post($fullUrl, [
'form_params' => [
'userid' => $user,
'password' => '123456'
]
]);
$this->response = $client->send($client->createRequest("DELETE", $fullUrl, $options));
}
/**
* @When /^creating the group "([^"]*)r"$/
* @When /^Deleting the group "([^"]*)"$/
*/
public function creatingTheGroup($group) {
$fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/groups/addgroup";
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->post($fullUrl, [
'form_params' => [
'groupid' => $user
]
]);
$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 groupExists($group) {
$fullUrl = $this->baseUrl . "v2.php/cloud/groups/$group";
$client = new Client();
$options = [];
if ($this->currentUser === 'admin') {
$options['auth'] = $this->adminUser;
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->response = $client->get($fullUrl, $options);
$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());
}
}

View File

@ -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