diff --git a/.drone.yml b/.drone.yml index 5d4ab2ca96..c7c3764459 100644 --- a/.drone.yml +++ b/.drone.yml @@ -387,6 +387,15 @@ pipeline: when: matrix: TESTS: integration-sharees-features + integration-sharees-v2-features: + image: nextcloudci/integration-php7.0:integration-php7.0-3 + commands: + - ./occ maintenance:install --admin-pass=admin + - cd build/integration + - ./run.sh sharees_features/sharees_provisioningapiv2.feature + when: + matrix: + TESTS: integration-sharees-v2-features integration-setup-features: image: nextcloudci/integration-php7.0:integration-php7.0-3 commands: @@ -487,6 +496,7 @@ matrix: - TESTS: integration-provisioning-v2 - TESTS: integration-webdav-related - TESTS: integration-sharees-features + - TESTS: integration-sharees-v2-features - TESTS: integration-setup-features - TESTS: integration-filesdrop-features - TESTS: integration-transfer-ownership-features diff --git a/apps/provisioning_api/lib/Controller/GroupsController.php b/apps/provisioning_api/lib/Controller/GroupsController.php index c772076c3d..2d329bf974 100644 --- a/apps/provisioning_api/lib/Controller/GroupsController.php +++ b/apps/provisioning_api/lib/Controller/GroupsController.php @@ -164,7 +164,7 @@ class GroupsController extends OCSController { throw new OCSException('', 102); } - return new DataResponse(null, 100); + return new DataResponse(); } /** diff --git a/build/integration/features/bootstrap/AppConfiguration.php b/build/integration/features/bootstrap/AppConfiguration.php index 2f84dce3f1..39fee5e361 100644 --- a/build/integration/features/bootstrap/AppConfiguration.php +++ b/build/integration/features/bootstrap/AppConfiguration.php @@ -62,13 +62,17 @@ trait AppConfiguration { $body = new \Behat\Gherkin\Node\TableNode([['value', $value]]); $this->sendingToWith('post', "/apps/testing/api/v1/app/{$app}/{$parameter}", $body); $this->theHTTPStatusCodeShouldBe('200'); - $this->theOCSStatusCodeShouldBe('100'); + if ($this->apiVersion === 1) { + $this->theOCSStatusCodeShouldBe('100'); + } } protected function setStatusTestingApp($enabled) { $this->sendingTo(($enabled ? 'post' : 'delete'), '/cloud/apps/testing'); $this->theHTTPStatusCodeShouldBe('200'); - $this->theOCSStatusCodeShouldBe('100'); + if ($this->apiVersion === 1) { + $this->theOCSStatusCodeShouldBe('100'); + } $this->sendingTo('get', '/cloud/apps?filter=enabled'); $this->theHTTPStatusCodeShouldBe('200'); diff --git a/build/integration/features/bootstrap/BasicStructure.php b/build/integration/features/bootstrap/BasicStructure.php index 8961efc6f3..ec23916d61 100644 --- a/build/integration/features/bootstrap/BasicStructure.php +++ b/build/integration/features/bootstrap/BasicStructure.php @@ -83,11 +83,11 @@ trait BasicStructure { } /** - * @Given /^using api version "([^"]*)"$/ + * @Given /^using api version "(\d+)"$/ * @param string $version */ public function usingApiVersion($version) { - $this->apiVersion = $version; + $this->apiVersion = (int) $version; } /** diff --git a/build/integration/features/bootstrap/Provisioning.php b/build/integration/features/bootstrap/Provisioning.php index 0055ff15de..2e17508120 100644 --- a/build/integration/features/bootstrap/Provisioning.php +++ b/build/integration/features/bootstrap/Provisioning.php @@ -331,6 +331,12 @@ trait Provisioning { ]; $this->response = $client->send($client->createRequest("DELETE", $fullUrl, $options)); + + if ($this->currentServer === 'LOCAL'){ + unset($this->createdGroups[$group]); + } elseif ($this->currentServer === 'REMOTE') { + unset($this->createdRemoteGroups[$group]); + } } /** @@ -748,7 +754,7 @@ trait Provisioning { } $this->usingServer('REMOTE'); foreach($this->createdRemoteGroups as $remoteGroup) { - $this->deleteUser($remoteGroup); + $this->deleteGroup($remoteGroup); } $this->usingServer($previousServer); } diff --git a/build/integration/features/favorites.feature b/build/integration/features/favorites.feature index 9722948dac..3f90b7b42b 100644 --- a/build/integration/features/favorites.feature +++ b/build/integration/features/favorites.feature @@ -133,4 +133,3 @@ Feature: favorite Then user "user0" in folder "/subfolder" should have favorited the following elements | /subfolder/textfile0.txt | | /subfolder/textfile2.txt | - diff --git a/build/integration/run.sh b/build/integration/run.sh index f423c3e6fb..282a430339 100755 --- a/build/integration/run.sh +++ b/build/integration/run.sh @@ -58,7 +58,7 @@ RESULT=$? kill $PHPPID kill $PHPPID_FED -if [ "$INSTALLED" -eq "true" ]; then +if [ "$INSTALLED" == "true" ]; then $OCC files_external:delete -y $ID_STORAGE diff --git a/build/integration/sharees_features/sharees_provisioningapiv2.feature b/build/integration/sharees_features/sharees_provisioningapiv2.feature new file mode 100644 index 0000000000..37ab896ee2 --- /dev/null +++ b/build/integration/sharees_features/sharees_provisioningapiv2.feature @@ -0,0 +1,240 @@ +Feature: sharees_provisioningapiv2 + Background: + Given using api version "2" + And user "test" exists + And user "Sharee1" exists + And group "ShareeGroup" exists + And user "test" belongs to group "ShareeGroup" + + Scenario: Search without exact match + Given As an "test" + When getting sharees for + | search | Sharee | + | itemType | file | + Then the OCS status code should be "200" + And the HTTP status code should be "200" + And "exact users" sharees returned is empty + And "users" sharees returned are + | Sharee1 | 0 | Sharee1 | + And "exact groups" sharees returned is empty + And "groups" sharees returned are + | ShareeGroup | 1 | ShareeGroup | + And "exact remotes" sharees returned is empty + And "remotes" sharees returned is empty + + Scenario: Search without exact match not-exact casing + Given As an "test" + When getting sharees for + | search | sharee | + | itemType | file | + Then the OCS status code should be "200" + And the HTTP status code should be "200" + And "exact users" sharees returned is empty + And "users" sharees returned are + | Sharee1 | 0 | Sharee1 | + And "exact groups" sharees returned is empty + And "groups" sharees returned are + | ShareeGroup | 1 | ShareeGroup | + And "exact remotes" sharees returned is empty + And "remotes" sharees returned is empty + + Scenario: Search only with group members - denied + Given As an "test" + And parameter "shareapi_only_share_with_group_members" of app "core" is set to "yes" + When getting sharees for + | search | sharee | + | itemType | file | + Then the OCS status code should be "200" + And the HTTP status code should be "200" + And "exact users" sharees returned is empty + And "users" sharees returned is empty + And "exact groups" sharees returned is empty + And "groups" sharees returned are + | ShareeGroup | 1 | ShareeGroup | + And "exact remotes" sharees returned is empty + And "remotes" sharees returned is empty + + Scenario: Search only with group members - allowed + Given As an "test" + And parameter "shareapi_only_share_with_group_members" of app "core" is set to "yes" + And user "Sharee1" belongs to group "ShareeGroup" + When getting sharees for + | search | sharee | + | itemType | file | + Then the OCS status code should be "200" + And the HTTP status code should be "200" + And "exact users" sharees returned is empty + And "users" sharees returned are + | Sharee1 | 0 | Sharee1 | + And "exact groups" sharees returned is empty + And "groups" sharees returned are + | ShareeGroup | 1 | ShareeGroup | + And "exact remotes" sharees returned is empty + And "remotes" sharees returned is empty + + Scenario: Search only with group members - no group as non-member + Given As an "Sharee1" + And parameter "shareapi_only_share_with_group_members" of app "core" is set to "yes" + When getting sharees for + | search | sharee | + | itemType | file | + Then the OCS status code should be "200" + And the HTTP status code should be "200" + And "exact users" sharees returned is empty + And "users" sharees returned is empty + And "exact groups" sharees returned is empty + And "groups" sharees returned is empty + And "exact remotes" sharees returned is empty + And "remotes" sharees returned is empty + + Scenario: Search without exact match no iteration allowed + Given As an "test" + And parameter "shareapi_allow_share_dialog_user_enumeration" of app "core" is set to "no" + When getting sharees for + | search | Sharee | + | itemType | file | + Then the OCS status code should be "200" + And the HTTP status code should be "200" + And "exact users" sharees returned is empty + And "users" sharees returned is empty + And "exact groups" sharees returned is empty + And "groups" sharees returned is empty + And "exact remotes" sharees returned is empty + And "remotes" sharees returned is empty + + Scenario: Search with exact match no iteration allowed + Given As an "test" + And parameter "shareapi_allow_share_dialog_user_enumeration" of app "core" is set to "no" + When getting sharees for + | search | Sharee1 | + | itemType | file | + Then the OCS status code should be "200" + And the HTTP status code should be "200" + And "exact users" sharees returned are + | Sharee1 | 0 | Sharee1 | + And "users" sharees returned is empty + And "exact groups" sharees returned is empty + And "groups" sharees returned is empty + And "exact remotes" sharees returned is empty + And "remotes" sharees returned is empty + + Scenario: Search with exact match group no iteration allowed + Given As an "test" + And parameter "shareapi_allow_share_dialog_user_enumeration" of app "core" is set to "no" + When getting sharees for + | search | ShareeGroup | + | itemType | file | + Then the OCS status code should be "200" + And the HTTP status code should be "200" + And "exact users" sharees returned is empty + And "users" sharees returned is empty + And "exact groups" sharees returned are + | ShareeGroup | 1 | ShareeGroup | + And "groups" sharees returned is empty + And "exact remotes" sharees returned is empty + And "remotes" sharees returned is empty + + Scenario: Search with exact match + Given As an "test" + When getting sharees for + | search | Sharee1 | + | itemType | file | + Then the OCS status code should be "200" + And the HTTP status code should be "200" + Then "exact users" sharees returned are + | Sharee1 | 0 | Sharee1 | + Then "users" sharees returned is empty + Then "exact groups" sharees returned is empty + Then "groups" sharees returned is empty + Then "exact remotes" sharees returned is empty + Then "remotes" sharees returned is empty + + Scenario: Search with exact match not-exact casing + Given As an "test" + When getting sharees for + | search | sharee1 | + | itemType | file | + Then the OCS status code should be "200" + And the HTTP status code should be "200" + Then "exact users" sharees returned are + | Sharee1 | 0 | Sharee1 | + Then "users" sharees returned is empty + Then "exact groups" sharees returned is empty + Then "groups" sharees returned is empty + Then "exact remotes" sharees returned is empty + Then "remotes" sharees returned is empty + + Scenario: Search with exact match not-exact casing group + Given As an "test" + When getting sharees for + | search | shareegroup | + | itemType | file | + Then the OCS status code should be "200" + And the HTTP status code should be "200" + Then "exact users" sharees returned is empty + Then "users" sharees returned is empty + Then "exact groups" sharees returned are + | ShareeGroup | 1 | ShareeGroup | + Then "groups" sharees returned is empty + Then "exact remotes" sharees returned is empty + Then "remotes" sharees returned is empty + + Scenario: Search with "self" + Given As an "Sharee1" + When getting sharees for + | search | Sharee1 | + | itemType | file | + Then the OCS status code should be "200" + And the HTTP status code should be "200" + Then "exact users" sharees returned are + | Sharee1 | 0 | Sharee1 | + Then "users" sharees returned is empty + Then "exact groups" sharees returned is empty + Then "groups" sharees returned is empty + Then "exact remotes" sharees returned is empty + Then "remotes" sharees returned is empty + + Scenario: Remote sharee for files + Given As an "test" + When getting sharees for + | search | test@localhost | + | itemType | file | + Then the OCS status code should be "200" + And the HTTP status code should be "200" + Then "exact users" sharees returned is empty + Then "users" sharees returned is empty + Then "exact groups" sharees returned is empty + Then "groups" sharees returned is empty + Then "exact remotes" sharees returned are + | test@localhost | 6 | test@localhost | + Then "remotes" sharees returned is empty + + Scenario: Remote sharee for calendars not allowed + Given As an "test" + When getting sharees for + | search | test@localhost | + | itemType | calendar | + Then the OCS status code should be "200" + And the HTTP status code should be "200" + Then "exact users" sharees returned is empty + Then "users" sharees returned is empty + Then "exact groups" sharees returned is empty + Then "groups" sharees returned is empty + Then "exact remotes" sharees returned is empty + Then "remotes" sharees returned is empty + + Scenario: Group sharees not returned when group sharing is disabled + Given As an "test" + And parameter "shareapi_allow_group_sharing" of app "core" is set to "no" + When getting sharees for + | search | sharee | + | itemType | file | + Then the OCS status code should be "200" + And the HTTP status code should be "200" + And "exact users" sharees returned is empty + And "users" sharees returned are + | Sharee1 | 0 | Sharee1 | + And "exact groups" sharees returned is empty + And "groups" sharees returned is empty + And "exact remotes" sharees returned is empty + And "remotes" sharees returned is empty