diff options
-rw-r--r-- | src/Controller.php | 67 | ||||
-rw-r--r-- | tests/ControllerTest.php | 26 |
2 files changed, 93 insertions, 0 deletions
diff --git a/src/Controller.php b/src/Controller.php new file mode 100644 index 0000000..8dfa176 --- /dev/null +++ b/src/Controller.php @@ -0,0 +1,67 @@ +<?php + +namespace Jasny; + +use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Message\ResponseInterface; + +/** + * Controller + */ +abstract class Controller +{ + /** + * Server request + * @var ServerRequestInterface + **/ + protected $request = null; + + /** + * Response + * @var ResponseInterface + **/ + protected $response = null; + + /** + * Run the controller + * + * @return ResponseInterface + */ + abstract public function run(); + + /** + * Get request, set for controller + * + * @return ServerRequestInterface + */ + public function getRequest() + { + return $this->request; + } + + /** + * Get response. set for controller + * + * @return ResponseInterface + */ + public function getResponse() + { + return $this->response; + } + + /** + * Run the controller as function + * + * @param ServerRequestInterface $request + * @param ResponseInterface $response + * @return ResponseInterface + */ + public function __invoke(ServerRequestInterface $request, ResponseInterface $response) + { + $this->request = $request; + $this->response = $response; + + return $this->run(); + } +} + diff --git a/tests/ControllerTest.php b/tests/ControllerTest.php new file mode 100644 index 0000000..9a4caef --- /dev/null +++ b/tests/ControllerTest.php @@ -0,0 +1,26 @@ +<?php + +use Jasny\Controller; +use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Message\ResponseInterface; + +class ControllerTest extends PHPUnit_Framework_TestCase +{ + /** + * Test running controller + */ + public function testInvoke() + { + $controller = $this->getMockBuilder(Controller::class)->disableOriginalConstructor()->getMockForAbstractClass(); + $request = $this->createMock(ServerRequestInterface::class); + $response = $this->createMock(ResponseInterface::class); + + $controller->expects($this->once())->method('run')->will($this->returnValue($response)); + + $result = $controller($request, $response); + + $this->assertEquals($response, $result, "Invoking controller should return 'ResponseInterface' instance"); + $this->assertEquals($response, $controller->getResponse(), "Can not get 'ResponseInterface' instance from controller"); + $this->assertEquals($request, $controller->getRequest(), "Can not get 'ServerRequestInterface' instance from controller"); + } +} |