diff --git a/apps/files_encryption/tests/trashbin.php b/apps/files_encryption/tests/trashbin.php
index 5d54b7db24f0b989f03bfad72e38b7ee4bdf5eda..a5479de1b8d93117f949eb27ddf8c4078220ec27 100755
--- a/apps/files_encryption/tests/trashbin.php
+++ b/apps/files_encryption/tests/trashbin.php
@@ -282,7 +282,7 @@ class Test_Encryption_Trashbin extends \PHPUnit_Framework_TestCase {
 		$timestamp = str_replace('d', '', $trashFileSuffix);
 
 		// delete file forever
-		$this->assertGreaterThan(0, \OCA\Files_Trashbin\Trashbin::delete($filename, $timestamp));
+		$this->assertGreaterThan(0, \OCA\Files_Trashbin\Trashbin::delete($filename, $this->userId, $timestamp));
 
 		// check if key for admin not exists
 		$this->assertFalse($this->view->file_exists(
diff --git a/apps/files_trashbin/ajax/delete.php b/apps/files_trashbin/ajax/delete.php
index ebabc5bc7a268317bbcfde38f7e4dc59e37c75b5..9d9c1dd100f47807db94af8b2b6a1ca1a38e1b81 100644
--- a/apps/files_trashbin/ajax/delete.php
+++ b/apps/files_trashbin/ajax/delete.php
@@ -37,7 +37,7 @@ foreach ($list as $file) {
 		$timestamp = null;
 	}
 
-	OCA\Files_Trashbin\Trashbin::delete($filename, $timestamp);
+	OCA\Files_Trashbin\Trashbin::delete($filename, \OCP\User::getUser(), $timestamp);
 	if (OCA\Files_Trashbin\Trashbin::file_exists($filename, $timestamp)) {
 		$error[] = $filename;
 		OC_Log::write('trashbin','can\'t delete ' . $filename . ' permanently.', OC_Log::ERROR);
diff --git a/apps/files_trashbin/ajax/list.php b/apps/files_trashbin/ajax/list.php
index e1f52e814bb2f206299721e0bf8eac591ce1eee4..6cad101d34adea35972a91da6024fd6698a22cfb 100644
--- a/apps/files_trashbin/ajax/list.php
+++ b/apps/files_trashbin/ajax/list.php
@@ -10,7 +10,7 @@ $data = array();
 
 // make filelist
 try {
-	$files = \OCA\Files_Trashbin\Helper::getTrashFiles($dir, $sortAttribute, $sortDirection);
+	$files = \OCA\Files_Trashbin\Helper::getTrashFiles($dir, \OCP\User::getUser(), $sortAttribute, $sortDirection);
 } catch (Exception $e) {
 	header("HTTP/1.0 404 Not Found");
 	exit();
diff --git a/apps/files_trashbin/ajax/undelete.php b/apps/files_trashbin/ajax/undelete.php
index 2b00078669ee42074ae9d63e8b1fac1bd43eaeb3..afab79fcac626153ff9c9a53943385c13ab6ca69 100644
--- a/apps/files_trashbin/ajax/undelete.php
+++ b/apps/files_trashbin/ajax/undelete.php
@@ -16,7 +16,7 @@ if (isset($_POST['allfiles']) and $_POST['allfiles'] === 'true') {
 	if ($dir === '' || $dir === '/') {
 		$dirListing = false;
 	}
-	foreach (OCA\Files_Trashbin\Helper::getTrashFiles($dir) as $file) {
+	foreach (OCA\Files_Trashbin\Helper::getTrashFiles($dir, \OCP\User::getUser()) as $file) {
 		$fileName = $file['name'];
 		if (!$dirListing) {
 			$fileName .= '.d' . $file['mtime'];
diff --git a/apps/files_trashbin/lib/helper.php b/apps/files_trashbin/lib/helper.php
index ebedce31abe107c6af6126d819a01c5fdc589b35..d0ca5fb153039a84816feb73fad208f11bde8ab3 100644
--- a/apps/files_trashbin/lib/helper.php
+++ b/apps/files_trashbin/lib/helper.php
@@ -11,14 +11,14 @@ class Helper
 	 *
 	 * @param string $dir path to the directory inside the trashbin
 	 * or empty to retrieve the root of the trashbin
+	 * @param string $user
 	 * @param string $sortAttribute attribute to sort on or empty to disable sorting
 	 * @param bool $sortDescending true for descending sort, false otherwise
 	 * @return \OCP\Files\FileInfo[]
 	 */
-	public static function getTrashFiles($dir, $sortAttribute = '', $sortDescending = false){
+	public static function getTrashFiles($dir, $user, $sortAttribute = '', $sortDescending = false){
 		$result = array();
 		$timestamp = null;
-		$user = \OCP\User::getUser();
 
 		$view = new \OC\Files\View('/' . $user . '/files_trashbin/files');
 
diff --git a/apps/files_trashbin/lib/trashbin.php b/apps/files_trashbin/lib/trashbin.php
index 1838c48d95d52869855442cda24132d9477490e1..d7c072749703cdfeb70167b02a6757013bd1c93d 100644
--- a/apps/files_trashbin/lib/trashbin.php
+++ b/apps/files_trashbin/lib/trashbin.php
@@ -540,12 +540,12 @@ class Trashbin {
 	 * delete file from trash bin permanently
 	 *
 	 * @param string $filename path to the file
+	 * @param string $user
 	 * @param int $timestamp of deletion time
 	 *
 	 * @return int size of deleted files
 	 */
-	public static function delete($filename, $timestamp = null) {
-		$user = \OCP\User::getUser();
+	public static function delete($filename, $user, $timestamp = null) {
 		$view = new \OC\Files\View('/' . $user);
 		$size = 0;
 
@@ -667,11 +667,11 @@ class Trashbin {
 	 * calculate remaining free space for trash bin
 	 *
 	 * @param integer $trashbinSize current size of the trash bin
+	 * @param string $user
 	 * @return int available free space for trash bin
 	 */
-	private static function calculateFreeSpace($trashbinSize) {
+	private static function calculateFreeSpace($trashbinSize, $user) {
 		$softQuota = true;
-		$user = \OCP\User::getUser();
 		$quota = \OC_Preferences::getValue($user, 'files', 'quota');
 		$view = new \OC\Files\View('/' . $user);
 		if ($quota === null || $quota === 'default') {
@@ -709,7 +709,7 @@ class Trashbin {
 
 		$size = self::getTrashbinSize($user);
 
-		$freeSpace = self::calculateFreeSpace($size);
+		$freeSpace = self::calculateFreeSpace($size, $user);
 
 		if ($freeSpace < 0) {
 			self::expire($size, $user);
@@ -725,50 +725,84 @@ class Trashbin {
 	 */
 	private static function expire($trashbinSize, $user) {
 
-		$view = new \OC\Files\View('/' . $user . '/files_trashbin');
-
 		// let the admin disable auto expire
 		$autoExpire = \OC_Config::getValue('trashbin_auto_expire', true);
 		if ($autoExpire === false) {
 			return 0;
 		}
 
-		$user = \OCP\User::getUser();
-		$availableSpace = self::calculateFreeSpace($trashbinSize);
+		$availableSpace = self::calculateFreeSpace($trashbinSize, $user);
 		$size = 0;
 
 		$retention_obligation = \OC_Config::getValue('trashbin_retention_obligation', self::DEFAULT_RETENTION_OBLIGATION);
 
 		$limit = time() - ($retention_obligation * 86400);
 
-		$dirContent = $view->getDirectoryContent('/files');
+		$dirContent = Helper::getTrashFiles('/', $user, 'mtime');
+
+		// delete all files older then $retention_obligation
+		list($delSize, $count) = self::deleteExpiredFiles($dirContent, $user, $limit, $retention_obligation);
+
+		$size += $delSize;
+		$availableSpace += $size;
+
+		// delete files from trash until we meet the trash bin size limit again
+		$size += self::deleteFiles(array_slice($dirContent, $count), $user, $availableSpace);
+
+		return $size;
+	}
+
+	/**
+	 * if the size limit for the trash bin is reached, we delete the oldest
+	 * files in the trash bin until we meet the limit again
+	 * @param array $files
+	 * @param string $user
+	 * @param int $availableSpace available disc space
+	 * @return int size of deleted files
+	 */
+	protected static function deleteFiles($files, $user, $availableSpace) {
+		$size = 0;
+
+		if ($availableSpace < 0) {
+			foreach ($files as $file) {
+				if ($availableSpace < 0) {
+					$tmp = self::delete($file['name'], $user, $file['mtime']);
+					\OC_Log::write('files_trashbin', 'remove "' . $file['name'] . '" (' . $tmp . 'B) to meet the limit of trash bin size (50% of available quota)', \OC_log::INFO);
+					$availableSpace += $tmp;
+					$size += $tmp;
+				} else {
+					break;
+				}
+			}
+		}
+		return $size;
+	}
 
-		foreach ($dirContent as $file) {
+	/**
+	 * delete files older then max storage time
+	 *
+	 * @param array $files list of files sorted by mtime
+	 * @param string $user
+	 * @param int $limit files older then limit should be deleted
+	 * @param int $retention_obligation max age of file in days
+	 * @return array size of deleted files and number of deleted files
+	 */
+	protected static function deleteExpiredFiles($files, $user, $limit, $retention_obligation) {
+		$size = 0;
+		$count = 0;
+		foreach ($files as $file) {
 			$timestamp = $file['mtime'];
-			$filename = pathinfo($file['name'], PATHINFO_FILENAME);
+			$filename = $file['name'];
 			if ($timestamp < $limit) {
-				$size += self::delete($filename, $timestamp);
+				$count++;
+				$size += self::delete($filename, $user, $timestamp);
 				\OC_Log::write('files_trashbin', 'remove "' . $filename . '" from trash bin because it is older than ' . $retention_obligation, \OC_log::INFO);
-			}
-		}
-		$availableSpace += $size;
-		// if size limit for trash bin reached, delete oldest files in trash bin
-		if ($availableSpace < 0) {
-			$query = \OC_DB::prepare('SELECT `location`,`type`,`id`,`timestamp` FROM `*PREFIX*files_trash`'
-				. ' WHERE `user`=? ORDER BY `timestamp` ASC');
-			$result = $query->execute(array($user))->fetchAll();
-			$length = count($result);
-			$i = 0;
-			while ($i < $length && $availableSpace < 0) {
-				$tmp = self::delete($result[$i]['id'], $result[$i]['timestamp']);
-				\OC_Log::write('files_trashbin', 'remove "' . $result[$i]['id'] . '" (' . $tmp . 'B) to meet the limit of trash bin size (50% of available quota)', \OC_log::INFO);
-				$availableSpace += $tmp;
-				$size += $tmp;
-				$i++;
+			} else {
+				break;
 			}
 		}
 
-		return $size;
+		return array($size, $count);
 	}
 
 	/**
diff --git a/apps/files_trashbin/tests/trashbin.php b/apps/files_trashbin/tests/trashbin.php
new file mode 100644
index 0000000000000000000000000000000000000000..6a8955f5d1d856a10af335b11bad3ef174dbd36e
--- /dev/null
+++ b/apps/files_trashbin/tests/trashbin.php
@@ -0,0 +1,321 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Bjoern Schiessle
+ * @copyright 2014 Bjoern Schiessle <schiessle@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library 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 along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+require_once __DIR__ . '/../../../lib/base.php';
+
+use OCA\Files_Trashbin;
+
+/**
+ * Class Test_Encryption_Crypt
+ */
+class Test_Trashbin extends \PHPUnit_Framework_TestCase {
+
+	const TEST_TRASHBIN_USER1 = "test-trashbin-user1";
+	const TEST_TRASHBIN_USER2 = "test-trashbin-user2";
+
+	private $trashRoot1;
+	private $trashRoot2;
+
+	private static $encryptionStatus;
+	private static $rememberRetentionObligation;
+	private static $rememberAutoExpire;
+
+	/**
+	 * @var \OC\Files\View
+	 */
+	private $rootView;
+
+	public static function setUpBeforeClass() {
+		// reset backend
+		\OC_User::clearBackends();
+		\OC_User::useBackend('database');
+
+		// clear share hooks
+		\OC_Hook::clear('OCP\\Share');
+		\OC::registerShareHooks();
+		\OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
+
+		//disable encryption
+		self::$encryptionStatus = \OC_App::isEnabled('files_encryption');
+		\OC_App::disable('files_encryption');
+
+		//configure trashbin
+		self::$rememberRetentionObligation = \OC_Config::getValue('trashbin_retention_obligation', Files_Trashbin\Trashbin::DEFAULT_RETENTION_OBLIGATION);
+		\OC_Config::setValue('trashbin_retention_obligation', 2);
+		self::$rememberAutoExpire = \OC_Config::getValue('trashbin_auto_expire', true);
+		\OC_Config::setValue('trashbin_auto_expire', true);
+
+
+		// register hooks
+		Files_Trashbin\Trashbin::registerHooks();
+
+		// create test user
+		self::loginHelper(self::TEST_TRASHBIN_USER2, true);
+		self::loginHelper(self::TEST_TRASHBIN_USER1, true);
+	}
+
+
+
+	public static function tearDownAfterClass() {
+		// cleanup test user
+		\OC_User::deleteUser(self::TEST_TRASHBIN_USER1);
+
+		if (self::$encryptionStatus === true) {
+			\OC_App::enable('files_encryption');
+		}
+
+		\OC_Config::setValue('trashbin_retention_obligation', self::$rememberRetentionObligation);
+		\OC_Config::setValue('trashbin_auto_expire', self::$rememberAutoExpire);
+
+		\OC_Hook::clear();
+	}
+
+	public function setUp() {
+		$this->trashRoot1 = '/' . self::TEST_TRASHBIN_USER1 . '/files_trashbin';
+		$this->trashRoot2 = '/' . self::TEST_TRASHBIN_USER2 . '/files_trashbin';
+		$this->rootView = new \OC\Files\View();
+		self::loginHelper(self::TEST_TRASHBIN_USER1);
+	}
+
+	public function tearDown() {
+		$this->rootView->deleteAll($this->trashRoot1);
+		$this->rootView->deleteAll($this->trashRoot2);
+	}
+
+	/**
+	 * test expiration of files older then the max storage time defined for the trash
+	 */
+	public function testExpireOldFiles() {
+
+		$currentTime = time();
+		$expireAt = $currentTime - 2*24*60*60;
+		$expiredDate = $currentTime - 3*24*60*60;
+
+		// create some files
+		\OC\Files\Filesystem::file_put_contents('file1.txt', 'file1');
+		\OC\Files\Filesystem::file_put_contents('file2.txt', 'file2');
+		\OC\Files\Filesystem::file_put_contents('file3.txt', 'file3');
+
+		// delete them so that they end up in the trash bin
+		\OC\Files\Filesystem::unlink('file1.txt');
+		\OC\Files\Filesystem::unlink('file2.txt');
+		\OC\Files\Filesystem::unlink('file3.txt');
+
+		//make sure that files are in the trash bin
+		$filesInTrash = OCA\Files_Trashbin\Helper::getTrashFiles('/', self::TEST_TRASHBIN_USER1, 'name');
+		$this->assertSame(3, count($filesInTrash));
+
+		// every second file will get a date in the past so that it will get expired
+		$manipulatedList = $this->manipulateDeleteTime($filesInTrash, $this->trashRoot1, $expiredDate);
+
+		$testClass = new TrashbinForTesting();
+		list($sizeOfDeletedFiles, $count) = $testClass->dummyDeleteExpiredFiles($manipulatedList, $expireAt);
+
+		$this->assertSame(10, $sizeOfDeletedFiles);
+		$this->assertSame(2, $count);
+
+		// only file2.txt should be left
+		$remainingFiles = array_slice($manipulatedList, $count);
+		$this->assertSame(1, count($remainingFiles));
+		$remainingFile = reset($remainingFiles);
+		$this->assertSame('file2.txt', $remainingFile['name']);
+
+		// check that file1.txt and file3.txt was really deleted
+		$newTrashContent = OCA\Files_Trashbin\Helper::getTrashFiles('/', self::TEST_TRASHBIN_USER1);
+		$this->assertSame(1, count($newTrashContent));
+		$element = reset($newTrashContent);
+		$this->assertSame('file2.txt', $element['name']);
+	}
+
+	/**
+	 * test expiration of files older then the max storage time defined for the trash
+	 * in this test we delete a shared file and check if both trash bins, the one from
+	 * the owner of the file and the one from the user who deleted the file get expired
+	 * correctly
+	 */
+	public function testExpireOldFilesShared() {
+
+		$currentTime = time();
+		$folder = "trashTest-" . $currentTime . '/';
+		$expiredDate = $currentTime - 3*24*60*60;
+
+		// create some files
+		\OC\Files\Filesystem::mkdir($folder);
+		\OC\Files\Filesystem::file_put_contents($folder . 'user1-1.txt', 'file1');
+		\OC\Files\Filesystem::file_put_contents($folder . 'user1-2.txt', 'file2');
+		\OC\Files\Filesystem::file_put_contents($folder . 'user1-3.txt', 'file3');
+		\OC\Files\Filesystem::file_put_contents($folder . 'user1-4.txt', 'file4');
+
+		//share user1-4.txt with user2
+		$fileInfo = \OC\Files\Filesystem::getFileInfo($folder);
+		$result = \OCP\Share::shareItem('folder', $fileInfo->getId(), \OCP\Share::SHARE_TYPE_USER, self::TEST_TRASHBIN_USER2, 31);
+		$this->assertTrue($result);
+
+		// delete them so that they end up in the trash bin
+		\OC\Files\Filesystem::unlink($folder . 'user1-1.txt');
+		\OC\Files\Filesystem::unlink($folder . 'user1-2.txt');
+		\OC\Files\Filesystem::unlink($folder . 'user1-3.txt');
+
+		$filesInTrash = OCA\Files_Trashbin\Helper::getTrashFiles('/', self::TEST_TRASHBIN_USER1, 'name');
+		$this->assertSame(3, count($filesInTrash));
+
+		// every second file will get a date in the past so that it will get expired
+		$this->manipulateDeleteTime($filesInTrash, $this->trashRoot1, $expiredDate);
+
+		// login as user2
+		self::loginHelper(self::TEST_TRASHBIN_USER2);
+
+		$this->assertTrue(\OC\Files\Filesystem::file_exists($folder . "user1-4.txt"));
+
+		// create some files
+		\OC\Files\Filesystem::file_put_contents('user2-1.txt', 'file1');
+		\OC\Files\Filesystem::file_put_contents('user2-2.txt', 'file2');
+
+		// delete them so that they end up in the trash bin
+		\OC\Files\Filesystem::unlink('user2-1.txt');
+		\OC\Files\Filesystem::unlink('user2-2.txt');
+
+		$filesInTrashUser2 = OCA\Files_Trashbin\Helper::getTrashFiles('/', self::TEST_TRASHBIN_USER2, 'name');
+		$this->assertSame(2, count($filesInTrashUser2));
+
+		// every second file will get a date in the past so that it will get expired
+		$this->manipulateDeleteTime($filesInTrashUser2, $this->trashRoot2, $expiredDate);
+
+		\OC\Files\Filesystem::unlink($folder . 'user1-4.txt');
+
+		$filesInTrashUser2AfterDelete = OCA\Files_Trashbin\Helper::getTrashFiles('/', self::TEST_TRASHBIN_USER2);
+
+		// user2-1.txt should have been expired
+		$this->verifyArray($filesInTrashUser2AfterDelete, array('user2-2.txt', 'user1-4.txt'));
+
+		// user1-1.txt and user1-3.txt should have been expired
+		$filesInTrashUser1AfterDelete = OCA\Files_Trashbin\Helper::getTrashFiles('/', self::TEST_TRASHBIN_USER1);
+
+		$this->verifyArray($filesInTrashUser1AfterDelete, array('user1-2.txt', 'user1-4.txt'));
+	}
+
+	/**
+	 * verify that the array contains the expected results
+	 * @param array $result
+	 * @param array $expected
+	 */
+	private function verifyArray($result, $expected) {
+		$this->assertSame(count($expected), count($result));
+		foreach ($expected as $expectedFile) {
+			$found = false;
+			foreach ($result as $fileInTrash) {
+				if ($expectedFile === $fileInTrash['name']) {
+					$found = true;
+					break;
+				}
+			}
+			if (!$found) {
+				// if we didn't found the expected file, something went wrong
+				$this->assertTrue(false, "can't find expected file '" . $expectedFile .  "' in trash bin");
+			}
+		}
+	}
+
+	private function manipulateDeleteTime($files, $trashRoot, $expireDate) {
+		$counter = 0;
+		foreach ($files as &$file) {
+			// modify every second file
+			$counter = ($counter + 1) % 2;
+			if ($counter === 1) {
+				$source = $trashRoot . '/files/' . $file['name'].'.d'.$file['mtime'];
+				$target = \OC\Files\Filesystem::normalizePath($trashRoot . '/files/' . $file['name'] . '.d' . $expireDate);
+				$this->rootView->rename($source, $target);
+				$file['mtime'] = $expireDate;
+			}
+		}
+		return \OCA\Files\Helper::sortFiles($files, 'mtime');
+	}
+
+
+	/**
+	 * test expiration of old files in the trash bin until the max size
+	 * of the trash bin is met again
+	 */
+	public function testExpireOldFilesUtilLimitsAreMet() {
+
+		// create some files
+		\OC\Files\Filesystem::file_put_contents('file1.txt', 'file1');
+		\OC\Files\Filesystem::file_put_contents('file2.txt', 'file2');
+		\OC\Files\Filesystem::file_put_contents('file3.txt', 'file3');
+
+		// delete them so that they end up in the trash bin
+		\OC\Files\Filesystem::unlink('file3.txt');
+		sleep(1); // make sure that every file has a unique mtime
+		\OC\Files\Filesystem::unlink('file2.txt');
+		sleep(1); // make sure that every file has a unique mtime
+		\OC\Files\Filesystem::unlink('file1.txt');
+
+		//make sure that files are in the trash bin
+		$filesInTrash = OCA\Files_Trashbin\Helper::getTrashFiles('/', self::TEST_TRASHBIN_USER1, 'mtime');
+		$this->assertSame(3, count($filesInTrash));
+
+		$testClass = new TrashbinForTesting();
+		$sizeOfDeletedFiles = $testClass->dummyDeleteFiles($filesInTrash, -8);
+
+		// the two oldest files (file3.txt and file2.txt) should be deleted
+		$this->assertSame(10, $sizeOfDeletedFiles);
+
+		$newTrashContent = OCA\Files_Trashbin\Helper::getTrashFiles('/', self::TEST_TRASHBIN_USER1);
+		$this->assertSame(1, count($newTrashContent));
+		$element = reset($newTrashContent);
+		$this->assertSame('file1.txt', $element['name']);
+	}
+
+	/**
+	 * @param string $user
+	 * @param bool $create
+	 * @param bool $password
+	 */
+	public static function loginHelper($user, $create = false) {
+		if ($create) {
+			try {
+				\OC_User::createUser($user, $user);
+			} catch(\Exception $e) { // catch username is already being used from previous aborted runs
+
+			}
+		}
+
+		\OC_Util::tearDownFS();
+		\OC_User::setUserId('');
+		\OC\Files\Filesystem::tearDown();
+		\OC_User::setUserId($user);
+		\OC_Util::setupFS($user);
+	}
+}
+
+
+// just a dummy class to make protected methods available for testing
+class TrashbinForTesting extends Files_Trashbin\Trashbin {
+	public function dummyDeleteExpiredFiles($files, $limit) {
+		// dummy value for $retention_obligation because it is not needed here
+		return parent::deleteExpiredFiles($files, \Test_Trashbin::TEST_TRASHBIN_USER1, $limit, 0);
+	}
+
+	public function dummyDeleteFiles($files, $availableSpace) {
+		return parent::deleteFiles($files, \Test_Trashbin::TEST_TRASHBIN_USER1, $availableSpace);
+	}
+}
diff --git a/tests/enable_all.php b/tests/enable_all.php
index 386ae2070e49f2c0878d6145a83dc073a8b61bd8..2368a194944b3879a74e90dabe4925c5de5b5925 100644
--- a/tests/enable_all.php
+++ b/tests/enable_all.php
@@ -17,6 +17,7 @@ function enableApp($app) {
 }
 
 enableApp('files_sharing');
+enableApp('files_trashbin');
 enableApp('files_encryption');
 enableApp('files_external');
 enableApp('user_ldap');