浏览代码

[Uploadable] Added additional checks.

comfortablynumb 12 年之前
父节点
当前提交
ceb6e56293
共有 2 个文件被更改,包括 48 次插入0 次删除
  1. 13 0
      lib/Gedmo/Uploadable/UploadableListener.php
  2. 35 0
      tests/Gedmo/Uploadable/UploadableEntityTest.php

+ 13 - 0
lib/Gedmo/Uploadable/UploadableListener.php

@@ -598,6 +598,19 @@ class UploadableListener extends MappedEventSubscriber
      */
     public function setDefaultFileInfoClass($defaultFileInfoClass)
     {
+        $fileInfoInterface = 'Gedmo\\Uploadable\\FileInfo\\FileInfoInterface';
+        $refl = is_string($defaultFileInfoClass) && class_exists($defaultFileInfoClass) ?
+            new \ReflectionClass($defaultFileInfoClass) :
+            false;
+
+        if (!$refl || !$refl->implementsInterface($fileInfoInterface)) {
+            $msg = sprintf('Default FileInfo class must be a valid class, and it must implement "%s".',
+                $fileInfoInterface
+            );
+
+            throw new \Gedmo\Exception\InvalidArgumentException($msg);
+        }
+
         $this->defaultFileInfoClass = $defaultFileInfoClass;
     }
 

+ 35 - 0
tests/Gedmo/Uploadable/UploadableEntityTest.php

@@ -549,7 +549,36 @@ class UploadableEntityTest extends BaseTestCaseORM
         $this->em->flush();
     }
 
+    /**
+     * @expectedException Gedmo\Exception\InvalidArgumentException
+     * @dataProvider invalidFileInfoClassesProvider
+     */
+    public function test_setDefaultFileInfoClass_throwExceptionIfInvalidClassArePassed($class)
+    {
+        $this->listener->setDefaultFileInfoClass($class);
+    }
+
+    public function test_setDefaultFileInfoClass_setClassIfClassIsValid()
+    {
+        $validClass = 'Gedmo\\Uploadable\\FileInfo\\FileInfoArray';
+
+        $this->listener->setDefaultFileInfoClass($validClass);
+
+        $this->assertEquals($validClass, $this->listener->getDefaultFileInfoClass());
+    }
+
     // Data Providers
+    public function invalidFileInfoClassesProvider()
+    {
+        return array(
+            array(''),
+            array(false),
+            array(null),
+            array('FakeFileInfo'),
+            array(array()),
+            array(new \DateTime())
+        );
+    }
 
     public function uploadExceptionsProvider()
     {
@@ -566,6 +595,8 @@ class UploadableEntityTest extends BaseTestCaseORM
     }
 
 
+
+
     // Util
 
     private function generateUploadedFile($index = 'image', $filePath = false, $filename = false, array $info = array())
@@ -628,6 +659,10 @@ class UploadableEntityTest extends BaseTestCaseORM
     }
 }
 
+class FakeFileInfo
+{
+}
+
 class FakeFilenameGenerator implements \Gedmo\Uploadable\FilenameGenerator\FilenameGeneratorInterface
 {
     public static function generate($filename, $extension)