ControllerMiddlewareTest.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace Test\Michel\Framework\Core;
  3. use Michel\Framework\Core\Middlewares\ControllerMiddleware;
  4. use Michel\Route;
  5. use Michel\RouterMiddleware;
  6. use Michel\UniTester\TestCase;
  7. use Test\Michel\Framework\Core\Mock\ContainerMock;
  8. use Test\Michel\Framework\Core\Mock\RequestHandlerMock;
  9. use Test\Michel\Framework\Core\Mock\ServerRequestMock;
  10. use Psr\Container\ContainerInterface;
  11. use Psr\Http\Message\ResponseInterface;
  12. use Psr\Http\Message\ServerRequestInterface;
  13. use Psr\Http\Server\RequestHandlerInterface;
  14. use Test\Michel\Framework\Core\Controller\SampleControllerTest;
  15. class ControllerMiddlewareTest extends TestCase
  16. {
  17. protected function setUp(): void
  18. {
  19. // TODO: Implement setUp() method.
  20. }
  21. protected function tearDown(): void
  22. {
  23. // TODO: Implement tearDown() method.
  24. }
  25. protected function execute(): void
  26. {
  27. $this->testProcessWithCallableController();
  28. $this->testProcessWithControllerMethod();
  29. $this->testProcessWithControllerMethodNotExist();
  30. }
  31. public function testProcessWithCallableController()
  32. {
  33. $container = new ContainerMock();
  34. $controllerMiddleware = new ControllerMiddleware($container);
  35. $request = new ServerRequestMock([
  36. RouterMiddleware::ATTRIBUTE_KEY => new Route('example', '/example', [new SampleControllerTest([])])
  37. ]);
  38. $handler = new RequestHandlerMock();
  39. $response = $controllerMiddleware->process($request, $handler);
  40. $this->assertInstanceOf(ResponseInterface::class, $response);
  41. }
  42. public function testProcessWithControllerMethod()
  43. {
  44. $response = $this->testProcessWithController('fakeMethod');
  45. $this->assertInstanceOf(ResponseInterface::class, $response);
  46. }
  47. public function testProcessWithControllerMethodNotExist()
  48. {
  49. $this->expectException(\BadMethodCallException::class, function () {
  50. $this->testProcessWithController('fakeMethodNotExist');
  51. });
  52. }
  53. private function testProcessWithController(string $controllerMethodName): ResponseInterface
  54. {
  55. $controllerClassName = SampleControllerTest::class;
  56. $container = new ContainerMock([
  57. $controllerClassName => new SampleControllerTest([])
  58. ]);
  59. $controllerMiddleware = new ControllerMiddleware($container);
  60. $request = new ServerRequestMock([
  61. RouterMiddleware::ATTRIBUTE_KEY => new Route('example', '/example', [$controllerClassName, $controllerMethodName])
  62. ]);
  63. return $controllerMiddleware->process($request, new RequestHandlerMock());
  64. }
  65. }