diff --git a/src/Parameters/Concerns/GeneratesFromRules.php b/src/Parameters/Concerns/GeneratesFromRules.php index ded1d55..51fcc95 100644 --- a/src/Parameters/Concerns/GeneratesFromRules.php +++ b/src/Parameters/Concerns/GeneratesFromRules.php @@ -62,11 +62,11 @@ protected function getEnumValues(array $paramRules) private function getInParameter(array $paramRules) { foreach ($paramRules as $rule) { - if (Str::startsWith($rule, 'in:')) { + if ((is_string($rule) || method_exists($rule , '__toString')) && Str::startsWith($rule, 'in:')) { return $rule; } } return false; } -} \ No newline at end of file +} diff --git a/tests/Parameters/BodyParameterGeneratorTest.php b/tests/Parameters/BodyParameterGeneratorTest.php index f8928fa..d168116 100644 --- a/tests/Parameters/BodyParameterGeneratorTest.php +++ b/tests/Parameters/BodyParameterGeneratorTest.php @@ -2,8 +2,10 @@ namespace Mtrajano\LaravelSwagger\Tests\Parameters; +use Illuminate\Validation\Rule; use Mtrajano\LaravelSwagger\Tests\TestCase; use Mtrajano\LaravelSwagger\Parameters\BodyParameterGenerator; +use Mtrajano\LaravelSwagger\Tests\Stubs\Rules\Uppercase as UppercaseRule; class BodyParameterGeneratorTest extends TestCase { @@ -153,6 +155,63 @@ public function testSingleObjectSyntax() ], $bodyParameters['schema']['properties']); } + public function testResolvesRuleEnum() + { + + $bodyParameters = $this->getBodyParameters([ + 'type' => [ + Rule::in(1,2,3), + 'integer', + ] + ]); + + $this->assertEquals([ + 'type' => [ + 'type' => 'integer', + 'enum' => ['"1"','"2"','"3"'], //using Rule::in parameters are cast to string + ] + ], $bodyParameters['schema']['properties']); + + } + + public function testIgnoresRuleObject() + { + + $bodyParameters = $this->getBodyParameters([ + 'name' => [ + 'string', + new UppercaseRule + ], + ]); + + $this->assertEquals([ + 'name' => [ + 'type' => 'string', + ] + ], $bodyParameters['schema']['properties']); + + } + + public function testIgnoresClosureRules() + { + $bodyParameters = $this->getBodyParameters([ + 'name' => [ + 'string', + function ($attribute, $value, $fail) { + if ($value === 'foo') { + $fail($attribute.' is invalid.'); + } + }, + ], + ]); + + $this->assertEquals([ + 'name' => [ + 'type' => 'string', + ] + ], $bodyParameters['schema']['properties']); + } + private function getBodyParameters(array $rules) { $bodyParameters = (new BodyParameterGenerator($rules))->getParameters(); diff --git a/tests/Stubs/Rules/Uppercase.php b/tests/Stubs/Rules/Uppercase.php new file mode 100644 index 0000000..863e7de --- /dev/null +++ b/tests/Stubs/Rules/Uppercase.php @@ -0,0 +1,30 @@ +