From 78a318d388bfe82e1a3adebeb75ac195cb1334d7 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Sat, 19 Nov 2016 20:26:53 +0100 Subject: [PATCH] Add test if repair step is already done Signed-off-by: Roeland Jago Douma --- lib/private/Repair.php | 3 +- lib/private/Repair/NC11/CleanPreviews.php | 18 +++++++-- tests/lib/Repair/NC11/CleanPreviewsTest.php | 44 ++++++++++++++++++++- 3 files changed, 59 insertions(+), 6 deletions(-) diff --git a/lib/private/Repair.php b/lib/private/Repair.php index c9f8dbfff6973..5efbb9f8e2eaa 100644 --- a/lib/private/Repair.php +++ b/lib/private/Repair.php @@ -158,7 +158,8 @@ public static function getRepairSteps() { ), new CleanPreviews( \OC::$server->getJobList(), - \OC::$server->getUserManager() + \OC::$server->getUserManager(), + \OC::$server->getConfig() ), ]; } diff --git a/lib/private/Repair/NC11/CleanPreviews.php b/lib/private/Repair/NC11/CleanPreviews.php index 0c6be0165fca7..94f5d19b79592 100644 --- a/lib/private/Repair/NC11/CleanPreviews.php +++ b/lib/private/Repair/NC11/CleanPreviews.php @@ -23,6 +23,7 @@ namespace OC\Repair\NC11; use OCP\BackgroundJob\IJobList; +use OCP\IConfig; use OCP\IUser; use OCP\IUserManager; use OCP\Migration\IOutput; @@ -36,16 +37,22 @@ class CleanPreviews implements IRepairStep { /** @var IUserManager */ private $userManager; + /** @var IConfig */ + private $config; + /** * MoveAvatars constructor. * * @param IJobList $jobList * @param IUserManager $userManager + * @param IConfig $config */ public function __construct(IJobList $jobList, - IUserManager $userManager) { + IUserManager $userManager, + IConfig $config) { $this->jobList = $jobList; $this->userManager = $userManager; + $this->config = $config; } /** @@ -56,8 +63,11 @@ public function getName() { } public function run(IOutput $output) { - $this->userManager->callForSeenUsers(function(IUser $user) { - $this->jobList->add(CleanPreviewsBackgroundJob::class, ['uid' => $user->getUID()]); - }); + if (!$this->config->getAppValue('core', 'previewsCleanedUp', false)) { + $this->userManager->callForSeenUsers(function (IUser $user) { + $this->jobList->add(CleanPreviewsBackgroundJob::class, ['uid' => $user->getUID()]); + }); + $this->config->setAppValue('core', 'previewsCleanedUp', 1); + } } } diff --git a/tests/lib/Repair/NC11/CleanPreviewsTest.php b/tests/lib/Repair/NC11/CleanPreviewsTest.php index 643f18e89b767..8abc6b7bab9d6 100644 --- a/tests/lib/Repair/NC11/CleanPreviewsTest.php +++ b/tests/lib/Repair/NC11/CleanPreviewsTest.php @@ -25,6 +25,7 @@ use OC\Repair\NC11\CleanPreviews; use OC\Repair\NC11\CleanPreviewsBackgroundJob; use OCP\BackgroundJob\IJobList; +use OCP\IConfig; use OCP\IUser; use OCP\IUserManager; use OCP\Migration\IOutput; @@ -39,6 +40,9 @@ class CleanPreviewsTest extends TestCase { /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ private $userManager; + /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ + private $config; + /** @var CleanPreviews */ private $repair; @@ -47,10 +51,12 @@ public function setUp() { $this->jobList = $this->createMock(IJobList::class); $this->userManager = $this->createMock(IUserManager::class); + $this->config = $this->createMock(IConfig::class); $this->repair = new CleanPreviews( $this->jobList, - $this->userManager + $this->userManager, + $this->config ); } @@ -87,6 +93,42 @@ public function testRun() { $this->equalTo(['uid' => 'user2']) ); + $this->config->expects($this->once()) + ->method('getAppValue') + ->with( + $this->equalTo('core'), + $this->equalTo('previewsCleanedUp'), + $this->equalTo(false) + )->willReturn(false); + $this->config->expects($this->once()) + ->method('setAppValue') + ->with( + $this->equalTo('core'), + $this->equalTo('previewsCleanedUp'), + $this->equalTo(1) + ); + + $this->repair->run($this->createMock(IOutput::class)); + } + + + public function testRunAlreadyDoone() { + $this->userManager->expects($this->never()) + ->method($this->anything()); + + $this->jobList->expects($this->never()) + ->method($this->anything()); + + $this->config->expects($this->once()) + ->method('getAppValue') + ->with( + $this->equalTo('core'), + $this->equalTo('previewsCleanedUp'), + $this->equalTo(false) + )->willReturn('1'); + $this->config->expects($this->never()) + ->method('setAppValue'); + $this->repair->run($this->createMock(IOutput::class)); }