Skip to content

Commit

Permalink
Support enum parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
shalvah committed Aug 20, 2023
1 parent 81fbec9 commit da796b4
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 13 deletions.
4 changes: 2 additions & 2 deletions src/Extracting/ParamHelpers.php
Original file line number Diff line number Diff line change
Expand Up @@ -250,8 +250,8 @@ protected function parseExampleFromParamDescription(string $description, string
$description = trim($content[1]);

$enumValues = array_map(
fn ($value) => $this->castToType($value, $type),
explode($content[2], ',')
fn ($value) => $this->castToType(trim($value), $type),
explode(',', rtrim(trim($content[2]), '.'))
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,12 @@ public function can_fetch_from_bodyparam_attribute()
'description' => '',
'required' => true,
],
'state' => [
'type' => 'string',
'description' => '',
'required' => true,
'enumValues' => ["active", "pending"]
],
'users' => [
'type' => 'object[]',
'description' => 'Users\' details',
Expand Down Expand Up @@ -216,6 +222,7 @@ class BodyParamAttributeTestController
#[BodyParam("book.author_id", type: "integer")]
#[BodyParam("book.pages_count", type: "integer")]
#[BodyParam("ids", "integer[]")]
#[BodyParam("state", enum: ["active", "pending"])]
#[BodyParam("users", "object[]", "Users' details", required: false)]
#[BodyParam("users[].first_name", "string", "The first name of the user.", example: "John", required: false)]
#[BodyParam("users[].last_name", "string", "The last name of the user.", example: "Doe", required: false)]
Expand Down
6 changes: 3 additions & 3 deletions tests/Strategies/GetFromInlineValidatorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class GetFromInlineValidatorTest extends BaseLaravelTest
'room_id' => [
'type' => 'string',
'required' => false,
'description' => 'The id of the room. Must be one of <code>3</code>, <code>5</code>, or <code>6</code>.',
'description' => 'The id of the room.',
],
'forever' => [
'type' => 'boolean',
Expand Down Expand Up @@ -193,12 +193,12 @@ public function can_fetch_inline_enum_rules()
$expected = [
'enum_class' => [
'type' => 'string',
'description' => 'Must be one of <code>red</code>, <code>green</code>, or <code>blue</code>.',
'description' => '',
'required' => true,
],
'enum_string' => [
'type' => 'string',
'description' => 'Must be one of <code>1</code>, <code>2</code>, or <code>3</code>.',
'description' => '',
'required' => true,
],
'enum_inexistent' => [
Expand Down
17 changes: 9 additions & 8 deletions tests/Unit/ValidationRuleParsingTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ public function can_parse_rule_objects()
'in_param' => ['numeric', Rule::in([3,5,6])]
]);
$this->assertEquals(
'Must be one of <code>3</code>, <code>5</code>, or <code>6</code>.',
$results['in_param']['description']
[3, 5, 6],
$results['in_param']['enumValues']
);
}

Expand Down Expand Up @@ -228,8 +228,9 @@ public static function supportedRules()
['in_param' => 'in:3,5,6'],
['in_param' => ['description' => $description]],
[
'description' => "$description. Must be one of <code>3</code>, <code>5</code>, or <code>6</code>.",
'description' => $description.".",
'type' => 'string',
'enumValues' => [3,5,6]
],
];
yield 'not_in' => [
Expand Down Expand Up @@ -533,8 +534,8 @@ public function can_parse_enum_rules()
]);
$this->assertEquals('string', $results['enum']['type']);
$this->assertEquals(
'Must be one of <code>red</code>, <code>green</code>, or <code>blue</code>.',
$results['enum']['description']
['red', 'green', 'blue'],
$results['enum']['enumValues']
);
$this->assertTrue(in_array(
$results['enum']['example'],
Expand All @@ -547,8 +548,8 @@ public function can_parse_enum_rules()
]);
$this->assertEquals('integer', $results['enum']['type']);
$this->assertEquals(
'Must be one of <code>1</code>, <code>2</code>, or <code>3</code>.',
$results['enum']['description']
[1, 2, 3],
$results['enum']['enumValues']
);
$this->assertTrue(in_array(
$results['enum']['example'],
Expand All @@ -562,7 +563,7 @@ public function can_parse_enum_rules()
]);
$this->assertEquals('string', $results['enum']['type']);
$this->assertEquals(
'A description. Must be one of <code>red</code>, <code>green</code>, or <code>blue</code>.',
'A description.',
$results['enum']['description']
);
$this->assertTrue(in_array(
Expand Down

0 comments on commit da796b4

Please sign in to comment.