Skip to content
Snippets Groups Projects
Commit e28daf2b authored by Thomas Müller's avatar Thomas Müller
Browse files

Merge pull request #20273 from owncloud/sharing-api-adding-tests

Adding more tests to the sharing API.
parents 7969f79a eec7d276
Branches
No related tags found
No related merge requests found
...@@ -30,6 +30,9 @@ class FeatureContext implements Context, SnippetAcceptingContext { ...@@ -30,6 +30,9 @@ class FeatureContext implements Context, SnippetAcceptingContext {
/** @var array */ /** @var array */
private $createdUsers = []; private $createdUsers = [];
/** @var array */
private $createdGroups = [];
public function __construct($baseUrl, $admin, $regular_user_password) { public function __construct($baseUrl, $admin, $regular_user_password) {
// Initialize your context here // Initialize your context here
...@@ -354,23 +357,35 @@ class FeatureContext implements Context, SnippetAcceptingContext { ...@@ -354,23 +357,35 @@ class FeatureContext implements Context, SnippetAcceptingContext {
} }
public function createUser($user) { public function createUser($user) {
$previous_user = $this->currentUser;
$this->currentUser = "admin";
$this->creatingTheUser($user); $this->creatingTheUser($user);
$this->userExists($user); $this->userExists($user);
$this->currentUser = $previous_user;
} }
public function deleteUser($user) { public function deleteUser($user) {
$previous_user = $this->currentUser;
$this->currentUser = "admin";
$this->deletingTheUser($user); $this->deletingTheUser($user);
$this->userDoesNotExist($user); $this->userDoesNotExist($user);
$this->currentUser = $previous_user;
} }
public function createGroup($group) { public function createGroup($group) {
$previous_user = $this->currentUser;
$this->currentUser = "admin";
$this->creatingTheGroup($group); $this->creatingTheGroup($group);
$this->groupExists($group); $this->groupExists($group);
$this->currentUser = $previous_user;
} }
public function deleteGroup($group) { public function deleteGroup($group) {
$previous_user = $this->currentUser;
$this->currentUser = "admin";
$this->deletingTheGroup($group); $this->deletingTheGroup($group);
$this->groupDoesNotExist($group); $this->groupDoesNotExist($group);
$this->currentUser = $previous_user;
} }
public function creatingTheUser($user) { public function creatingTheUser($user) {
...@@ -406,6 +421,7 @@ class FeatureContext implements Context, SnippetAcceptingContext { ...@@ -406,6 +421,7 @@ class FeatureContext implements Context, SnippetAcceptingContext {
]; ];
$this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); $this->response = $client->send($client->createRequest("POST", $fullUrl, $options));
$this->createdGroups[$group] = $group;
} }
/** /**
...@@ -603,6 +619,143 @@ class FeatureContext implements Context, SnippetAcceptingContext { ...@@ -603,6 +619,143 @@ class FeatureContext implements Context, SnippetAcceptingContext {
PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); 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 * @BeforeScenario
* @AfterScenario * @AfterScenario
...@@ -614,4 +767,15 @@ class FeatureContext implements Context, SnippetAcceptingContext { ...@@ -614,4 +767,15 @@ class FeatureContext implements Context, SnippetAcceptingContext {
} }
} }
/**
* @BeforeScenario
* @AfterScenario
*/
public function cleanupGroups()
{
foreach($this->createdGroups as $group) {
$this->deleteGroup($group);
}
}
} }
...@@ -58,3 +58,42 @@ Feature: sharing ...@@ -58,3 +58,42 @@ Feature: sharing
And the HTTP status code should be "200" And the HTTP status code should be "200"
And Public shared file "welcome.txt" with password "publicpw" can be downloaded 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"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment