]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add configuration flag to disable the background job for files_trashbin 29125/head
authorDaniel Kesselberg <mail@danielkesselberg.de>
Thu, 7 Oct 2021 19:34:16 +0000 (21:34 +0200)
committerDaniel Kesselberg <mail@danielkesselberg.de>
Mon, 11 Oct 2021 10:30:36 +0000 (12:30 +0200)
Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
apps/files_trashbin/lib/BackgroundJob/ExpireTrash.php
apps/files_trashbin/tests/BackgroundJob/ExpireTrashTest.php

index d319edd91dc4cf13f42e080541b59e6d0565ce5b..9e35273544b85127ea614915cf67d00e898cf307 100644 (file)
@@ -30,33 +30,35 @@ use OCA\Files_Trashbin\AppInfo\Application;
 use OCA\Files_Trashbin\Expiration;
 use OCA\Files_Trashbin\Helper;
 use OCA\Files_Trashbin\Trashbin;
+use OCP\IConfig;
 use OCP\IUser;
 use OCP\IUserManager;
 
 class ExpireTrash extends \OC\BackgroundJob\TimedJob {
 
+       /** @var IConfig */
+       private $config;
+
        /**
         * @var Expiration
         */
        private $expiration;
-       
+
        /**
         * @var IUserManager
         */
        private $userManager;
 
-       /**
-        * @param IUserManager|null $userManager
-        * @param Expiration|null $expiration
-        */
-       public function __construct(IUserManager $userManager = null,
+       public function __construct(IConfig $config = null,
+                                                               IUserManager $userManager = null,
                                                                Expiration $expiration = null) {
                // Run once per 30 minutes
                $this->setInterval(60 * 30);
 
-               if (is_null($expiration) || is_null($userManager)) {
+               if ($config === null || $expiration === null || $userManager === null) {
                        $this->fixDIForJobs();
                } else {
+                       $this->config = $config;
                        $this->userManager = $userManager;
                        $this->expiration = $expiration;
                }
@@ -65,6 +67,7 @@ class ExpireTrash extends \OC\BackgroundJob\TimedJob {
        protected function fixDIForJobs() {
                /** @var Application $application */
                $application = \OC::$server->query(Application::class);
+               $this->config = $application->getContainer()->get(IConfig::class);
                $this->userManager = \OC::$server->getUserManager();
                $this->expiration = $application->getContainer()->query('Expiration');
        }
@@ -74,6 +77,11 @@ class ExpireTrash extends \OC\BackgroundJob\TimedJob {
         * @throws \Exception
         */
        protected function run($argument) {
+               $backgroundJob = $this->config->getAppValue('files_trashbin', 'background_job_expire_trash', 'yes');
+               if ($backgroundJob === 'no') {
+                       return;
+               }
+
                $maxAge = $this->expiration->getMaxAgeAsTimestamp();
                if (!$maxAge) {
                        return;
@@ -87,7 +95,7 @@ class ExpireTrash extends \OC\BackgroundJob\TimedJob {
                        $dirContent = Helper::getTrashFiles('/', $uid, 'mtime');
                        Trashbin::deleteExpiredFiles($dirContent, $uid);
                });
-               
+
                \OC_Util::tearDownFS();
        }
 
index 07e60ba8fbfe529dd810377f97eff25e933476dc..c49501608f7b909f6fce2a19307b88cbf1d6ef3a 100644 (file)
  * along with this program. If not, see <http://www.gnu.org/licenses/>
  *
  */
+
 namespace OCA\Files_Trashbin\Tests\BackgroundJob;
 
 use OCA\Files_Trashbin\BackgroundJob\ExpireTrash;
+use OCA\Files_Trashbin\Expiration;
 use OCP\BackgroundJob\IJobList;
+use OCP\IConfig;
+use OCP\ILogger;
 use OCP\IUserManager;
+use PHPUnit\Framework\MockObject\MockObject;
+use Test\TestCase;
+
+class ExpireTrashTest extends TestCase {
+       /** @var IConfig|MockObject */
+       private $config;
+
+       /** @var IUserManager|MockObject */
+       private $userManager;
+
+       /** @var Expiration|MockObject */
+       private $expiration;
+
+       /** @var IJobList|MockObject */
+       private $jobList;
+
+       /** @var ILogger|MockObject */
+       private $logger;
 
-class ExpireTrashTest extends \Test\TestCase {
-       public function testConstructAndRun() {
-               $backgroundJob = new ExpireTrash(
-                       $this->createMock(IUserManager::class),
-                       $this->getMockBuilder('OCA\Files_Trashbin\Expiration')->disableOriginalConstructor()->getMock()
-               );
+       protected function setUp(): void {
+               parent::setUp();
+
+               $this->config = $this->createMock(IConfig::class);
+               $this->userManager = $this->createMock(IUserManager::class);
+               $this->expiration = $this->createMock(Expiration::class);
+               $this->jobList = $this->createMock(IJobList::class);
+               $this->logger = $this->createMock(ILogger::class);
+
+               $this->jobList->expects($this->once())
+                       ->method('setLastRun');
+               $this->jobList->expects($this->once())
+                       ->method('setExecutionTime');
+       }
+
+       public function testConstructAndRun(): void {
+               $job = new ExpireTrash($this->config, $this->userManager, $this->expiration);
+               $job->execute($this->jobList, $this->logger);
+       }
 
-               $jobList = $this->createMock(IJobList::class);
+       public function testBackgroundJobDeactivated(): void {
+               $this->config->method('getAppValue')
+                       ->with('files_trashbin', 'background_job_expire_trash', 'yes')
+                       ->willReturn('no');
+               $this->expiration->expects($this->never())
+                       ->method('getMaxAgeAsTimestamp');
 
-               /** @var \OC\BackgroundJob\JobList $jobList */
-               $backgroundJob->execute($jobList);
-               $this->addToAssertionCount(1);
+               $job = new ExpireTrash($this->config, $this->userManager, $this->expiration);
+               $job->execute($this->jobList, $this->logger);
        }
 }