diff --git a/.github/workflows/phpunit-sqlite.yml b/.github/workflows/phpunit-sqlite.yml index 7f2f1e3488cff..ceec036819043 100644 --- a/.github/workflows/phpunit-sqlite.yml +++ b/.github/workflows/phpunit-sqlite.yml @@ -85,14 +85,17 @@ jobs: with: php-version: ${{ matrix.php-versions }} # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation - extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite + extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, imagick, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite coverage: ${{ matrix.coverage && 'xdebug' || 'none' }} ini-file: development env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Set up dependencies - run: composer i + run: | + sudo apt-get update + sudo apt-get install -y ghostscript + composer i - name: Set up Nextcloud run: | @@ -106,7 +109,7 @@ jobs: run: ./occ app:list && echo "======= System config =======" && ./occ config:list system - name: PHPUnit database tests - run: composer run test:db -- --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.db.xml' || '' }} + run: composer run test:db -- --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.db.xml' || '' }} tests/lib/Preview/PostscriptTest.php - name: Upload db code coverage if: ${{ !cancelled() && matrix.coverage }} @@ -124,6 +127,8 @@ jobs: - name: Print logs if: always() run: | + gs --version + cat /etc/ImageMagick-6/policy.xml cat data/nextcloud.log summary: diff --git a/lib/private/Preview/Postscript.php b/lib/private/Preview/Postscript.php index 04c667926aa8d..68588647db42b 100644 --- a/lib/private/Preview/Postscript.php +++ b/lib/private/Preview/Postscript.php @@ -20,6 +20,6 @@ public function getMimeType(): string { * {@inheritDoc} */ protected function getAllowedMimeTypes(): string { - return '/application\/postscript/'; + return '/(application\/postscript|image\/x-eps)/'; } } diff --git a/tests/lib/Preview/BitmapTest.php b/tests/lib/Preview/PostscriptTest.php similarity index 59% rename from tests/lib/Preview/BitmapTest.php rename to tests/lib/Preview/PostscriptTest.php index 36e768010a96c..03938cdfe97c9 100644 --- a/tests/lib/Preview/BitmapTest.php +++ b/tests/lib/Preview/PostscriptTest.php @@ -8,6 +8,7 @@ namespace Test\Preview; +use OC\BinaryFinder; use OC\Preview\Postscript; /** @@ -19,6 +20,14 @@ */ class BitmapTest extends Provider { protected function setUp(): void { + if (\Imagick::queryFormats('EPS') === false || \Imagick::queryFormats('PS') === false) { + $this->markTestSkipped('Imagick does not support postscript.'); + } + if (\OCP\Server::get(BinaryFinder::class)->findBinaryPath('gs') === false) { + // Imagick forwards postscript rendering to Ghostscript but does not report this in queryFormats + $this->markTestSkipped('Ghostscript is not installed.'); + } + parent::setUp(); $fileName = 'testimage.eps'; diff --git a/tests/lib/Preview/Provider.php b/tests/lib/Preview/Provider.php index d8f10c430e43c..9dea1996a0228 100644 --- a/tests/lib/Preview/Provider.php +++ b/tests/lib/Preview/Provider.php @@ -13,18 +13,19 @@ use OC\Files\Storage\Storage; use OC\Files\Storage\Temporary; use OC\Files\View; +use OC\Preview\ProviderV2; use OC\Preview\TXT; use OCP\Files\IRootFolder; use OCP\IImage; use OCP\IUserManager; +use OCP\Preview\IProviderV2; use OCP\Server; abstract class Provider extends \Test\TestCase { protected string $imgPath; protected int $width; protected int $height; - /** @var \OC\Preview\Provider|mixed $provider */ - protected $provider; + protected IProviderV2 $provider; protected int $maxWidth = 1024; protected int $maxHeight = 1024; protected bool $scalingUp = false; @@ -119,18 +120,12 @@ protected function prepareTestFile($fileName, $fileContent) { /** * Retrieves a max size thumbnail can be created * - * @param \OC\Preview\Provider $provider - * * @return bool|IImage */ - private function getPreview($provider) { + private function getPreview(ProviderV2 $provider) { $file = new File(Server::get(IRootFolder::class), $this->rootView, $this->imgPath); $preview = $provider->getThumbnail($file, $this->maxWidth, $this->maxHeight, $this->scalingUp); - if (get_class($this) === BitmapTest::class && $preview === null) { - $this->markTestSkipped('An error occured while operating with Imagick.'); - } - $this->assertNotEquals(false, $preview); $this->assertEquals(true, $preview->valid());