Skip to content

Commit bea15ed

Browse files
committed
fix: unable to handle responses with field name "type"
1 parent aa1c7b1 commit bea15ed

File tree

5 files changed

+38
-9
lines changed

5 files changed

+38
-9
lines changed

src/Services/SwaggerService.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ protected function saveObjectResponseDefinitions(array $content, array &$schemaP
317317
$properties = Arr::get($this->data['definitions'], $definition, []);
318318

319319
foreach ($content as $name => $value) {
320-
$property = Arr::get($properties, $name, []);
320+
$property = Arr::get($properties, "properties.{$name}", []);
321321

322322
if (is_null($value)) {
323323
$property['nullable'] = true;

tests/SwaggerServiceTest.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,27 @@ public function testAddDataWithPathParameters()
535535
$service->addData($request, $response);
536536
}
537537

538+
public function testAddDataWithTypeNameInResponse()
539+
{
540+
$this->mockDriverGetTpmData($this->getJsonFixture('tmp_data_get_user_request'));
541+
542+
$service = app(SwaggerService::class);
543+
544+
$request = $this->generateRequest('get', 'users/{id}/assign-role/{role-id}', [
545+
'with' => ['role'],
546+
'with_likes_count' => true
547+
], [
548+
'id' => 1,
549+
'role-id' => 5
550+
]);
551+
552+
$response = $this->generateResponse('example_success_user_response.json', 200, [
553+
'Content-type' => 'application/json'
554+
]);
555+
556+
$service->addData($request, $response);
557+
}
558+
538559
public function testAddDataClosureRequest()
539560
{
540561
config(['auto-doc.security' => 'jwt']);

tests/fixtures/SwaggerServiceTest/example_success_user_response.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@
55
"role": {
66
"id": 2,
77
"name": "client"
8-
}
8+
},
9+
"type": "reader"
910
}

tests/fixtures/SwaggerServiceTest/tmp_data_get_user_request.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@
5959
"role": {
6060
"id": 2,
6161
"name": "client"
62-
}
62+
},
63+
"type": "reader"
6364
},
6465
"$ref": "#/definitions/getUsers{id}assignRole{roleId}200ResponseObject"
6566
}
@@ -87,6 +88,9 @@
8788
},
8889
"role": {
8990
"type": "array"
91+
},
92+
"type": {
93+
"type": "string"
9094
}
9195
}
9296
}

tests/support/Traits/SwaggerServiceMockTrait.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ protected function mockDriverGetEmptyAndSaveTpmData(
1212
$tmpData,
1313
$savedTmpData = null,
1414
$driverClass = LocalDriver::class
15-
) {
15+
): void {
1616
$driver = $this->mockClass($driverClass, ['getTmpData', 'saveTmpData']);
1717

1818
$driver
@@ -32,8 +32,11 @@ protected function mockDriverGetEmptyAndSaveTpmData(
3232
$this->app->instance($driverClass, $driver);
3333
}
3434

35-
protected function mockDriverGetPreparedAndSaveTpmData($getTmpData, $saveTmpData, $driverClass = LocalDriver::class)
36-
{
35+
protected function mockDriverGetPreparedAndSaveTpmData(
36+
$getTmpData,
37+
$saveTmpData,
38+
$driverClass = LocalDriver::class
39+
): void {
3740
$driver = $this->mockClass($driverClass, ['getTmpData', 'saveTmpData']);
3841

3942
$driver
@@ -49,7 +52,7 @@ protected function mockDriverGetPreparedAndSaveTpmData($getTmpData, $saveTmpData
4952
$this->app->instance($driverClass, $driver);
5053
}
5154

52-
protected function mockDriverGetTpmData($tmpData, $driverClass = LocalDriver::class)
55+
protected function mockDriverGetTpmData($tmpData, $driverClass = LocalDriver::class): void
5356
{
5457
$driver = $this->mockClass($driverClass, ['getTmpData']);
5558

@@ -61,7 +64,7 @@ protected function mockDriverGetTpmData($tmpData, $driverClass = LocalDriver::cl
6164
$this->app->instance($driverClass, $driver);
6265
}
6366

64-
protected function mockDriverGetDocumentation($data, $driverClass = LocalDriver::class)
67+
protected function mockDriverGetDocumentation($data, $driverClass = LocalDriver::class): void
6568
{
6669
$driver = $this->mockClass($driverClass, ['getDocumentation']);
6770

@@ -73,7 +76,7 @@ protected function mockDriverGetDocumentation($data, $driverClass = LocalDriver:
7376
$this->app->instance($driverClass, $driver);
7477
}
7578

76-
protected function mockDriverSaveData($driverClass = LocalDriver::class)
79+
protected function mockDriverSaveData($driverClass = LocalDriver::class): void
7780
{
7881
$driver = $this->mockClass($driverClass, ['saveData']);
7982

0 commit comments

Comments
 (0)