DingoGeneratorTest.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace Knuckles\Scribe\Tests\Unit;
  3. use Dingo\Api\Routing\RouteCollection;
  4. use Dingo\Api\Routing\Router;
  5. use Illuminate\Routing\Route;
  6. use Knuckles\Scribe\Extracting\Generator;
  7. use Knuckles\Scribe\ScribeServiceProvider;
  8. use Knuckles\Scribe\Tests\Fixtures\TestController;
  9. use Knuckles\Scribe\Tools\DocumentationConfig;
  10. use Orchestra\Testbench\TestCase;
  11. /**
  12. * @group dingo
  13. */
  14. class DingoGeneratorTest extends TestCase
  15. {
  16. protected function getPackageProviders($app)
  17. {
  18. return [
  19. ScribeServiceProvider::class,
  20. \Dingo\Api\Provider\LaravelServiceProvider::class,
  21. ];
  22. }
  23. public function setUp(): void
  24. {
  25. parent::setUp();
  26. $config = $this->config;
  27. $config['router'] = 'dingo';
  28. $this->generator = new Generator(new DocumentationConfig($config));
  29. }
  30. public function createRoute(string $httpMethod, string $path, string $controllerMethod, $register = false, $class = TestController::class)
  31. {
  32. $desiredRoute = null;
  33. /** @var Router $api */
  34. $api = app(Router::class);
  35. $api->version('v1', function (Router $api) use ($class, $controllerMethod, $path, $httpMethod, &$desiredRoute) {
  36. $desiredRoute = $api->$httpMethod($path, $class . "@$controllerMethod");
  37. });
  38. $routes = app(\Dingo\Api\Routing\Router::class)->getRoutes('v1');
  39. /*
  40. * Doing this bc we want an instance of Dingo\Api\Routing\Route, not Illuminate\Routing\Route, which the method above returns
  41. */
  42. return collect($routes)
  43. ->first(function (Route $route) use ($desiredRoute) {
  44. return $route->uri() === $desiredRoute->uri();
  45. });
  46. }
  47. public function createRouteUsesArray(string $httpMethod, string $path, string $controllerMethod, $register = false, $class = TestController::class)
  48. {
  49. $route = null;
  50. /** @var Router $api */
  51. $api = app(Router::class);
  52. $api->version('v1', function (Router $api) use ($class, $controllerMethod, $path, $httpMethod, &$route) {
  53. $route = $api->$httpMethod($path, [$class, $controllerMethod]);
  54. });
  55. return $route;
  56. }
  57. public function createRouteUsesCallable(string $httpMethod, string $path, callable $handler, $register = false)
  58. {
  59. $route = null;
  60. /** @var Router $api */
  61. $api = app(Router::class);
  62. $api->version('v1', function (Router $api) use ($handler, $path, $httpMethod, &$route) {
  63. $route = $api->$httpMethod($path, $handler);
  64. });
  65. return $route;
  66. }
  67. }