From f625d9671c9a7a4cd886949755a33e74f656a497 Mon Sep 17 00:00:00 2001 From: lucasvanlierop Date: Mon, 29 Sep 2014 16:18:11 +0200 Subject: [PATCH] Fixed disabling required for HTTP PUT requests --- Extractor/ApiDocExtractor.php | 2 +- Tests/Extractor/ApiDocExtractorTest.php | 26 ++++++++++++++++++++ Tests/Fixtures/Controller/TestController.php | 9 +++++++ Tests/Fixtures/Form/TestType.php | 1 + Tests/Fixtures/app/config/routing.yml | 15 +++++++++++ 5 files changed, 52 insertions(+), 1 deletion(-) diff --git a/Extractor/ApiDocExtractor.php b/Extractor/ApiDocExtractor.php index ac1b503..56d6589 100644 --- a/Extractor/ApiDocExtractor.php +++ b/Extractor/ApiDocExtractor.php @@ -284,7 +284,7 @@ class ApiDocExtractor if ('PUT' === $annotation->getMethod()) { // All parameters are optional with PUT (update) - array_walk($parameters, function ($val, $key) use (&$data) { + array_walk($parameters, function ($val, $key) use (&$parameters) { $parameters[$key]['required'] = false; }); } diff --git a/Tests/Extractor/ApiDocExtractorTest.php b/Tests/Extractor/ApiDocExtractorTest.php index a0dbd29..b09d8ad 100644 --- a/Tests/Extractor/ApiDocExtractorTest.php +++ b/Tests/Extractor/ApiDocExtractorTest.php @@ -11,6 +11,8 @@ namespace Nelmio\ApiDocBundle\Tests\Extractor; +use Nelmio\ApiDocBundle\Annotation\ApiDoc; +use Nelmio\ApiDocBundle\Extractor\ApiDocExtractor; use Nelmio\ApiDocBundle\Tests\WebTestCase; class ApiDocExtractorTest extends WebTestCase @@ -256,4 +258,28 @@ class ApiDocExtractorTest extends WebTestCase ); $this->assertCount(1, $parsers); } + + public function testPostRequestDoesRequireParametersWhenMarkedAsSuch() + { + $container = $this->getContainer(); + /** @var ApiDocExtractor $extractor */ + $extractor = $container->get('nelmio_api_doc.extractor.api_doc_extractor'); + /** @var ApiDoc $annotation */ + $annotation = $extractor->get('Nelmio\ApiDocBundle\Tests\Fixtures\Controller\TestController::requiredParametersAction', 'test_required_parameters'); + + $parameters = $annotation->getParameters(); + $this->assertTrue($parameters['required_field']['required']); + } + + public function testPutRequestDoesNeverRequireParameters() + { + $container = $this->getContainer(); + /** @var ApiDocExtractor $extractor */ + $extractor = $container->get('nelmio_api_doc.extractor.api_doc_extractor'); + /** @var ApiDoc $annotation */ + $annotation = $extractor->get('Nelmio\ApiDocBundle\Tests\Fixtures\Controller\TestController::requiredParametersAction', 'test_put_disables_required_parameters'); + + $parameters = $annotation->getParameters(); + $this->assertFalse($parameters['required_field']['required']); + } } diff --git a/Tests/Fixtures/Controller/TestController.php b/Tests/Fixtures/Controller/TestController.php index 82c15b5..222d312 100644 --- a/Tests/Fixtures/Controller/TestController.php +++ b/Tests/Fixtures/Controller/TestController.php @@ -65,6 +65,15 @@ class TestController { } + /** + * @ApiDoc( + * input="Nelmio\ApiDocBundle\Tests\Fixtures\Form\TestType" + * ) + */ + public function requiredParametersAction() + { + } + public function anotherAction() { } diff --git a/Tests/Fixtures/Form/TestType.php b/Tests/Fixtures/Form/TestType.php index 1628ee2..b54cb3b 100644 --- a/Tests/Fixtures/Form/TestType.php +++ b/Tests/Fixtures/Form/TestType.php @@ -27,6 +27,7 @@ class TestType extends AbstractType ->add('b') ->add($builder->create('c', 'checkbox')) ->add('d','text',array( 'data' => 'DefaultTest')) + ->add('required_field', 'text', array('required' => true)) ; } diff --git a/Tests/Fixtures/app/config/routing.yml b/Tests/Fixtures/app/config/routing.yml index f584f88..9f24fc0 100644 --- a/Tests/Fixtures/app/config/routing.yml +++ b/Tests/Fixtures/app/config/routing.yml @@ -219,3 +219,18 @@ test_route_24: defaults: { _controller: NelmioApiDocTestBundle:Test:zSecured } requirements: _method: POST + +test_required_parameters: + pattern: /api/other-resources/{id}.{_format} + defaults: { _controller: NelmioApiDocTestBundle:Resource:requiredParametersAction, _format: json } + requirements: + _method: POST + _format: json|xml|html + +test_put_disables_required_parameters: + pattern: /api/other-resources/{id}.{_format} + defaults: { _controller: NelmioApiDocTestBundle:Resource:requiredParametersAction, _format: json } + requirements: + _method: PUT + _format: json|xml|html +