diff --git a/composer.lock b/composer.lock index f7baac2..f1e8939 100644 --- a/composer.lock +++ b/composer.lock @@ -190,17 +190,17 @@ }, { "name": "zendframework/zend-http", - "version": "2.5.4", + "version": "2.5.5", "source": { "type": "git", "url": "https://github.com/zendframework/zend-http.git", - "reference": "7b920b4ec34b5ee58f76eb4e8c408b083121953c" + "reference": "98b1cac0bc7a91497c5898184281abcd0e24c8d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-http/zipball/7b920b4ec34b5ee58f76eb4e8c408b083121953c", - "reference": "7b920b4ec34b5ee58f76eb4e8c408b083121953c", - "shasum": "42b4a537200c6a39e09177d00f29ed781145d479" + "url": "https://api.github.com/repos/zendframework/zend-http/zipball/98b1cac0bc7a91497c5898184281abcd0e24c8d6", + "reference": "98b1cac0bc7a91497c5898184281abcd0e24c8d6", + "shasum": "" }, "require": { "php": "^5.5 || ^7.0", @@ -226,11 +226,7 @@ "Zend\\Http\\": "src/" } }, - "autoload-dev": { - "psr-4": { - "ZendTest\\Http\\": "test/" - } - }, + "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], @@ -240,7 +236,7 @@ "http", "zf2" ], - "time": "2016-02-04 20:36:48" + "time": "2016-08-08 15:01:54" }, { "name": "zendframework/zend-json", @@ -397,16 +393,16 @@ }, { "name": "zendframework/zend-mvc", - "version": "3.0.2", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/zendframework/zend-mvc.git", - "reference": "3c6c9e570e01a8b8fcb0605d2f8eb25812c0c273" + "reference": "69ac3e4dcf0639101ac71478dcb39941ba4e7e7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-mvc/zipball/3c6c9e570e01a8b8fcb0605d2f8eb25812c0c273", - "reference": "3c6c9e570e01a8b8fcb0605d2f8eb25812c0c273", + "url": "https://api.github.com/repos/zendframework/zend-mvc/zipball/69ac3e4dcf0639101ac71478dcb39941ba4e7e7e", + "reference": "69ac3e4dcf0639101ac71478dcb39941ba4e7e7e", "shasum": "" }, "require": { @@ -458,7 +454,7 @@ "mvc", "zf2" ], - "time": "2016-06-30 20:30:28" + "time": "2016-08-29 18:41:32" }, { "name": "zendframework/zend-router", @@ -523,16 +519,16 @@ }, { "name": "zendframework/zend-servicemanager", - "version": "3.1.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/zendframework/zend-servicemanager.git", - "reference": "90b88339a4b937c6bb0055ee04b2567e7e628f25" + "reference": "f701b0d322741b0c8d8ca1288f249a49438029cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/90b88339a4b937c6bb0055ee04b2567e7e628f25", - "reference": "90b88339a4b937c6bb0055ee04b2567e7e628f25", + "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/f701b0d322741b0c8d8ca1288f249a49438029cd", + "reference": "f701b0d322741b0c8d8ca1288f249a49438029cd", "shasum": "" }, "require": { @@ -555,8 +551,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev", - "dev-develop": "3.1-dev" + "dev-master": "3.1-dev", + "dev-develop": "3.2-dev" } }, "autoload": { @@ -574,35 +570,35 @@ "servicemanager", "zf" ], - "time": "2016-06-01 16:50:58" + "time": "2016-07-15 14:59:51" }, { "name": "zendframework/zend-stdlib", - "version": "3.0.1", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/zendframework/zend-stdlib.git", - "reference": "8bafa58574204bdff03c275d1d618aaa601588ae" + "reference": "debedcfc373a293f9250cc9aa03cf121428c8e78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/8bafa58574204bdff03c275d1d618aaa601588ae", - "reference": "8bafa58574204bdff03c275d1d618aaa601588ae", + "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/debedcfc373a293f9250cc9aa03cf121428c8e78", + "reference": "debedcfc373a293f9250cc9aa03cf121428c8e78", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0" + "php": "^5.6 || ^7.0" }, "require-dev": { "athletic/athletic": "~0.1", - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "^2.6.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev", - "dev-develop": "3.1-dev" + "dev-master": "3.1-dev", + "dev-develop": "3.2-dev" } }, "autoload": { @@ -619,7 +615,7 @@ "stdlib", "zf2" ], - "time": "2016-04-12 21:19:36" + "time": "2016-09-13 14:38:50" }, { "name": "zendframework/zend-uri", @@ -751,7 +747,7 @@ "type": "zip", "url": "https://api.github.com/repos/zendframework/zend-view/zipball/71b4ebd0c4c9a2d0e0438f9d3a435e08dd769ff8", "reference": "71b4ebd0c4c9a2d0e0438f9d3a435e08dd769ff8", - "shasum": "1867e5ed45eb8136c227794589da6db0f20d7e0e" + "shasum": "0f65582573d32b1dfa8d33ab3008ae046b660e3f" }, "require": { "php": "^5.5 || ^7.0", @@ -942,16 +938,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "3.1.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "9270140b940ff02e58ec577c237274e92cd40cdd" + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9270140b940ff02e58ec577c237274e92cd40cdd", - "reference": "9270140b940ff02e58ec577c237274e92cd40cdd", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", "shasum": "" }, "require": { @@ -983,7 +979,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2016-06-10 09:48:41" + "time": "2016-09-30 07:12:33" }, { "name": "phpdocumentor/type-resolver", @@ -1339,16 +1335,16 @@ }, { "name": "phpunit/phpunit", - "version": "4.8.26", + "version": "4.8.27", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "fc1d8cd5b5de11625979125c5639347896ac2c74" + "reference": "c062dddcb68e44b563f66ee319ddae2b5a322a90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fc1d8cd5b5de11625979125c5639347896ac2c74", - "reference": "fc1d8cd5b5de11625979125c5639347896ac2c74", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c062dddcb68e44b563f66ee319ddae2b5a322a90", + "reference": "c062dddcb68e44b563f66ee319ddae2b5a322a90", "shasum": "" }, "require": { @@ -1407,7 +1403,7 @@ "testing", "xunit" ], - "time": "2016-05-17 03:09:28" + "time": "2016-07-21 06:48:14" }, { "name": "phpunit/phpunit-mock-objects", @@ -1583,23 +1579,23 @@ }, { "name": "sebastian/environment", - "version": "1.3.7", + "version": "1.3.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716" + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4e8f0da10ac5802913afc151413bc8c53b6c2716", - "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^4.8 || ^5.0" }, "type": "library", "extra": { @@ -1629,7 +1625,7 @@ "environment", "hhvm" ], - "time": "2016-05-17 03:18:57" + "time": "2016-08-18 05:49:44" }, { "name": "sebastian/exporter", @@ -1917,16 +1913,16 @@ }, { "name": "symfony/yaml", - "version": "v3.1.2", + "version": "v3.1.6", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "2884c26ce4c1d61aebf423a8b912950fe7c764de" + "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/2884c26ce4c1d61aebf423a8b912950fe7c764de", - "reference": "2884c26ce4c1d61aebf423a8b912950fe7c764de", + "url": "https://api.github.com/repos/symfony/yaml/zipball/7ff51b06c6c3d5cc6686df69004a42c69df09e27", + "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27", "shasum": "" }, "require": { @@ -1962,32 +1958,33 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2016-06-29 05:41:56" + "time": "2016-10-24 18:41:13" }, { "name": "webmozart/assert", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde" + "reference": "bb2d123231c095735130cc8f6d31385a44c7b308" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde", - "reference": "30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308", + "reference": "bb2d123231c095735130cc8f6d31385a44c7b308", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3|^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.6" + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.2-dev" } }, "autoload": { @@ -2011,7 +2008,7 @@ "check", "validate" ], - "time": "2015-08-24 13:29:44" + "time": "2016-08-09 15:02:57" } ], "aliases": [], diff --git a/src/Listener/ApiProblemListener.php b/src/Listener/ApiProblemListener.php index d0062a8..a5221ff 100644 --- a/src/Listener/ApiProblemListener.php +++ b/src/Listener/ApiProblemListener.php @@ -7,6 +7,8 @@ namespace ZF\ApiProblem\Listener; +use Exception; +use Throwable; use Zend\EventManager\EventManagerInterface; use Zend\EventManager\AbstractListenerAggregate; use Zend\Http\Header\Accept as AcceptHeader; @@ -96,7 +98,7 @@ public function onRender(MvcEvent $e) $status = $e->getResponse()->getStatusCode(); $exception = $model->getVariable('exception'); - if ($exception instanceof \Exception) { + if ($exception instanceof Throwable || $exception instanceof Exception) { $apiProblem = new ApiProblem($status, $exception); } else { $apiProblem = new ApiProblem($status, $model->getVariable('message')); @@ -156,7 +158,7 @@ public function onDispatchError(MvcEvent $e) // Marshall an ApiProblem and view model based on the exception $exception = $e->getParam('exception'); - if (! $exception instanceof \Exception) { + if (! ($exception instanceof Throwable || $exception instanceof Exception)) { // If it's not an exception, do not know what to do. return; } diff --git a/test/Listener/ApiProblemListenerTest.php b/test/Listener/ApiProblemListenerTest.php index b0b33f0..dd65ace 100644 --- a/test/Listener/ApiProblemListenerTest.php +++ b/test/Listener/ApiProblemListenerTest.php @@ -52,4 +52,28 @@ public function testOnDispatchErrorReturnsAnApiProblemResponseBasedOnCurrentEven $this->assertEquals(400, $problem->status); $this->assertSame($event->getParam('exception'), $problem->detail); } + + /** + * @requires PHP 7.0 + */ + public function testOnDispatchErrorReturnsAnApiProblemResponseBasedOnCurrentEventThrowable() + { + $request = new Request(); + $request->getHeaders()->addHeaderLine('Accept', 'application/json'); + + $event = new MvcEvent(); + $event->setError(Application::ERROR_EXCEPTION); + $event->setParam('exception', new \TypeError('triggering throwable', 400)); + $event->setRequest($request); + $return = $this->listener->onDispatchError($event); + + $this->assertTrue($event->propagationIsStopped()); + $this->assertInstanceOf('ZF\ApiProblem\ApiProblemResponse', $return); + $response = $event->getResponse(); + $this->assertSame($return, $response); + $problem = $response->getApiProblem(); + $this->assertInstanceOf('ZF\ApiProblem\ApiProblem', $problem); + $this->assertEquals(400, $problem->status); + $this->assertSame($event->getParam('exception'), $problem->detail); + } }