Sort the groups naturally (fixes #423)

This commit is contained in:
An Phan
2018-12-11 17:44:44 +01:00
parent 8fca0199d7
commit 817f882ed8
3 changed files with 45 additions and 4 deletions

View File

@@ -41,7 +41,7 @@ class GenerateDocumentation extends Command
/**
* Execute the console command.
*
* @return false|null
* @return void
*/
public function handle()
{
@@ -55,9 +55,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);
}

View File

@@ -0,0 +1,15 @@
<?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() {}
}

View File

@@ -2,6 +2,7 @@
namespace Mpociot\ApiDoc\Tests;
use Mpociot\ApiDoc\Tests\Fixtures\TestNaturalSortController;
use RecursiveIteratorIterator;
use RecursiveDirectoryIterator;
use Orchestra\Testbench\TestCase;
@@ -256,6 +257,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
);
}
/**
* @param string $command
* @param array $parameters