Browse Source

Merge pull request #428 from phanan-forks/feat/natsort

Sort the groups naturally
Shalvah 6 năm trước cách đây
mục cha
commit
02d1942298

+ 5 - 4
src/Commands/GenerateDocumentation.php

@@ -42,7 +42,7 @@ class GenerateDocumentation extends Command
     /**
      * Execute the console command.
      *
-     * @return false|null
+     * @return void
      */
     public function handle()
     {
@@ -56,9 +56,10 @@ class GenerateDocumentation extends Command
         $generator = new Generator();
         $parsedRoutes = $this->processRoutes($generator, $routes);
         $parsedRoutes = collect($parsedRoutes)->groupBy('group')
-            ->sort(function ($a, $b) {
-                return strcmp($a->first()['group'], $b->first()['group']);
-            });
+            ->sortBy(static function ($group) {
+                /* @var $group Collection */
+                return $group->first()['group'];
+            }, SORT_NATURAL);
 
         $this->writeMarkdown($parsedRoutes);
     }

+ 21 - 0
tests/Fixtures/TestNaturalSortController.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace Mpociot\ApiDoc\Tests\Fixtures;
+
+class TestNaturalSortController
+{
+    /** @group 1. Group 1 */
+    public function action1()
+    {
+    }
+
+    /** @group 2. Group 2 */
+    public function action2()
+    {
+    }
+
+    /** @group 10. Group 10 */
+    public function action10()
+    {
+    }
+}

+ 25 - 0
tests/GenerateDocumentationTest.php

@@ -12,6 +12,7 @@ use Mpociot\ApiDoc\Tests\Fixtures\TestController;
 use Mpociot\ApiDoc\ApiDocGeneratorServiceProvider;
 use Illuminate\Support\Facades\Route as RouteFacade;
 use Mpociot\ApiDoc\Tests\Fixtures\TestResourceController;
+use Mpociot\ApiDoc\Tests\Fixtures\TestNaturalSortController;
 use Mpociot\ApiDoc\Tests\Fixtures\TestPartialResourceController;
 
 class GenerateDocumentationTest extends TestCase
@@ -258,6 +259,30 @@ class GenerateDocumentationTest extends TestCase
         $this->assertContains('Лорем ипсум долор сит амет', $generatedMarkdown);
     }
 
+    /** @test */
+    public function sorts_group_naturally()
+    {
+        RouteFacade::get('/api/action1', TestNaturalSortController::class.'@action1');
+        RouteFacade::get('/api/action2', TestNaturalSortController::class.'@action2');
+        RouteFacade::get('/api/action10', TestNaturalSortController::class.'@action10');
+
+        config(['apidoc.routes.0.prefixes' => ['api/*']]);
+        $this->artisan('apidoc:generate');
+        $generatedMarkdown = file_get_contents(__DIR__.'/../public/docs/source/index.md');
+
+        $firstGroup1Occurrence = strpos($generatedMarkdown, '#1. Group 1');
+        $firstGroup2Occurrence = strpos($generatedMarkdown, '#2. Group 2');
+        $firstGroup10Occurrence = strpos($generatedMarkdown, '#10. Group 10');
+
+        $this->assertNotFalse($firstGroup1Occurrence);
+        $this->assertNotFalse($firstGroup2Occurrence);
+        $this->assertNotFalse($firstGroup2Occurrence);
+
+        $this->assertTrue(
+            $firstGroup1Occurrence < $firstGroup2Occurrence && $firstGroup2Occurrence < $firstGroup10Occurrence
+        );
+    }
+  
     /** @test */
     public function supports_partial_resource_controller()
     {