@@ -423,15 +423,6 @@ pipeline: | |||
when: | |||
matrix: | |||
TESTS: integration-ldap-features | |||
integration-trashbin: | |||
image: nextcloudci/integration-php7.0:integration-php7.0-3 | |||
commands: | |||
- ./occ maintenance:install --admin-pass=admin | |||
- cd build/integration | |||
- ./run.sh features/trashbin.feature | |||
when: | |||
matrix: | |||
TESTS: integration-trashbin | |||
nodb-codecov: | |||
image: nextcloudci/php7.0:php7.0-7 | |||
commands: | |||
@@ -500,7 +491,6 @@ matrix: | |||
- TESTS: integration-filesdrop-features | |||
- TESTS: integration-transfer-ownership-features | |||
- TESTS: integration-ldap-features | |||
- TESTS: integration-trashbin | |||
- TESTS: jsunit | |||
- TESTS: check-autoloader | |||
- TESTS: app-check-code |
@@ -35,7 +35,6 @@ require __DIR__ . '/../../vendor/autoload.php'; | |||
trait BasicStructure { | |||
use Auth; | |||
use Trashbin; | |||
/** @var string */ | |||
private $currentUser = ''; | |||
@@ -354,6 +353,16 @@ trait BasicStructure { | |||
fclose($file); | |||
} | |||
/** | |||
* @When User :user empties trashbin | |||
* @param string $user | |||
*/ | |||
public function emptyTrashbin($user) { | |||
$body = new \Behat\Gherkin\Node\TableNode([['allfiles', 'true'], ['dir', '%2F']]); | |||
$this->sendingToWithDirectUrl('POST', "/index.php/apps/files_trashbin/ajax/delete.php", $body); | |||
$this->theHTTPStatusCodeShouldBe('200'); | |||
} | |||
/** | |||
* @When Sleep for :seconds seconds | |||
* @param int $seconds |
@@ -1,120 +0,0 @@ | |||
<?php | |||
/** | |||
* @author Vincent Petry <pvince81@owncloud.com> | |||
* | |||
* @copyright Copyright (c) 2017, ownCloud GmbH. | |||
* @license AGPL-3.0 | |||
* | |||
* This code is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU Affero General Public License, version 3, | |||
* as published by the Free Software Foundation. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU Affero General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Affero General Public License, version 3, | |||
* along with this program. If not, see <http://www.gnu.org/licenses/> | |||
* | |||
*/ | |||
use GuzzleHttp\Client; | |||
use GuzzleHttp\Message\ResponseInterface; | |||
require __DIR__ . '/../../vendor/autoload.php'; | |||
/** | |||
* Trashbin functions | |||
*/ | |||
trait Trashbin { | |||
/** | |||
* @When User :user empties trashbin | |||
* @param string $user user | |||
*/ | |||
public function emptyTrashbin($user) { | |||
$this->asAn($user); | |||
$body = new \Behat\Gherkin\Node\TableNode([['allfiles', 'true'], ['dir', '%2F']]); | |||
$this->sendingToWithDirectUrl('POST', "/index.php/apps/files_trashbin/ajax/delete.php", $body); | |||
$this->theHTTPStatusCodeShouldBe('200'); | |||
} | |||
/** | |||
* List trashbin folder | |||
* | |||
* @param string $user user | |||
* @param string $path path | |||
* @return array response | |||
*/ | |||
public function listTrashbinFolder($user, $path){ | |||
$this->asAn($user); | |||
$params = '?dir=' . rawurlencode('/' . trim($path, '/')); | |||
$this->sendingToWithDirectUrl('GET', '/index.php/apps/files_trashbin/ajax/list.php' . $params, null); | |||
$this->theHTTPStatusCodeShouldBe('200'); | |||
$response = json_decode($this->response->getBody(), true); | |||
return $response['data']['files']; | |||
} | |||
/** | |||
* @Then /^as "([^"]*)" the (file|folder|entry) "([^"]*)" exists in trash$/ | |||
* @param string $user | |||
* @param string $entryText | |||
* @param string $path | |||
*/ | |||
public function asTheFileOrFolderExistsInTrash($user, $entryText, $path) { | |||
$path = trim($path, '/'); | |||
$sections = explode('/', $path, 2); | |||
$firstEntry = $this->findFirstTrashedEntry($user, trim($sections[0], '/')); | |||
PHPUnit_Framework_Assert::assertNotNull($firstEntry); | |||
// query was on the main element ? | |||
if (count($sections) === 1) { | |||
// already found, return | |||
return; | |||
} | |||
$subdir = trim(dirname($sections[1]), '/'); | |||
if ($subdir !== '' && $subdir !== '.') { | |||
$subdir = $firstEntry . '/' . $subdir; | |||
} else { | |||
$subdir = $firstEntry; | |||
} | |||
$listing = $this->listTrashbinFolder($user, $subdir); | |||
$checkedName = basename($path); | |||
$found = false; | |||
foreach ($listing as $entry) { | |||
if ($entry['name'] === $checkedName) { | |||
$found = true; | |||
break; | |||
} | |||
} | |||
PHPUnit_Framework_Assert::assertTrue($found); | |||
} | |||
/** | |||
* Finds the first trashed entry matching the given name | |||
* | |||
* @param string $name | |||
* @return string|null real entry name with timestamp suffix or null if not found | |||
*/ | |||
private function findFirstTrashedEntry($user, $name) { | |||
$listing = $this->listTrashbinFolder($user, '/'); | |||
foreach ($listing as $entry) { | |||
if ($entry['name'] === $name) { | |||
return $entry['name'] . '.d' . ((int)$entry['mtime'] / 1000); | |||
} | |||
} | |||
return null; | |||
} | |||
} | |||
@@ -134,16 +134,3 @@ Feature: favorite | |||
| /subfolder/textfile0.txt | | |||
| /subfolder/textfile2.txt | | |||
Scenario: moving a favorite file out of a share keeps favorite state | |||
Given using old dav path | |||
And As an "admin" | |||
And user "user0" exists | |||
And user "user1" exists | |||
And user "user0" created a folder "/shared" | |||
And User "user0" moved file "/textfile0.txt" to "/shared/shared_file.txt" | |||
And folder "/shared" of user "user0" is shared with user "user1" | |||
And user "user1" favorites element "/shared/shared_file.txt" | |||
When User "user1" moved file "/shared/shared_file.txt" to "/taken_out.txt" | |||
Then user "user1" in folder "/" should have favorited the following elements | |||
| /taken_out.txt | | |||
@@ -988,33 +988,3 @@ Feature: sharing | |||
And Updating last share with | |||
| publicUpload | true | | |||
Then the OCS status code should be "404" | |||
And the HTTP status code should be "200" | |||
Scenario: deleting file out of a share as recipient creates a backup for the owner | |||
Given As an "admin" | |||
And user "user0" exists | |||
And user "user1" exists | |||
And user "user0" created a folder "/shared" | |||
And User "user0" moved file "/textfile0.txt" to "/shared/shared_file.txt" | |||
And folder "/shared" of user "user0" is shared with user "user1" | |||
When User "user1" deletes file "/shared/shared_file.txt" | |||
Then as "user1" the file "/shared/shared_file.txt" does not exist | |||
And as "user0" the file "/shared/shared_file.txt" does not exist | |||
And as "user0" the file "/shared_file.txt" exists in trash | |||
And as "user1" the file "/shared_file.txt" exists in trash | |||
Scenario: deleting folder out of a share as recipient creates a backup for the owner | |||
Given As an "admin" | |||
And user "user0" exists | |||
And user "user1" exists | |||
And user "user0" created a folder "/shared" | |||
And user "user0" created a folder "/shared/sub" | |||
And User "user0" moved file "/textfile0.txt" to "/shared/sub/shared_file.txt" | |||
And folder "/shared" of user "user0" is shared with user "user1" | |||
When User "user1" deletes folder "/shared/sub" | |||
Then as "user1" the folder "/shared/sub" does not exist | |||
And as "user0" the folder "/shared/sub" does not exist | |||
And as "user0" the folder "/sub" exists in trash | |||
And as "user0" the file "/sub/shared_file.txt" exists in trash | |||
And as "user1" the folder "/sub" exists in trash | |||
And as "user1" the file "/sub/shared_file.txt" exists in trash |
@@ -1,13 +0,0 @@ | |||
Feature: trashbin | |||
Background: | |||
Given using api version "1" | |||
And using old dav path | |||
And As an "admin" | |||
And app "files_trashbin" is enabled | |||
Scenario: deleting a file moves it to trashbin | |||
Given As an "admin" | |||
And user "user0" exists | |||
When User "user0" deletes file "/textfile0.txt" | |||
Then as "user0" the file "/textfile0.txt" exists in trash | |||