2
0

AttributeRouteCollectorTest.php 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. namespace Test\Michel;
  3. use Michel\Route;
  4. use Michel\UniTester\TestCase;
  5. class AttributeRouteCollectorTest extends TestCase
  6. {
  7. protected function setUp(): void
  8. {
  9. // TODO: Implement setUp() method.
  10. }
  11. protected function tearDown(): void
  12. {
  13. // TODO: Implement tearDown() method.
  14. }
  15. protected function execute(): void
  16. {
  17. if (PHP_VERSION_ID < 80000) {
  18. return;
  19. }
  20. $attributeRouteCollector = new \Michel\Attribute\AttributeRouteCollector([
  21. 'Test\Michel\Controller\UserController',
  22. 'Test\Michel\Controller\ProductController',
  23. 'Test\Michel\Controller\ApiController',
  24. 'Test\Michel\Controller\PingController'
  25. ]);
  26. $routes = $attributeRouteCollector->collect();
  27. $this->assertStrictEquals(9, count($routes));
  28. $attributeRouteCollector = new \Michel\Attribute\AttributeRouteCollector([
  29. 'Test\Michel\Controller\UserController'
  30. ]);
  31. $routes = $attributeRouteCollector->collect();
  32. $this->assertStrictEquals(3, count($routes));
  33. $this->assertStrictEquals('user_list', $routes[0]->getName());
  34. $this->assertEquals(['GET', 'HEAD'], $routes[0]->getMethods());
  35. $this->assertStrictEquals('user_show', $routes[1]->getName());
  36. $this->assertEquals(['GET', 'HEAD'], $routes[1]->getMethods());
  37. $this->assertStrictEquals('user_create', $routes[2]->getName());
  38. $this->assertEquals(['POST'], $routes[2]->getMethods());
  39. $attributeRouteCollector = new \Michel\Attribute\AttributeRouteCollector([
  40. 'Test\Michel\Controller\PingController'
  41. ]);
  42. $routes = $attributeRouteCollector->collect();
  43. $this->assertStrictEquals(1, count($routes));
  44. $this->assertStrictEquals('/api/ping', $routes[0]->getPath());
  45. $this->assertEquals(['GET', 'HEAD'], $routes[0]->getMethods());
  46. $this->assertEquals('json', $routes[0]->getFormat());
  47. $this->testCache();
  48. }
  49. private function testCache(): void
  50. {
  51. $controllers = [
  52. 'Test\Michel\Controller\UserController',
  53. 'Test\Michel\Controller\ProductController',
  54. 'Test\Michel\Controller\ApiController',
  55. 'Test\Michel\Controller\PingController'
  56. ];
  57. $cacheDir = dirname(__FILE__) . '/cache';
  58. if (is_dir($cacheDir)) {
  59. foreach (glob($cacheDir . '/*') as $file) {
  60. unlink($file);
  61. }
  62. rmdir($cacheDir);
  63. }
  64. mkdir($cacheDir, 0777, true);
  65. $attributeRouteCollector = new \Michel\Attribute\AttributeRouteCollector($controllers, $cacheDir);
  66. $attributeRouteCollector->generateCache();
  67. $this->assertTrue(is_dir($cacheDir));
  68. foreach ($controllers as $controller) {
  69. $cacheFile = $cacheDir . '/' . md5($controller) . '.php';
  70. $this->assertTrue(file_exists($cacheFile));
  71. }
  72. $routes = $attributeRouteCollector->collect();
  73. $this->assertStrictEquals(9, count($routes));
  74. foreach ($routes as $route) {
  75. $this->assertInstanceOf(Route::class, $route);
  76. }
  77. $attributeRouteCollector->clearCache();
  78. rmdir($cacheDir);
  79. }
  80. }