summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2015-11-30 23:06:25 +0100
committerThomas Müller <thomas.mueller@tmit.eu>2015-11-30 23:06:25 +0100
commitb0491bf9305c5e3d01e2b9bb9393b42212dce589 (patch)
treed7ada8652e1d6fd39a4668b99d238e854e6e1bb0
parent802f226d8a2e0e8d9e381542e00d191de2475985 (diff)
parent2c6e0da8f5e7160ffb55a991cab503ee5b64191d (diff)
downloadnextcloud-server-b0491bf9305c5e3d01e2b9bb9393b42212dce589.tar.gz
nextcloud-server-b0491bf9305c5e3d01e2b9bb9393b42212dce589.zip
Merge pull request #20828 from owncloud/sharing_integration_test_20645_morris
Sharing integration test 20645, added sabre dav and propfind check.
-rw-r--r--build/integration/composer.json3
-rw-r--r--build/integration/features/bootstrap/BasicStructure.php18
-rw-r--r--build/integration/features/bootstrap/Sharing.php4
-rw-r--r--build/integration/features/bootstrap/WebDav.php71
-rw-r--r--build/integration/features/sharing-v1.feature40
-rw-r--r--build/integration/features/webdav-related.feature6
6 files changed, 122 insertions, 20 deletions
diff --git a/build/integration/composer.json b/build/integration/composer.json
index 2f0f8a815ce..a9516391a41 100644
--- a/build/integration/composer.json
+++ b/build/integration/composer.json
@@ -3,6 +3,7 @@
"phpunit/phpunit": "~4.6",
"behat/behat": "^3.0",
"guzzlehttp/guzzle": "~5.0",
- "jarnaiz/behat-junit-formatter": "^1.3"
+ "jarnaiz/behat-junit-formatter": "^1.3",
+ "sabre/dav": "3.0.x-dev"
}
}
diff --git a/build/integration/features/bootstrap/BasicStructure.php b/build/integration/features/bootstrap/BasicStructure.php
index 01a288a6c6a..bf3b1d50814 100644
--- a/build/integration/features/bootstrap/BasicStructure.php
+++ b/build/integration/features/bootstrap/BasicStructure.php
@@ -152,6 +152,14 @@ trait BasicStructure{
if (!file_exists("../../core/skeleton/FOLDER")) {
mkdir("../../core/skeleton/FOLDER", 0777, true);
}
+ if (!file_exists("../../core/skeleton/PARENT")) {
+ mkdir("../../core/skeleton/PARENT", 0777, true);
+ }
+ file_put_contents("../../core/skeleton/PARENT/" . "parent.txt", "ownCloud test text file\n");
+ if (!file_exists("../../core/skeleton/PARENT/CHILD")) {
+ mkdir("../../core/skeleton/PARENT/CHILD", 0777, true);
+ }
+ file_put_contents("../../core/skeleton/PARENT/CHILD/" . "child.txt", "ownCloud test text file\n");
}
@@ -165,6 +173,16 @@ trait BasicStructure{
if (is_dir("../../core/skeleton/FOLDER")) {
rmdir("../../core/skeleton/FOLDER");
}
+ self::removeFile("../../core/skeleton/PARENT/CHILD/", "child.txt");
+ if (is_dir("../../core/skeleton/PARENT/CHILD")) {
+ rmdir("../../core/skeleton/PARENT/CHILD");
+ }
+ self::removeFile("../../core/skeleton/PARENT/", "parent.txt");
+ if (is_dir("../../core/skeleton/PARENT")) {
+ rmdir("../../core/skeleton/PARENT");
+ }
+
+
}
}
diff --git a/build/integration/features/bootstrap/Sharing.php b/build/integration/features/bootstrap/Sharing.php
index 9c5dc9f374b..5103b4af508 100644
--- a/build/integration/features/bootstrap/Sharing.php
+++ b/build/integration/features/bootstrap/Sharing.php
@@ -273,7 +273,7 @@ trait Sharing{
}
/**
- * @Given /^file "([^"]*)" from user "([^"]*)" is shared with user "([^"]*)"$/
+ * @Given /^file "([^"]*)" of user "([^"]*)" is shared with user "([^"]*)"$/
*/
public function assureFileIsShared($filepath, $user1, $user2){
$fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/apps/files_sharing/api/v{$this->sharingApiVersion}/shares" . "?path=$filepath";
@@ -295,7 +295,7 @@ trait Sharing{
}
/**
- * @Given /^file "([^"]*)" from user "([^"]*)" is shared with group "([^"]*)"$/
+ * @Given /^file "([^"]*)" of user "([^"]*)" is shared with group "([^"]*)"$/
*/
public function assureFileIsSharedWithGroup($filepath, $user, $group){
$fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/apps/files_sharing/api/v{$this->sharingApiVersion}/shares" . "?path=$filepath";
diff --git a/build/integration/features/bootstrap/WebDav.php b/build/integration/features/bootstrap/WebDav.php
index 1bda8175eeb..567f189c61e 100644
--- a/build/integration/features/bootstrap/WebDav.php
+++ b/build/integration/features/bootstrap/WebDav.php
@@ -2,8 +2,9 @@
use Behat\Behat\Context\Context;
use Behat\Behat\Context\SnippetAcceptingContext;
-use GuzzleHttp\Client;
+use GuzzleHttp\Client as GClient;
use GuzzleHttp\Message\ResponseInterface;
+use Sabre\DAV\Client as SClient;
require __DIR__ . '/../../vendor/autoload.php';
@@ -22,7 +23,7 @@ trait WebDav{
public function makeDavRequest($user, $method, $path, $headers){
$fullUrl = substr($this->baseUrl, 0, -4) . $this->davPath . "$path";
- $client = new Client();
+ $client = new GClient();
$options = [];
if ($user === 'admin') {
$options['auth'] = $this->adminUser;
@@ -30,10 +31,11 @@ trait WebDav{
$options['auth'] = [$user, $this->regularUser];
}
$request = $client->createRequest($method, $fullUrl, $options);
- foreach ($headers as $key => $value) {
- $request->addHeader($key, $value);
+ if (!is_null($headers)){
+ foreach ($headers as $key => $value) {
+ $request->addHeader($key, $value);
+ }
}
- //$this->response = $client->send($request);
return $client->send($request);
}
@@ -56,5 +58,64 @@ trait WebDav{
$this->response = $this->makeDavRequest($user, "MOVE", $fileSource, $headers);
}
+ /**
+ * @When /^Downloading file "([^"]*)" with range "([^"]*)"$/
+ */
+ public function downloadFileWithRange($fileSource, $range){
+ $fullUrl = substr($this->baseUrl, 0, -4) . $this->davPath;
+ $headers['Range'] = $range;
+ $this->response = $this->makeDavRequest($this->currentUser, "GET", $fileSource, $headers);
+ }
+
+ /**
+ * @Then /^Downloaded content should be "([^"]*)"$/
+ */
+ public function downloadedContentShouldBe($content){
+ PHPUnit_Framework_Assert::assertEquals($content, (string)$this->response->getBody());
+ }
+
+ /*Returns the elements of a propfind, $folderDepth requires 1 to see elements without children*/
+ public function listFolder($user, $path, $folderDepth){
+ $fullUrl = substr($this->baseUrl, 0, -4);
+
+ $settings = array(
+ 'baseUri' => $fullUrl,
+ 'userName' => $user,
+ );
+
+ if ($user === 'admin') {
+ $settings['password'] = $this->adminUser[1];
+ } else {
+ $settings['password'] = $this->regularUser;
+ }
+
+ $client = new SClient($settings);
+
+ $response = $client->propfind($this->davPath . "/", array(
+ '{DAV:}getetag'
+ ), $folderDepth);
+
+ return $response;
+ }
+
+ /**
+ * @Then /^user "([^"]*)" should see following elements$/
+ * @param \Behat\Gherkin\Node\TableNode|null $expectedElements
+ */
+ public function checkElementList($user, $expectedElements){
+ $elementList = $this->listFolder($user, '/', 2);
+ if ($expectedElements instanceof \Behat\Gherkin\Node\TableNode) {
+ $elementRows = $expectedElements->getRows();
+ $elementsSimplified = $this->simplifyArray($elementRows);
+ foreach($elementsSimplified as $expectedElement) {
+ $webdavPath = "/" . $this->davPath . $expectedElement;
+ if (!array_key_exists($webdavPath,$elementList)){
+ PHPUnit_Framework_Assert::fail("$webdavPath" . " is not in propfind answer");
+ }
+ }
+ }
+ }
+
+
}
diff --git a/build/integration/features/sharing-v1.feature b/build/integration/features/sharing-v1.feature
index 32bb943d2d7..e00fd47baeb 100644
--- a/build/integration/features/sharing-v1.feature
+++ b/build/integration/features/sharing-v1.feature
@@ -199,7 +199,7 @@ Feature: sharing
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 file "textfile0.txt" of 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"
@@ -209,7 +209,7 @@ Feature: sharing
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 file "textfile0.txt" of 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"
@@ -221,8 +221,8 @@ Feature: sharing
And user "user1" exists
And user "user2" exists
And user "user3" exists
- And file "textfile0.txt" from user "user0" is shared with user "user1"
- And file "textfile0.txt" from user "user0" is shared with user "user2"
+ And file "textfile0.txt" of user "user0" is shared with user "user1"
+ And file "textfile0.txt" of user "user0" is shared with user "user2"
And As an "user0"
When sending "GET" to "/apps/files_sharing/api/v1/shares?path=textfile0.txt"
Then the OCS status code should be "100"
@@ -236,8 +236,8 @@ Feature: sharing
And user "user1" exists
And user "user2" exists
And user "user3" exists
- And file "textfile0.txt" from user "user0" is shared with user "user1"
- And file "textfile0.txt" from user "user1" is shared with user "user2"
+ And file "textfile0.txt" of user "user0" is shared with user "user1"
+ And file "textfile0.txt" of user "user1" is shared with user "user2"
And As an "user0"
When sending "GET" to "/apps/files_sharing/api/v1/shares?reshares=true&path=textfile0.txt"
Then the OCS status code should be "100"
@@ -249,7 +249,7 @@ Feature: sharing
Scenario: getting share info of a share
Given user "user0" exists
And user "user1" exists
- And file "textfile0.txt" from user "user0" is shared with user "user1"
+ And file "textfile0.txt" of user "user0" is shared with user "user1"
And As an "user0"
When Getting info of last share
Then the OCS status code should be "100"
@@ -279,7 +279,7 @@ Feature: sharing
And user "user1" exists
And group "group1" exists
And user "user1" belongs to group "group1"
- And file "textfile0.txt" from user "user0" is shared with group "group1"
+ And file "textfile0.txt" of user "user0" is shared with group "group1"
And User "user1" moved file "/textfile0.txt" to "/FOLDER/textfile0.txt"
And As an "user0"
When Updating last share with
@@ -306,7 +306,7 @@ Feature: sharing
Scenario: Sharee can see the share
Given user "user0" exists
And user "user1" exists
- And file "textfile0.txt" from user "user0" is shared with user "user1"
+ And file "textfile0.txt" of user "user0" is shared with user "user1"
And As an "user1"
When sending "GET" to "/apps/files_sharing/api/v1/shares?shared_with_me=true"
Then the OCS status code should be "100"
@@ -357,19 +357,35 @@ Feature: sharing
Given user "user0" exists
And user "user1" exists
And user "user2" exists
- And file "textfile0.txt" from user "user0" is shared with user "user1"
+ And file "textfile0.txt" of user "user0" is shared with user "user1"
And As an "user2"
When Getting info of last share
Then the OCS status code should be "404"
And the HTTP status code should be "200"
+ Scenario: Share of folder and sub-folder to same user - core#20645
+ Given As an "admin"
+ And user "user0" exists
+ And user "user1" exists
+ And group "group0" exists
+ And user "user1" belongs to group "group0"
+ And file "/PARENT" of user "user0" is shared with user "user1"
+ When file "/PARENT/CHILD" of user "user0" is shared with group "group0"
+ Then user "user1" should see following elements
+ | /FOLDER/ |
+ | /PARENT/ |
+ | /CHILD/ |
+ | /PARENT/parent.txt |
+ | /CHILD/child.txt |
+ And the HTTP status code should be "200"
+
Scenario: Delete all group shares
Given As an "admin"
And user "user0" exists
And user "user1" exists
And group "group1" exists
And user "user1" belongs to group "group1"
- And file "textfile0.txt" from user "user0" is shared with group "group1"
+ And file "textfile0.txt" of user "user0" is shared with group "group1"
And User "user1" moved file "/textfile0.txt" to "/FOLDER/textfile0.txt"
And As an "user0"
And Deleting last share
@@ -382,7 +398,7 @@ Feature: sharing
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 file "textfile0.txt" of user "user0" is shared with user "user1"
And As an "user0"
When Deleting last share
Then the OCS status code should be "100"
diff --git a/build/integration/features/webdav-related.feature b/build/integration/features/webdav-related.feature
index 961b6b03431..16955e27063 100644
--- a/build/integration/features/webdav-related.feature
+++ b/build/integration/features/webdav-related.feature
@@ -9,6 +9,12 @@ Feature: sharing
When User "user0" moves file "/textfile0.txt" to "/FOLDER/textfile0.txt"
Then the HTTP status code should be "201"
+ Scenario: download a file with range
+ Given using dav path "remote.php/webdav"
+ And As an "admin"
+ When Downloading file "/welcome.txt" with range "bytes=51-77"
+ Then Downloaded content should be "example file for developers"
+