Skip to content

Commit 80b45a4

Browse files
authored
Merge pull request #29 from ensi-platform/task-106885
#106885 fix namespace sorting
2 parents e03fbfa + c94a374 commit 80b45a4

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
@@ -59,6 +59,10 @@
5959
$this->makeFilePath('/app/Http/Resources/ResourcesDataDataResource.php'),
6060
$this->makeFilePath('/app/Http/Resources/ResourceRootResource.php'),
6161

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

tests/resources/index.yaml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,42 @@ paths:
171171
responses:
172172
"200":
173173
description: Успешный ответ c контекстом
174+
/namespace-sort-1:
175+
post:
176+
operationId: namespaceSort1
177+
x-lg-handler: '\App\Http\Controllers\FooItemsController@test'
178+
x-lg-skip-request-generation: true
179+
x-lg-skip-tests-generation: true
180+
responses:
181+
"200":
182+
description: Успешный ответ
183+
/namespace-sort-2:
184+
post:
185+
operationId: namespaceSort2
186+
x-lg-handler: '\App\Http\Controllers\FoosController@test'
187+
x-lg-skip-request-generation: true
188+
x-lg-skip-tests-generation: true
189+
responses:
190+
"200":
191+
description: Успешный ответ
192+
/namespace-sort-3:
193+
post:
194+
operationId: namespaceSort3
195+
x-lg-handler: '\App\Http\Controllers\Controller11@test'
196+
x-lg-skip-request-generation: true
197+
x-lg-skip-tests-generation: true
198+
responses:
199+
"200":
200+
description: Успешный ответ
201+
/namespace-sort-4:
202+
post:
203+
operationId: namespaceSort4
204+
x-lg-handler: '\App\Http\Controllers\Controller2@test'
205+
x-lg-skip-request-generation: true
206+
x-lg-skip-tests-generation: true
207+
responses:
208+
"200":
209+
description: Успешный ответ
174210
components:
175211
responses:
176212
ServerError:

0 commit comments

Comments
 (0)