Преглед на файлове

Fixed Dingo part of issue #30

Marcel Pociot преди 8 години
родител
ревизия
f7f840771c
променени са 2 файла, в които са добавени 30 реда и са изтрити 3 реда
  1. 6 2
      src/Mpociot/ApiDoc/Commands/GenerateDocumentation.php
  2. 24 1
      tests/GenerateDocumentationTest.php

+ 6 - 2
src/Mpociot/ApiDoc/Commands/GenerateDocumentation.php

@@ -280,8 +280,12 @@ class GenerateDocumentation extends Command
         $parsedRoutes = [];
         foreach ($routes as $route) {
             if (empty($allowedRoutes) || in_array($route->getName(), $allowedRoutes) || str_is($routePrefix, $route->uri()) || in_array($middleware, $route->middleware())) {
-                $parsedRoutes[] = $generator->processRoute($route, $bindings, $this->option('header'), $withResponse);
-                $this->info('Processed route: ['.implode(',', $route->getMethods()).'] '.$route->uri());
+                if ($this->isValidRoute($route) && $this->isRouteVisibleForDocumentation($route->getAction()['uses'])) {
+                    $parsedRoutes[] = $generator->processRoute($route, $bindings, $this->option('header'), $withResponse);
+                    $this->info('Processed route: [' . implode(',', $route->getMethods()) . '] ' . $route->uri());
+                } else {
+                    $this->warn('Skipping route: ['.implode(',', $route->getMethods()).'] '.$route->uri());
+                }
             }
         }
 

+ 24 - 1
tests/GenerateDocumentationTest.php

@@ -2,10 +2,12 @@
 
 namespace Mpociot\ApiDoc\Tests;
 
+use Dingo\Api\Provider\LaravelServiceProvider;
 use Illuminate\Contracts\Console\Kernel;
 use Illuminate\Routing\Route;
 use Mpociot\ApiDoc\ApiDocGeneratorServiceProvider;
 use Mpociot\ApiDoc\Generators\LaravelGenerator;
+use Mpociot\ApiDoc\Tests\Fixtures\DingoTestController;
 use Orchestra\Testbench\TestCase;
 use Mpociot\ApiDoc\Tests\Fixtures\TestController;
 use Illuminate\Support\Facades\Route as RouteFacade;
@@ -39,7 +41,10 @@ class GenerateDocumentationTest extends TestCase
      */
     protected function getPackageProviders($app)
     {
-        return [ApiDocGeneratorServiceProvider::class];
+        return [
+            LaravelServiceProvider::class,
+            ApiDocGeneratorServiceProvider::class
+        ];
     }
 
     public function testConsoleCommandNeedsAPrefixOrRoute()
@@ -62,6 +67,24 @@ class GenerateDocumentationTest extends TestCase
         $this->assertContains('Processed route: [GET,HEAD] api/test', $output);
     }
 
+    public function testConsoleCommandDoesNotWorkWithClosureUsingDingo()
+    {
+        $api = app('Dingo\Api\Routing\Router');
+        $api->version('v1', function ($api) {
+            $api->get('/closure', function () {
+                return 'foo';
+            });
+            $api->get('/test', DingoTestController::class.'@parseMethodDescription');
+
+            $output = $this->artisan('api:generate', [
+                '--router' => 'dingo',
+                '--routePrefix' => 'v1',
+            ]);
+            $this->assertContains('Skipping route: [GET,HEAD] closure', $output);
+            $this->assertContains('Processed route: [GET,HEAD] test', $output);
+        });
+    }
+
     public function testCanSkipSingleRoutesCommandDoesNotWorkWithClosure()
     {
         RouteFacade::get('/api/skip', TestController::class.'@skip');