Browse Source

make the ModelToIdTransformer work with array

Thomas Rabaix 11 years ago
parent
commit
594e62d22b

+ 1 - 1
Form/DataTransformer/ModelToIdTransformer.php

@@ -40,7 +40,7 @@ class ModelToIdTransformer implements DataTransformerInterface
      */
     public function reverseTransform($newId)
     {
-        if (!isset($newId) || strlen($newId) === 0) {
+        if (empty($newId) && !in_array($newId, array("0", 0), true)) {
             return null;
         }
 

+ 29 - 6
Tests/Form/DataTransformer/ModelToIdTransformerTest.php

@@ -24,19 +24,20 @@ class ModelToIdTransformerTest extends \PHPUnit_Framework_TestCase
 
     public function testReverseTransformWhenPassing0AsId()
     {
-        $transformer = new ModelToIdTransformer($this->modelManager,'TEST');
+        $transformer = new ModelToIdTransformer($this->modelManager, 'TEST');
 
         $this->modelManager
                 ->expects($this->exactly(2))
-                ->method('find');
+                ->method('find')
+                ->will($this->returnValue(true));
+
+        $this->assertFalse(in_array(false, array("0", 0), true));
 
         // we pass 0 as integer
-        // this must call the model manager find method... i not care what is returned, but must be called
-        $transformer->reverseTransform(0);
+        $this->assertTrue($transformer->reverseTransform(0));
 
         // we pass 0 as string
-        // this must call the model manager find method... i not care what is returned, but must be called
-        $transformer->reverseTransform('0');
+        $this->assertTrue($transformer->reverseTransform('0'));
 
         // we pass null must return null
         $this->assertNull($transformer->reverseTransform(null));
@@ -45,6 +46,28 @@ class ModelToIdTransformerTest extends \PHPUnit_Framework_TestCase
         $this->assertNull($transformer->reverseTransform(false));
     }
 
+    /**
+     * @dataProvider getReverseTransformValues
+     */
+    public function testReverseTransform($value, $expected)
+    {
+        $transformer = new ModelToIdTransformer($this->modelManager,'TEST2');
+
+        $this->modelManager->expects($this->any())->method('find');
+
+        $this->assertEquals($expected, $transformer->reverseTransform($value));
+    }
+
+    public function getReverseTransformValues()
+    {
+        return array(
+            array(null, null),
+            array(false, false),
+            array(array(), null),
+            array("", null)
+        );
+    }
+
     public function testTransform()
     {
         $this->modelManager->expects($this->once())