Browse Source

Add test.

The test shows that closure returned by getAction() allows
intropecting the action's args.
ADmad 6 years ago
parent
commit
58d68bdd67

+ 24 - 0
tests/TestCase/Controller/ControllerTest.php

@@ -22,10 +22,12 @@ use Cake\Event\Event;
 use Cake\Event\EventInterface;
 use Cake\Http\Response;
 use Cake\Http\ServerRequest;
+use Cake\ORM\Table;
 use Cake\Routing\Router;
 use Cake\TestSuite\TestCase;
 use PHPUnit\Framework\Error\Notice;
 use PHPUnit\Framework\Error\Warning;
+use ReflectionFunction;
 use TestApp\Controller\Admin\PostsController;
 use TestApp\Controller\TestController;
 use TestPlugin\Controller\TestPluginController;
@@ -713,6 +715,28 @@ class ControllerTest extends TestCase
         $Controller->getAction();
     }
 
+    public function testGetActionArgsReflection(): void
+    {
+        $request = new ServerRequest([
+            'url' => 'test/reflection/1',
+            'params' => [
+                'controller' => 'Test',
+                'action' => 'reflection',
+                'pass' => ['1'],
+            ],
+        ]);
+        $controller = new TestController($request, new Response());
+
+        $closure = $controller->getAction();
+        $args = (new ReflectionFunction($closure))->getParameters();
+
+        $this->assertNull($args[0]->getClass());
+        $this->assertSame('passed', $args[0]->getName());
+
+        $this->assertSame(Table::class, $args[1]->getClass()->getName());
+        $this->assertSame('table', $args[1]->getName());
+    }
+
     /**
      * test invoking controller methods.
      *

+ 5 - 0
tests/test_app/TestApp/Controller/TestController.php

@@ -4,6 +4,7 @@ declare(strict_types=1);
 namespace TestApp\Controller;
 
 use Cake\Event\EventInterface;
+use Cake\ORM\Table;
 
 /**
  * TestController class
@@ -64,6 +65,10 @@ class TestController extends ControllerTestAppController
         ]);
     }
 
+    public function reflection($passed, Table $table)
+    {
+    }
+
     public function returner()
     {
         return $this->response->withStringBody('I am from the controller.');