Skip to content

Commit 5a56809

Browse files
Merge branch 'master' into task-106821
# Conflicts: # tests/GenerateServerTest.php
2 parents bfb5563 + 80b45a4 commit 5a56809

File tree

3 files changed

+82
-1
lines changed

3 files changed

+82
-1
lines changed

src/Generators/RoutesGenerator.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,12 @@ private function formatControllerNamespaces(array $controllerNamespaces): string
112112
}
113113
}
114114

115-
sort($namespaces);
115+
uasort($namespaces, function (string $first, string $second) {
116+
$firstNamespace = str_replace('\\', ' ', trim(preg_replace('%/\*(.*)\*/%s', '', $first)));
117+
$secondNamespace = str_replace('\\', ' ', trim(preg_replace('%/\*(.*)\*/%s', '', $second)));
118+
119+
return strcasecmp($firstNamespace, $secondNamespace);
120+
});
116121

117122
return implode("\n", array_map(fn (string $namespace) => "use {$namespace};", $namespaces));
118123
}

tests/GenerateServerTest.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@
6262
$this->makeFilePath('/app/Http/Requests/TestRenameFromKeyRequestRequest.php'),
6363
$this->makeFilePath('/app/Http/Resources/ResourcesDataWithNameResource.php'),
6464

65+
$this->makeFilePath('/app/Http/Controllers/Controller11.php'),
66+
$this->makeFilePath('/app/Http/Controllers/Controller2.php'),
67+
$this->makeFilePath('/app/Http/Controllers/FooItemsController.php'),
68+
$this->makeFilePath('/app/Http/Controllers/FoosController.php'),
6569
$this->makeFilePath('/app/Http/Controllers/PoliciesController.php'),
6670
$this->makeFilePath('/app/Http/Tests/PoliciesComponentTest.php'),
6771
$this->makeFilePath('/app/Http/Policies/PoliciesControllerPolicy.php'),
@@ -123,3 +127,39 @@
123127
'WithoutResponsesController function parameter'
124128
);
125129
});
130+
131+
132+
test('namespace sorting', function () {
133+
/** @var TestCase $this */
134+
$mapping = Config::get('openapi-server-generator.api_docs_mappings');
135+
$mappingValue = current($mapping);
136+
$mapping = [$this->makeFilePath(__DIR__ . '/resources/index.yaml') => $mappingValue];
137+
Config::set('openapi-server-generator.api_docs_mappings', $mapping);
138+
139+
$filesystem = $this->mock(Filesystem::class);
140+
$filesystem->shouldReceive('exists')->andReturn(false);
141+
$filesystem->shouldReceive('get')->withArgs(function ($path) {
142+
return (bool)strstr($path, '.template');
143+
})->andReturnUsing(function ($path) {
144+
return file_get_contents($path);
145+
});
146+
$filesystem->shouldReceive('cleanDirectory', 'ensureDirectoryExists');
147+
$routes = '';
148+
$filesystem->shouldReceive('put')->withArgs(function ($path, $content) use (&$routes, &$rr) {
149+
if (str_contains($path, 'routes.php')) {
150+
$routes = $content;
151+
}
152+
153+
return true;
154+
});
155+
156+
artisan(GenerateServer::class, ['-e' => 'routes']);
157+
158+
assertStringContainsString(
159+
"use App\Http\Controllers\Controller11;\n".
160+
"use App\Http\Controllers\Controller2;\n".
161+
"use App\Http\Controllers\FooItemsController;\n".
162+
"use App\Http\Controllers\FoosController;\n",
163+
$routes
164+
);
165+
});

tests/resources/index.yaml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,42 @@ paths:
182182
responses:
183183
"200":
184184
description: Успешный ответ c контекстом
185+
/namespace-sort-1:
186+
post:
187+
operationId: namespaceSort1
188+
x-lg-handler: '\App\Http\Controllers\FooItemsController@test'
189+
x-lg-skip-request-generation: true
190+
x-lg-skip-tests-generation: true
191+
responses:
192+
"200":
193+
description: Успешный ответ
194+
/namespace-sort-2:
195+
post:
196+
operationId: namespaceSort2
197+
x-lg-handler: '\App\Http\Controllers\FoosController@test'
198+
x-lg-skip-request-generation: true
199+
x-lg-skip-tests-generation: true
200+
responses:
201+
"200":
202+
description: Успешный ответ
203+
/namespace-sort-3:
204+
post:
205+
operationId: namespaceSort3
206+
x-lg-handler: '\App\Http\Controllers\Controller11@test'
207+
x-lg-skip-request-generation: true
208+
x-lg-skip-tests-generation: true
209+
responses:
210+
"200":
211+
description: Успешный ответ
212+
/namespace-sort-4:
213+
post:
214+
operationId: namespaceSort4
215+
x-lg-handler: '\App\Http\Controllers\Controller2@test'
216+
x-lg-skip-request-generation: true
217+
x-lg-skip-tests-generation: true
218+
responses:
219+
"200":
220+
description: Успешный ответ
185221
components:
186222
responses:
187223
ServerError:

0 commit comments

Comments
 (0)