Skip to content

Commit f9b8419

Browse files
committed
fix(OpenApiType): Deduplicate enums
Signed-off-by: provokateurin <[email protected]>
1 parent 9128afa commit f9b8419

File tree

4 files changed

+591
-4
lines changed

4 files changed

+591
-4
lines changed

src/OpenApiType.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,12 @@ private static function mergeEnums(array $types): array {
289289
}
290290
}
291291

292+
foreach (array_map(static fn (OpenApiType $type) => $type->type, $nonEnums) as $type) {
293+
if (array_key_exists($type, $enums)) {
294+
unset($enums[$type]);
295+
}
296+
}
297+
292298
return array_merge($nonEnums, array_map(fn (string $type) => new OpenApiType(type: $type, enum: $enums[$type]), array_keys($enums)));
293299
}
294300

tests/appinfo/routes.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,14 @@
4545
['name' => 'Settings#listOfIntStringAndOneBool', 'url' => '/api/{apiVersion}/mixed-list-one', 'verb' => 'POST', 'requirements' => ['apiVersion' => '(v2)']],
4646
['name' => 'Settings#listOfIntStringAndAllBools', 'url' => '/api/{apiVersion}/mixed-list-all', 'verb' => 'POST', 'requirements' => ['apiVersion' => '(v2)']],
4747
['name' => 'Settings#booleanParameterRequired', 'url' => '/api/{apiVersion}/boolean', 'verb' => 'POST', 'requirements' => ['apiVersion' => '(v2)']],
48-
['name' => 'Settings#booleanParameterDefaultFalse', 'url' => '/api/{apiVersion}/boolean-false', 'verb' => 'POST', 'requirements' => ['apiVersion' => '(v2)']],
49-
['name' => 'Settings#booleanParameterDefaultTrue', 'url' => '/api/{apiVersion}/boolean-true', 'verb' => 'POST', 'requirements' => ['apiVersion' => '(v2)']],
48+
['name' => 'Settings#booleanParameterDefaultFalse', 'url' => '/api/{apiVersion}/boolean-default-false', 'verb' => 'POST', 'requirements' => ['apiVersion' => '(v2)']],
49+
['name' => 'Settings#booleanParameterDefaultTrue', 'url' => '/api/{apiVersion}/boolean-default-true', 'verb' => 'POST', 'requirements' => ['apiVersion' => '(v2)']],
50+
['name' => 'Settings#booleanTrueParameter', 'url' => '/api/{apiVersion}/boolean-true', 'verb' => 'POST', 'requirements' => ['apiVersion' => '(v2)']],
51+
['name' => 'Settings#booleanFalseParameter', 'url' => '/api/{apiVersion}/boolean-false', 'verb' => 'POST', 'requirements' => ['apiVersion' => '(v2)']],
52+
['name' => 'Settings#booleanTrueFalseParameter', 'url' => '/api/{apiVersion}/boolean-true-false', 'verb' => 'POST', 'requirements' => ['apiVersion' => '(v2)']],
53+
['name' => 'Settings#trueFalseParameter', 'url' => '/api/{apiVersion}/true-false', 'verb' => 'POST', 'requirements' => ['apiVersion' => '(v2)']],
54+
['name' => 'Settings#stringValueParameter', 'url' => '/api/{apiVersion}/string-value', 'verb' => 'POST', 'requirements' => ['apiVersion' => '(v2)']],
55+
['name' => 'Settings#intValueParameter', 'url' => '/api/{apiVersion}/int-value', 'verb' => 'POST', 'requirements' => ['apiVersion' => '(v2)']],
5056
['name' => 'Settings#numericParameter', 'url' => '/api/{apiVersion}/numeric', 'verb' => 'POST', 'requirements' => ['apiVersion' => '(v2)']],
5157
],
5258
];

tests/lib/Controller/SettingsController.php

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,78 @@ public function booleanParameterDefaultTrue(bool $yesOrNo = true): DataResponse
270270
return new DataResponse();
271271
}
272272

273+
/**
274+
* A route with boolean or true
275+
*
276+
* @param bool|true $yesOrNo boolean or true
277+
* @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
278+
*
279+
* 200: Admin settings updated
280+
*/
281+
public function booleanTrueParameter(bool $yesOrNo): DataResponse {
282+
return new DataResponse();
283+
}
284+
285+
/**
286+
* A route with boolean or false
287+
*
288+
* @param bool|false $yesOrNo boolean or false
289+
* @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
290+
*
291+
* 200: Admin settings updated
292+
*/
293+
public function booleanFalseParameter(bool $yesOrNo): DataResponse {
294+
return new DataResponse();
295+
}
296+
297+
/**
298+
* A route with boolean or true or false
299+
*
300+
* @param bool|true|false $yesOrNo boolean or true or false
301+
* @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
302+
*
303+
* 200: Admin settings updated
304+
*/
305+
public function booleanTrueFalseParameter(bool $yesOrNo): DataResponse {
306+
return new DataResponse();
307+
}
308+
309+
/**
310+
* A route with true or false
311+
*
312+
* @param true|false $yesOrNo true or false
313+
* @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
314+
*
315+
* 200: Admin settings updated
316+
*/
317+
public function trueFalseParameter(bool $yesOrNo): DataResponse {
318+
return new DataResponse();
319+
}
320+
321+
/**
322+
* A route with string or 'test'
323+
*
324+
* @param string|'test' $value string or 'test'
325+
* @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
326+
*
327+
* 200: Admin settings updated
328+
*/
329+
public function stringValueParameter(string $value): DataResponse {
330+
return new DataResponse();
331+
}
332+
333+
/**
334+
* A route with int or 0
335+
*
336+
* @param int|0 $value int or 0
337+
* @return DataResponse<Http::STATUS_OK, array<empty>, array{}>
338+
*
339+
* 200: Admin settings updated
340+
*/
341+
public function intValueParameter(int $value): DataResponse {
342+
return new DataResponse();
343+
}
344+
273345
/**
274346
* A route with numeric
275347
*

0 commit comments

Comments
 (0)