Add integration tests for merging received shares
This commit is contained in:
parent
39ebf120c2
commit
c5095e760e
|
@ -309,10 +309,10 @@ trait Sharing {
|
||||||
PHPUnit_Framework_Assert::assertEquals(False, $this->isFieldInResponse('share_with', "$user"));
|
PHPUnit_Framework_Assert::assertEquals(False, $this->isFieldInResponse('share_with', "$user"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isUserOrGroupInSharedData($userOrGroup){
|
public function isUserOrGroupInSharedData($userOrGroup, $permissions = null){
|
||||||
$data = $this->response->xml()->data[0];
|
$data = $this->response->xml()->data[0];
|
||||||
foreach($data as $element) {
|
foreach($data as $element) {
|
||||||
if ($element->share_with == $userOrGroup){
|
if ($element->share_with == $userOrGroup && ($permissions === null || $permissions == $element->permissions)){
|
||||||
return True;
|
return True;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -320,13 +320,13 @@ trait Sharing {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Given /^file "([^"]*)" of user "([^"]*)" is shared with user "([^"]*)"$/
|
* @Given /^(file|folder|entry) "([^"]*)" of user "([^"]*)" is shared with user "([^"]*)"( with permissions ([\d]*))?$/
|
||||||
*
|
*
|
||||||
* @param string $filepath
|
* @param string $filepath
|
||||||
* @param string $user1
|
* @param string $user1
|
||||||
* @param string $user2
|
* @param string $user2
|
||||||
*/
|
*/
|
||||||
public function assureFileIsShared($filepath, $user1, $user2){
|
public function assureFileIsShared($entry, $filepath, $user1, $user2, $withPerms = null, $permissions = null){
|
||||||
$fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/apps/files_sharing/api/v{$this->sharingApiVersion}/shares" . "?path=$filepath";
|
$fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/apps/files_sharing/api/v{$this->sharingApiVersion}/shares" . "?path=$filepath";
|
||||||
$client = new Client();
|
$client = new Client();
|
||||||
$options = [];
|
$options = [];
|
||||||
|
@ -336,23 +336,23 @@ trait Sharing {
|
||||||
$options['auth'] = [$user1, $this->regularUser];
|
$options['auth'] = [$user1, $this->regularUser];
|
||||||
}
|
}
|
||||||
$this->response = $client->get($fullUrl, $options);
|
$this->response = $client->get($fullUrl, $options);
|
||||||
if ($this->isUserOrGroupInSharedData($user2)){
|
if ($this->isUserOrGroupInSharedData($user2, $permissions)){
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
$this->createShare($user1, $filepath, 0, $user2, null, null, null);
|
$this->createShare($user1, $filepath, 0, $user2, null, null, $permissions);
|
||||||
}
|
}
|
||||||
$this->response = $client->get($fullUrl, $options);
|
$this->response = $client->get($fullUrl, $options);
|
||||||
PHPUnit_Framework_Assert::assertEquals(True, $this->isUserOrGroupInSharedData($user2));
|
PHPUnit_Framework_Assert::assertEquals(True, $this->isUserOrGroupInSharedData($user2, $permissions));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Given /^file "([^"]*)" of user "([^"]*)" is shared with group "([^"]*)"$/
|
* @Given /^(file|folder|entry) "([^"]*)" of user "([^"]*)" is shared with group "([^"]*)"( with permissions ([\d]*))?$/
|
||||||
*
|
*
|
||||||
* @param string $filepath
|
* @param string $filepath
|
||||||
* @param string $user
|
* @param string $user
|
||||||
* @param string $group
|
* @param string $group
|
||||||
*/
|
*/
|
||||||
public function assureFileIsSharedWithGroup($filepath, $user, $group){
|
public function assureFileIsSharedWithGroup($entry, $filepath, $user, $group, $withPerms = null, $permissions = null){
|
||||||
$fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/apps/files_sharing/api/v{$this->sharingApiVersion}/shares" . "?path=$filepath";
|
$fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/apps/files_sharing/api/v{$this->sharingApiVersion}/shares" . "?path=$filepath";
|
||||||
$client = new Client();
|
$client = new Client();
|
||||||
$options = [];
|
$options = [];
|
||||||
|
@ -362,13 +362,13 @@ trait Sharing {
|
||||||
$options['auth'] = [$user, $this->regularUser];
|
$options['auth'] = [$user, $this->regularUser];
|
||||||
}
|
}
|
||||||
$this->response = $client->get($fullUrl, $options);
|
$this->response = $client->get($fullUrl, $options);
|
||||||
if ($this->isUserOrGroupInSharedData($group)){
|
if ($this->isUserOrGroupInSharedData($group, $permissions)){
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
$this->createShare($user, $filepath, 1, $group, null, null, null);
|
$this->createShare($user, $filepath, 1, $group, null, null, $permissions);
|
||||||
}
|
}
|
||||||
$this->response = $client->get($fullUrl, $options);
|
$this->response = $client->get($fullUrl, $options);
|
||||||
PHPUnit_Framework_Assert::assertEquals(True, $this->isUserOrGroupInSharedData($group));
|
PHPUnit_Framework_Assert::assertEquals(True, $this->isUserOrGroupInSharedData($group, $permissions));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -259,6 +259,32 @@ trait WebDav {
|
||||||
$this->response = $this->listFolder($user, $path, 0, $properties);
|
$this->response = $this->listFolder($user, $path, 0, $properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then /^as "([^"]*)" the (file|folder|entry) "([^"]*)" does not exist$/
|
||||||
|
* @param string $user
|
||||||
|
* @param string $path
|
||||||
|
* @param \Behat\Gherkin\Node\TableNode|null $propertiesTable
|
||||||
|
*/
|
||||||
|
public function asTheFileOrFolderDoesNotExist($user, $entry, $path) {
|
||||||
|
$client = $this->getSabreClient($user);
|
||||||
|
$response = $client->request('HEAD', $this->makeSabrePath($path));
|
||||||
|
if ($response['statusCode'] !== 404) {
|
||||||
|
throw new \Exception($entry . ' "' . $path . '" expected to not exist (status code ' . $response['statusCode'] . ', expected 404)');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Then /^as "([^"]*)" the (file|folder|entry) "([^"]*)" exists$/
|
||||||
|
* @param string $user
|
||||||
|
* @param string $path
|
||||||
|
* @param \Behat\Gherkin\Node\TableNode|null $propertiesTable
|
||||||
|
*/
|
||||||
|
public function asTheFileOrFolderExists($user, $entry, $path) {
|
||||||
|
$this->response = $this->listFolder($user, $path, 0);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Then the single response should contain a property :key with value :value
|
* @Then the single response should contain a property :key with value :value
|
||||||
* @param string $key
|
* @param string $key
|
||||||
|
@ -327,9 +353,25 @@ trait WebDav {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*Returns the elements of a propfind, $folderDepth requires 1 to see elements without children*/
|
/*Returns the elements of a propfind, $folderDepth requires 1 to see elements without children*/
|
||||||
public function listFolder($user, $path, $folderDepth, $properties = null){
|
public function listFolder($user, $path, $folderDepth, $properties = null){
|
||||||
|
$client = $this->getSabreClient($user);
|
||||||
|
if (!$properties) {
|
||||||
|
$properties = [
|
||||||
|
'{DAV:}getetag'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$response = $client->propfind($this->makeSabrePath($path), $properties, $folderDepth);
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function makeSabrePath($path) {
|
||||||
|
return $this->encodePath($this->davPath . '/' . ltrim($path, '/'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSabreClient($user) {
|
||||||
$fullUrl = substr($this->baseUrl, 0, -4);
|
$fullUrl = substr($this->baseUrl, 0, -4);
|
||||||
|
|
||||||
$settings = array(
|
$settings = array(
|
||||||
|
@ -343,17 +385,7 @@ trait WebDav {
|
||||||
$settings['password'] = $this->regularUser;
|
$settings['password'] = $this->regularUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
$client = new SClient($settings);
|
return new SClient($settings);
|
||||||
|
|
||||||
if (!$properties) {
|
|
||||||
$properties = [
|
|
||||||
'{DAV:}getetag'
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
$response = $client->propfind($this->davPath . '/' . ltrim($path, '/'), $properties, $folderDepth);
|
|
||||||
|
|
||||||
return $response;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -493,6 +525,17 @@ trait WebDav {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL encodes the given path but keeps the slashes
|
||||||
|
*
|
||||||
|
* @param string $path to encode
|
||||||
|
* @return string encoded path
|
||||||
|
*/
|
||||||
|
private function encodePath($path) {
|
||||||
|
// slashes need to stay
|
||||||
|
return str_replace('%2F', '/', rawurlencode($path));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @When user :user favorites element :path
|
* @When user :user favorites element :path
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -775,3 +775,116 @@ Feature: sharing
|
||||||
And Deleting last share
|
And Deleting last share
|
||||||
Then the OCS status code should be "404"
|
Then the OCS status code should be "404"
|
||||||
And the HTTP status code should be "200"
|
And the HTTP status code should be "200"
|
||||||
|
|
||||||
|
Scenario: Merging shares for recipient when shared from outside with group and member
|
||||||
|
Given As an "admin"
|
||||||
|
And user "user0" exists
|
||||||
|
And user "user1" exists
|
||||||
|
And group "group1" exists
|
||||||
|
And user "user1" belongs to group "group1"
|
||||||
|
And user "user0" created a folder "merge-test-outside"
|
||||||
|
When folder "merge-test-outside" of user "user0" is shared with group "group1"
|
||||||
|
And folder "merge-test-outside" of user "user0" is shared with user "user1"
|
||||||
|
Then as "user1" the folder "merge-test-outside" exists
|
||||||
|
And as "user1" the folder "merge-test-outside (2)" does not exist
|
||||||
|
|
||||||
|
Scenario: Merging shares for recipient when shared from outside with group and member with different permissions
|
||||||
|
Given As an "admin"
|
||||||
|
And user "user0" exists
|
||||||
|
And user "user1" exists
|
||||||
|
And group "group1" exists
|
||||||
|
And user "user1" belongs to group "group1"
|
||||||
|
And user "user0" created a folder "merge-test-outside-perms"
|
||||||
|
When folder "merge-test-outside-perms" of user "user0" is shared with group "group1" with permissions 1
|
||||||
|
And folder "merge-test-outside-perms" of user "user0" is shared with user "user1" with permissions 31
|
||||||
|
Then as "user1" gets properties of folder "merge-test-outside-perms" with
|
||||||
|
|{http://owncloud.org/ns}permissions|
|
||||||
|
And the single response should contain a property "{http://owncloud.org/ns}permissions" with value "SRDNVCK"
|
||||||
|
And as "user1" the folder "merge-test-outside-perms (2)" does not exist
|
||||||
|
|
||||||
|
Scenario: Merging shares for recipient when shared from outside with two groups
|
||||||
|
Given As an "admin"
|
||||||
|
And user "user0" exists
|
||||||
|
And user "user1" exists
|
||||||
|
And group "group1" exists
|
||||||
|
And group "group2" exists
|
||||||
|
And user "user1" belongs to group "group1"
|
||||||
|
And user "user1" belongs to group "group2"
|
||||||
|
And user "user0" created a folder "merge-test-outside-twogroups"
|
||||||
|
When folder "merge-test-outside-twogroups" of user "user0" is shared with group "group1"
|
||||||
|
And folder "merge-test-outside-twogroups" of user "user0" is shared with group "group2"
|
||||||
|
Then as "user1" the folder "merge-test-outside-twogroups" exists
|
||||||
|
And as "user1" the folder "merge-test-outside-twogroups (2)" does not exist
|
||||||
|
|
||||||
|
Scenario: Merging shares for recipient when shared from outside with two groups with different permissions
|
||||||
|
Given As an "admin"
|
||||||
|
And user "user0" exists
|
||||||
|
And user "user1" exists
|
||||||
|
And group "group1" exists
|
||||||
|
And group "group2" exists
|
||||||
|
And user "user1" belongs to group "group1"
|
||||||
|
And user "user1" belongs to group "group2"
|
||||||
|
And user "user0" created a folder "merge-test-outside-twogroups-perms"
|
||||||
|
When folder "merge-test-outside-twogroups-perms" of user "user0" is shared with group "group1" with permissions 1
|
||||||
|
And folder "merge-test-outside-twogroups-perms" of user "user0" is shared with group "group2" with permissions 31
|
||||||
|
Then as "user1" gets properties of folder "merge-test-outside-twogroups-perms" with
|
||||||
|
|{http://owncloud.org/ns}permissions|
|
||||||
|
And the single response should contain a property "{http://owncloud.org/ns}permissions" with value "SRDNVCK"
|
||||||
|
And as "user1" the folder "merge-test-outside-twogroups-perms (2)" does not exist
|
||||||
|
|
||||||
|
Scenario: Merging shares for recipient when shared from outside with two groups and member
|
||||||
|
Given As an "admin"
|
||||||
|
And user "user0" exists
|
||||||
|
And user "user1" exists
|
||||||
|
And group "group1" exists
|
||||||
|
And group "group2" exists
|
||||||
|
And user "user1" belongs to group "group1"
|
||||||
|
And user "user1" belongs to group "group2"
|
||||||
|
And user "user0" created a folder "merge-test-outside-twogroups-member-perms"
|
||||||
|
When folder "merge-test-outside-twogroups-member-perms" of user "user0" is shared with group "group1" with permissions 1
|
||||||
|
And folder "merge-test-outside-twogroups-member-perms" of user "user0" is shared with group "group2" with permissions 31
|
||||||
|
And folder "merge-test-outside-twogroups-member-perms" of user "user0" is shared with user "user1" with permissions 1
|
||||||
|
Then as "user1" gets properties of folder "merge-test-outside-twogroups-member-perms" with
|
||||||
|
|{http://owncloud.org/ns}permissions|
|
||||||
|
And the single response should contain a property "{http://owncloud.org/ns}permissions" with value "SRDNVCK"
|
||||||
|
And as "user1" the folder "merge-test-outside-twogroups-member-perms (2)" does not exist
|
||||||
|
|
||||||
|
Scenario: Merging shares for recipient when shared from inside with group
|
||||||
|
Given As an "admin"
|
||||||
|
And user "user0" exists
|
||||||
|
And group "group1" exists
|
||||||
|
And user "user0" belongs to group "group1"
|
||||||
|
And user "user0" created a folder "merge-test-inside-group"
|
||||||
|
When folder "/merge-test-inside-group" of user "user0" is shared with group "group1"
|
||||||
|
Then as "user0" the folder "merge-test-inside-group" exists
|
||||||
|
And as "user0" the folder "merge-test-inside-group (2)" does not exist
|
||||||
|
|
||||||
|
Scenario: Merging shares for recipient when shared from inside with two groups
|
||||||
|
Given As an "admin"
|
||||||
|
And user "user0" exists
|
||||||
|
And group "group1" exists
|
||||||
|
And group "group2" exists
|
||||||
|
And user "user0" belongs to group "group1"
|
||||||
|
And user "user0" belongs to group "group2"
|
||||||
|
And user "user0" created a folder "merge-test-inside-twogroups"
|
||||||
|
When folder "merge-test-inside-twogroups" of user "user0" is shared with group "group1"
|
||||||
|
And folder "merge-test-inside-twogroups" of user "user0" is shared with group "group2"
|
||||||
|
Then as "user0" the folder "merge-test-inside-twogroups" exists
|
||||||
|
And as "user0" the folder "merge-test-inside-twogroups (2)" does not exist
|
||||||
|
And as "user0" the folder "merge-test-inside-twogroups (3)" does not exist
|
||||||
|
|
||||||
|
Scenario: Merging shares for recipient when shared from inside with group with less permissions
|
||||||
|
Given As an "admin"
|
||||||
|
And user "user0" exists
|
||||||
|
And group "group1" exists
|
||||||
|
And group "group2" exists
|
||||||
|
And user "user0" belongs to group "group1"
|
||||||
|
And user "user0" belongs to group "group2"
|
||||||
|
And user "user0" created a folder "merge-test-inside-twogroups-perms"
|
||||||
|
When folder "merge-test-inside-twogroups-perms" of user "user0" is shared with group "group1"
|
||||||
|
And folder "merge-test-inside-twogroups-perms" of user "user0" is shared with group "group2"
|
||||||
|
Then as "user0" gets properties of folder "merge-test-inside-twogroups-perms" with
|
||||||
|
|{http://owncloud.org/ns}permissions|
|
||||||
|
And the single response should contain a property "{http://owncloud.org/ns}permissions" with value "RDNVCK"
|
||||||
|
And as "user0" the folder "merge-test-inside-twogroups-perms (2)" does not exist
|
||||||
|
And as "user0" the folder "merge-test-inside-twogroups-perms (3)" does not exist
|
||||||
|
|
Loading…
Reference in New Issue