Ver Fonte

fix after review

Vincent há 2 anos atrás
pai
commit
e4160b5e23

+ 2 - 2
src/Service/File/Storage/LocalStorage.php

@@ -78,10 +78,10 @@ class LocalStorage implements FileStorageInterface
      */
     public function read(File $file): string
     {
-        if (!preg_match('#^image#', $file->getMimeType())) {
+        if (!$this->imageUtils->isImage($file)) {
             return $this->filesystem->read($file->getSlug());
         } else {
-            return $this->imageUtils->cropImage($file);
+            return $this->imageUtils->formatImage($file);
         }
     }
 

+ 16 - 5
src/Service/File/Utils/ImageUtils.php

@@ -20,13 +20,14 @@ class ImageUtils
 ){}
 
     /**
-     * Permet de cropper et retourner une image
+     * Permet de cropper et retourner une image selon la configuration du $file
      * @param File $file : File contenant la définition de l'image
      * @return string : Image en Base64
-     * @see ImageUtilsTest::testCropImageWithConfig()
-     * @see ImageUtilsTest::testCropImageWithoutConfig()
+     * @see ImageUtilsTest::testFormatImageWithoutConfig()
+     * @see ImageUtilsTest::testFormatImageWithErrorConfig()
+     * @see ImageUtilsTest::testFormatImageWithConfig()
      */
-    public function cropImage(File $file): string{
+    public function formatImage(File $file): string{
         //On récupère l'image via le dataloader d'imagine liip (dataloader stream qui s'appuie sur gaufrette)
         $binary = $this->dataManager->find(self::FILTER_CROP, $file->getPath());
 
@@ -39,7 +40,6 @@ class ImageUtils
                 //Si nous avons une erreur, nous retournons l'image sans crop et on log.
                 $this->logger->error('Error while cropping image');
                 $this->logger->error($e->getMessage());
-                return $binary->getContent();
             }
         }
 
@@ -63,4 +63,15 @@ class ImageUtils
             ]
         ];
     }
+
+    /**
+     * Test si le File est une image
+     * @param File $file
+     * @return bool
+     * @see ImageUtilsTest::testIsImage()
+     * @see ImageUtilsTest::testIsNotImage()
+     */
+    public function isImage(File $file): bool{
+        return boolval(preg_match('#^image#', $file->getMimeType()));
+    }
 }

+ 1 - 1
tests/Unit/Service/File/Storage/LocalStorageTest.php

@@ -139,7 +139,7 @@ class LocalStorageTest extends TestCase
         $file->method('getMimeType')->willReturn('image/jpeg');
 
         $imageUtils = $this->imageUtils;
-        $imageUtils->method('cropImage')->with($file)->willReturn('12345679');
+        $imageUtils->method('formatImage')->with($file)->willReturn('12345679');
 
         $fileStorage = $this->getMockBuilder(TestableLocalStorage::class)
             ->setConstructorArgs([$this->filesystemMap, $this->entityManager, $this->accessRepository, $imageUtils])

+ 49 - 21
tests/Unit/Service/File/Utils/ImageUtilsTest.php

@@ -57,16 +57,16 @@ class ImageUtilsTest extends TestCase
 
 
     /**
-     * @see ImageUtils::cropImage()
+     * @see ImageUtils::formatImage()
      * @return void
      */
-    public function testCropImageWithoutConfig()
+    public function testFormatImageWithoutConfig()
     {
-        $file = new File();
-        $file->setPath('example.jpg');
-        $file->setConfig(null);
+        $file = $this->getMockBuilder(File::class)->getMock();
+        $file->method('getPath')->willReturn('example.jpg');
+        $file->method('getConfig')->willReturn(null);
 
-        $imageUtils = $this->getImageUtilsMockFor('cropImage');
+        $imageUtils = $this->getImageUtilsMockFor('formatImage');
 
         $binary = $this->createMock(Binary::class);
         $binary->method('getContent')->willReturn('mocked_binary_data');
@@ -76,20 +76,20 @@ class ImageUtilsTest extends TestCase
             ->with(ImageUtils::FILTER_CROP, $file->getPath())
             ->willReturn($binary);
 
-        $result = $imageUtils->cropImage($file);
+        $result = $imageUtils->formatImage($file);
 
         $this->assertEquals('mocked_binary_data', $result);
     }
 
     /**
-     * @see ImageUtils::cropImage()
+     * @see ImageUtils::formatImage()
      * @return void
      */
-    public function testCropImageWithConfig()
+    public function testFormatImageWithConfig()
     {
-        $file = new File();
-        $file->setPath('example.jpg');
-        $file->setConfig('{"width": 100, "height": 100, "x": 10, "y": 10}');
+        $file = $this->getMockBuilder(File::class)->getMock();
+        $file->method('getPath')->willReturn('example.jpg');
+        $file->method('getConfig')->willReturn('{"width": 100, "height": 100, "x": 10, "y": 10}');
         $config  = [
             'filters' => [
                 'crop' => [
@@ -99,7 +99,7 @@ class ImageUtilsTest extends TestCase
             ]
         ];
 
-        $imageUtils = $this->getImageUtilsMockFor('cropImage');
+        $imageUtils = $this->getImageUtilsMockFor('formatImage');
 
         $binary = $this->createMock(Binary::class);
         $binary->method('getContent')->willReturn('mocked_binary_data');
@@ -116,23 +116,23 @@ class ImageUtilsTest extends TestCase
 
         $this->logger->expects($this->never())->method('error');
 
-        $result = $imageUtils->cropImage($file);
+        $result = $imageUtils->formatImage($file);
 
         $this->assertEquals('mocked_binary_data', $result);
     }
 
 
     /**
-     * @see ImageUtils::cropImage()
+     * @see ImageUtils::formatImage()
      * @return void
      */
-    public function testCropImageWithErrorConfig()
+    public function testFormatImageWithErrorConfig()
     {
-        $file = new File();
-        $file->setPath('example.jpg');
-        $file->setConfig('{"hei": 100, "x": 10, "y": 10}');
+        $file = $this->getMockBuilder(File::class)->getMock();
+        $file->method('getPath')->willReturn('example.jpg');
+        $file->method('getConfig')->willReturn('{"hei": 100, "x": 10, "y": 10}');
 
-        $imageUtils = $this->getImageUtilsMockFor('cropImage');
+        $imageUtils = $this->getImageUtilsMockFor('formatImage');
 
         $binary = $this->createMock(Binary::class);
         $binary->method('getContent')->willReturn('mocked_binary_data');
@@ -146,8 +146,36 @@ class ImageUtilsTest extends TestCase
             ->method('error')
         ;
 
-        $result = $imageUtils->cropImage($file);
+        $result = $imageUtils->formatImage($file);
 
         $this->assertEquals('mocked_binary_data', $result);
     }
+
+    /**
+     * @see ImageUtils::isImage()
+     * @return void
+     */
+    public function testIsImage()
+    {
+        $file = $this->getMockBuilder(File::class)->getMock();
+        $file->method('getMimeType')->willReturn('image/jpeg');
+
+        $imageUtils = $this->getImageUtilsMockFor('isImage');
+
+        $this->assertTrue($imageUtils->isImage($file));
+    }
+
+    /**
+     * @see ImageUtils::isImage()
+     * @return void
+     */
+    public function testIsNotImage()
+    {
+        $file = $this->getMockBuilder(File::class)->getMock();
+        $file->method('getMimeType')->willReturn('application/pdf');
+
+        $imageUtils = $this->getImageUtilsMockFor('isImage');
+
+        $this->assertFalse($imageUtils->isImage($file));
+    }
 }