diff --git a/.gitignore b/.gitignore index 51f3fe7..d730b97 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,8 @@ # SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors # SPDX-License-Identifier: AGPL-3.0-or-later /vendor -/.php-cs-fixer.cache -/tests/.phpunit.result.cache +.php-cs-fixer.cache +.phpunit.result.cache /tests/coverage /build .DS_store diff --git a/.nextcloudignore b/.nextcloudignore index f2cfc11..9dd3ea0 100644 --- a/.nextcloudignore +++ b/.nextcloudignore @@ -20,3 +20,4 @@ package-lock.json screenshots src vendor +tests diff --git a/composer.json b/composer.json index f2b6401..fbbddad 100644 --- a/composer.json +++ b/composer.json @@ -7,12 +7,18 @@ "php": "8.1" } }, + "autoload": { + "psr-4": { + "OCA\\PreviewGenerator\\": "lib/", + "OCA\\PreviewGenerator\\Tests\\": "tests/" + } + }, "scripts": { "cs:fix": "php-cs-fixer fix", "cs:check": "php-cs-fixer fix --dry-run --diff", "lint": "find . -name \\*.php -not -path './vendor/*' -print0 | xargs -0 -n1 php -l", - "test:unit": "phpunit -c tests/phpunit.xml tests", - "test:unit:coverage": "XDEBUG_MODE=coverage phpunit -c tests/phpunit.xml tests" + "test:unit": "phpunit -c phpunit.xml tests", + "test:unit:coverage": "XDEBUG_MODE=coverage phpunit -c phpunit.xml tests" }, "require-dev": { "nextcloud/coding-standard": "^1.0.0", diff --git a/lib/BackgroundJob/PreviewJob.php b/lib/BackgroundJob/PreviewJob.php index 18f4da2..545af18 100644 --- a/lib/BackgroundJob/PreviewJob.php +++ b/lib/BackgroundJob/PreviewJob.php @@ -11,13 +11,13 @@ use OCA\PreviewGenerator\Service\ConfigService; use OCA\PreviewGenerator\Service\PreGenerateService; -use OCA\PreviewGenerator\Support\OutputInterfaceLoggerAdapter; use OCA\PreviewGenerator\Support\PreviewLimiter\CountLimiter; use OCA\PreviewGenerator\Support\PreviewLimiter\ExecutionTimeLimiter; use OCA\PreviewGenerator\Support\PreviewLimiter\MultiLimiter; use OCA\PreviewGenerator\Support\PreviewLimiter\PreviewLimiter; use OCP\AppFramework\Utility\ITimeFactory; use OCP\BackgroundJob\TimedJob; +use Psr\Log\LoggerInterface; class PreviewJob extends TimedJob { private readonly PreviewLimiter $limiter; @@ -25,7 +25,7 @@ class PreviewJob extends TimedJob { public function __construct( ITimeFactory $time, private readonly PreGenerateService $preGenerateService, - private readonly OutputInterfaceLoggerAdapter $outputInterface, + private readonly LoggerInterface $logger, private readonly ConfigService $configService, ) { parent::__construct($time); @@ -53,7 +53,8 @@ protected function run($argument) { return; } + $this->preGenerateService->setLogger($this->logger); $this->preGenerateService->setLimiter($this->limiter); - $this->preGenerateService->preGenerate($this->outputInterface); + $this->preGenerateService->preGenerate(); } } diff --git a/tests/phpunit.xml b/phpunit.xml similarity index 57% rename from tests/phpunit.xml rename to phpunit.xml index 64ad7ad..629b4fa 100644 --- a/tests/phpunit.xml +++ b/phpunit.xml @@ -4,7 +4,7 @@ - SPDX-License-Identifier: AGPL-3.0-or-later --> - ../ + ./lib - - ../tests - ../vendor - ../.php-cs-fixer.dist.php - - + - - . + + ./tests/Unit diff --git a/tests/Unit/BackgroundJob/PreviewJobTest.php b/tests/Unit/BackgroundJob/PreviewJobTest.php new file mode 100644 index 0000000..5e73f11 --- /dev/null +++ b/tests/Unit/BackgroundJob/PreviewJobTest.php @@ -0,0 +1,119 @@ +time = $this->createMock(ITimeFactory::class); + $this->preGenerateService = $this->createMock(PreGenerateService::class); + $this->logger = $this->createMock(LoggerInterface::class); + $this->configService = $this->createMock(ConfigService::class); + $this->jobList = $this->createMock(IJobList::class); + + $this->time->method('getTime') + ->willReturnCallback(time(...)); + + $this->configService->expects(self::once()) + ->method('getMaxBackgroundJobPreviews') + ->willReturn(100); + $this->configService->expects(self::once()) + ->method('getMaxBackgroundJobExecutionTime') + ->willReturn(300); + + $this->previewJob = new PreviewJob( + $this->time, + $this->preGenerateService, + $this->logger, + $this->configService, + ); + } + + public function testJobSettings(): void { + $this->assertEquals(300, $this->previewJob->getInterval()); + $this->assertTrue($this->previewJob->isTimeSensitive()); + } + + public function testRun(): void { + $this->configService->method('isBackgroundJobDisabled') + ->willReturn(false); + $this->configService->method('usesCronDaemon') + ->willReturn(true); + + $this->preGenerateService->expects(self::once()) + ->method('setLogger') + ->with($this->logger); + $this->preGenerateService->expects(self::once()) + ->method('setLimiter') + ->willReturnCallback(function (PreviewLimiter $limiter): void { + $this->assertInstanceOf(MultiLimiter::class, $limiter); + }); + + $this->preGenerateService->expects(self::once()) + ->method('preGenerate'); + + $this->previewJob->start($this->jobList); + } + + /** @dataProvider runSkipsDataProvider */ + public function testRunSkips(bool $isBackgroundJobDisabled, bool $usesCronDaemon): void { + $this->configService->method('isBackgroundJobDisabled') + ->willReturn($isBackgroundJobDisabled); + $this->configService->method('usesCronDaemon') + ->willReturn($usesCronDaemon); + + $this->preGenerateService->expects(self::never()) + ->method('setLogger'); + $this->preGenerateService->expects(self::never()) + ->method('setLimiter'); + + $this->preGenerateService->expects(self::never()) + ->method('preGenerate'); + + $this->previewJob->start($this->jobList); + } + + public static function runSkipsDataProvider(): array { + return [ + 'background job is disabled' => [ + 'isBackgroundJobDisabled' => true, + 'usesCronDaemon' => true, + ], + 'cron daemon is not used' => [ + 'isBackgroundJobDisabled' => false, + 'usesCronDaemon' => false, + ], + 'background job is disabled and no cron daemon is used' => [ + 'isBackgroundJobDisabled' => true, + 'usesCronDaemon' => false, + ], + ]; + } +} diff --git a/tests/Service/ModuloServiceTest.php b/tests/Unit/Service/ModuloServiceTest.php similarity index 92% rename from tests/Service/ModuloServiceTest.php rename to tests/Unit/Service/ModuloServiceTest.php index 8402782..ea24096 100644 --- a/tests/Service/ModuloServiceTest.php +++ b/tests/Unit/Service/ModuloServiceTest.php @@ -7,7 +7,7 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\PreviewGenerator\Tests\Service; +namespace OCA\PreviewGenerator\Tests\Unit\Service; use OCA\PreviewGenerator\Service\ModuloService; use PHPUnit\Framework\TestCase; diff --git a/tests/Service/NoMediaServiceTest.php b/tests/Unit/Service/NoMediaServiceTest.php similarity index 99% rename from tests/Service/NoMediaServiceTest.php rename to tests/Unit/Service/NoMediaServiceTest.php index 362afdd..62251de 100644 --- a/tests/Service/NoMediaServiceTest.php +++ b/tests/Unit/Service/NoMediaServiceTest.php @@ -7,7 +7,7 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\PreviewGenerator\Tests\Service; +namespace OCA\PreviewGenerator\Tests\Unit\Service; use OCA\PreviewGenerator\Service\NoMediaService; use OCP\Files\File; diff --git a/tests/SizeHelperTest.php b/tests/Unit/SizeHelperTest.php similarity index 98% rename from tests/SizeHelperTest.php rename to tests/Unit/SizeHelperTest.php index 9b95ffa..adac6b9 100644 --- a/tests/SizeHelperTest.php +++ b/tests/Unit/SizeHelperTest.php @@ -7,7 +7,7 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\PreviewGenerator\Tests; +namespace OCA\PreviewGenerator\Tests\Unit; use OCA\PreviewGenerator\Service\ConfigService; use OCA\PreviewGenerator\SizeHelper; diff --git a/tests/Support/PreviewLimiter/CountLimiterTest.php b/tests/Unit/Support/PreviewLimiter/CountLimiterTest.php similarity index 90% rename from tests/Support/PreviewLimiter/CountLimiterTest.php rename to tests/Unit/Support/PreviewLimiter/CountLimiterTest.php index 7f5f495..416d718 100644 --- a/tests/Support/PreviewLimiter/CountLimiterTest.php +++ b/tests/Unit/Support/PreviewLimiter/CountLimiterTest.php @@ -7,7 +7,7 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\PreviewGenerator\Tests\Support\PreviewLimiter; +namespace OCA\PreviewGenerator\Tests\Unit\Support\PreviewLimiter; use OCA\PreviewGenerator\Support\PreviewLimiter\CountLimiter; use PHPUnit\Framework\TestCase; diff --git a/tests/Support/PreviewLimiter/ExecutionTimeLimiterTest.php b/tests/Unit/Support/PreviewLimiter/ExecutionTimeLimiterTest.php similarity index 95% rename from tests/Support/PreviewLimiter/ExecutionTimeLimiterTest.php rename to tests/Unit/Support/PreviewLimiter/ExecutionTimeLimiterTest.php index 45953a1..0aabc31 100644 --- a/tests/Support/PreviewLimiter/ExecutionTimeLimiterTest.php +++ b/tests/Unit/Support/PreviewLimiter/ExecutionTimeLimiterTest.php @@ -7,7 +7,7 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\PreviewGenerator\Tests\Support\PreviewLimiter; +namespace OCA\PreviewGenerator\Tests\Unit\Support\PreviewLimiter; use OC\AppFramework\Utility\TimeFactory; use OCA\PreviewGenerator\Support\PreviewLimiter\ExecutionTimeLimiter; diff --git a/tests/Support/PreviewLimiter/MultiLimiterTest.php b/tests/Unit/Support/PreviewLimiter/MultiLimiterTest.php similarity index 95% rename from tests/Support/PreviewLimiter/MultiLimiterTest.php rename to tests/Unit/Support/PreviewLimiter/MultiLimiterTest.php index 522227e..ea09a28 100644 --- a/tests/Support/PreviewLimiter/MultiLimiterTest.php +++ b/tests/Unit/Support/PreviewLimiter/MultiLimiterTest.php @@ -7,7 +7,7 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -namespace OCA\PreviewGenerator\Tests\Support\PreviewLimiter; +namespace OCA\PreviewGenerator\Tests\Unit\Support\PreviewLimiter; use OCA\PreviewGenerator\Support\PreviewLimiter\MultiLimiter; use OCA\PreviewGenerator\Support\PreviewLimiter\PreviewLimiter; diff --git a/tests/Unit/bootstrap.php b/tests/Unit/bootstrap.php new file mode 100644 index 0000000..c3e248c --- /dev/null +++ b/tests/Unit/bootstrap.php @@ -0,0 +1,23 @@ +loadApp('previewgenerator'); + +OC_Hook::clear(); diff --git a/tests/bootstrap.php b/tests/bootstrap.php deleted file mode 100644 index d3e0cd5..0000000 --- a/tests/bootstrap.php +++ /dev/null @@ -1,14 +0,0 @@ -