Skip to content

Commit cb85937

Browse files
author
Anton Filippov
committed
#81781
1 parent 8cd87ee commit cb85937

File tree

8 files changed

+93
-46
lines changed

8 files changed

+93
-46
lines changed

src/Data/OpenApi3/OpenApi3Object.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ public function fillFromStdObject(stdClass $object): void
2424
/** @var OpenApi3ObjectProperty $objectProperty */
2525
$objectProperty = $this->properties->get($propertyName);
2626
if (!$objectProperty) {
27-
$objectProperty = new OpenApi3ObjectProperty(type: $property->type, name: $propertyName, );
27+
$objectProperty = new OpenApi3ObjectProperty(type: $property->type, name: $propertyName);
2828
$this->properties->put($propertyName, $objectProperty);
2929
}
3030
$objectProperty->fillFromStdProperty($propertyName, $property);
3131
}
3232
}
33-
if (std_object_has($object, 'required')) {
33+
if (std_object_has($object, 'required') && is_array($object->required)) {
3434
foreach ($object->required as $requiredProperty) {
3535
$objectProperty = $this->properties->get($requiredProperty);
3636
if (!$objectProperty) {

templates/Request.template

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,8 @@ namespace {{ namespace }};
55
use App\Http\ApiV1\Support\Requests\BaseFormRequest;
66
{{ uses }}
77

8-
class {{ className }} extends FormRequest
8+
class {{ className }} extends BaseFormRequest
99
{
10-
/**
11-
* Determine if the user is authorized to make this request.
12-
*
13-
* @return bool
14-
*/
15-
public function authorize(): bool
16-
{
17-
return false;
18-
}
19-
2010
/**
2111
* Get the validation rules that apply to the request.
2212
*

tests/GenerateServerTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
$this->makeFilePath('/app/Http/Requests/TestFullGenerateRequest.php'),
4242
$this->makeFilePath('/app/Http/Tests/ResourcesComponentTest.php'),
4343
$this->makeFilePath('/app/Http/Requests/TestFooRenameRequest.php'),
44+
$this->makeFilePath('/app/Http/Requests/LaravelValidationsRequest.php'),
4445

4546
$this->makeFilePath('/app/Http/Controllers/WithoutResponsesController.php'),
4647

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
use Ensi\LaravelOpenApiServerGenerator\Commands\GenerateServer;
4+
use Ensi\LaravelOpenApiServerGenerator\Tests\TestCase;
5+
use Illuminate\Filesystem\Filesystem;
6+
use Illuminate\Support\Facades\Config;
7+
use function Pest\Laravel\artisan;
8+
use function PHPUnit\Framework\assertStringEqualsFile;
9+
10+
test('Create Request from ResourceForTestValidationRules', function () {
11+
/** @var TestCase $this */
12+
$mapping = Config::get('openapi-server-generator.api_docs_mappings');
13+
$mappingValue = current($mapping);
14+
$mapping = [$this->makeFilePath(__DIR__ . '/resources/index.yaml') => $mappingValue];
15+
Config::set('openapi-server-generator.api_docs_mappings', $mapping);
16+
17+
$filesystem = $this->mock(Filesystem::class);
18+
$filesystem->shouldReceive('exists')->andReturn(false);
19+
$filesystem->shouldReceive('get')->withArgs(function ($path) {
20+
return (bool)strstr($path, '.template');
21+
})->andReturnUsing(function ($path) {
22+
return file_get_contents($path);
23+
});
24+
$filesystem->shouldReceive('cleanDirectory', 'ensureDirectoryExists');
25+
$request = null;
26+
$filesystem->shouldReceive('put')->withArgs(function ($path, $content) use (&$request) {
27+
if (str_contains($path, 'LaravelValidationsRequest.php')) {
28+
$request = $content;
29+
}
30+
31+
return true;
32+
});
33+
34+
artisan(GenerateServer::class);
35+
36+
assertStringEqualsFile(__DIR__ . '/expects/LaravelValidationsRequest.php', $request);
37+
});

tests/RequestLaravelValidationRulesTest.php

Lines changed: 0 additions & 30 deletions
This file was deleted.
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
namespace App\Http\Requests;
4+
5+
use App\Http\ApiV1\Support\Requests\BaseFormRequest;
6+
use App\Http\ApiV1\OpenApiGenerated\Enums\TestIntegerEnum;
7+
use Illuminate\Validation\Rules\Enum;
8+
9+
class LaravelValidationsRequest extends BaseFormRequest
10+
{
11+
/**
12+
* Get the validation rules that apply to the request.
13+
*
14+
* @return array
15+
*/
16+
public function rules(): array
17+
{
18+
return [
19+
'field_object_nullable' => ['nullable'],
20+
'field_object_nullable.field' => ['integer'],
21+
'field_array_nullable' => ['nullable', 'array'],
22+
'field_array_nullable.*.field' => ['integer'],
23+
'field_enum_nullable' => ['nullable', new Enum(TestIntegerEnum::class)],
24+
'field_number_nullable' => ['nullable', 'numeric'],
25+
'field_boolean_nullable' => ['nullable', 'boolean'],
26+
'field_string_nullable' => ['nullable', 'string'],
27+
'field_integer_nullable' => ['nullable', 'integer'],
28+
'field_object_required' => ['required'],
29+
'field_object_required.field' => ['integer'],
30+
'field_array_required' => ['required', 'array'],
31+
'field_array_required.*.field' => ['integer'],
32+
'field_enum_required' => [new Enum(TestIntegerEnum::class)],
33+
'field_number_required' => ['required', 'numeric'],
34+
'field_boolean_required' => ['required', 'boolean'],
35+
'field_string_required' => ['required', 'string'],
36+
'field_integer_required' => ['required', 'integer'],
37+
'field_object' => ['required'],
38+
'field_object.field' => ['integer'],
39+
'field_array' => ['required', 'array'],
40+
'field_array.*.field' => ['integer'],
41+
'field_enum' => ['required', new Enum(TestIntegerEnum::class)],
42+
'field_number' => ['required', 'numeric'],
43+
'field_boolean' => ['required', 'boolean'],
44+
'field_string' => ['required', 'string'],
45+
'field_integer' => ['required', 'integer'],
46+
];
47+
}
48+
}

tests/resources/index.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,14 +75,14 @@ paths:
7575
x-lg-skip-request-generation: true
7676
/resources:test-laravel-validations-request:
7777
post:
78-
operationId: laravelValidationsRequest
78+
operationId: laravelValidations
7979
x-lg-handler: '\App\Http\Controllers\ResourcesController@testLaravelValidationsRequest'
8080
requestBody:
8181
required: true
8282
content:
8383
application/json:
8484
schema:
85-
$ref: './schemas/resources.yaml#/ResourceForTestValidationRulesRequest'
85+
$ref: './schemas/resources.yaml#/ResourceForTestValidationRules'
8686
responses:
8787
"200":
8888
description: Успешный ответ

tests/resources/schemas/resources.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ ResourceFillableForTestValidationRules:
110110
field:
111111
type: integer
112112
nullable: true
113+
113114
ResourceRequiredForTestValidationRules:
114115
type: object
115116
required:
@@ -122,7 +123,7 @@ ResourceRequiredForTestValidationRules:
122123
- field_object
123124

124125
#Requests
125-
ResourceForTestValidationRulesRequest:
126+
ResourceForTestValidationRules:
126127
allOf:
127128
- $ref: '#/ResourceFillableForTestValidationRules'
128129
- $ref: '#/ResourceRequiredForTestValidationRules'

0 commit comments

Comments
 (0)