diff --git a/src/Api/Handler/IlluminateValidationExceptionHandler.php b/src/Api/Handler/IlluminateValidationExceptionHandler.php index c25def581..743b4ca78 100644 --- a/src/Api/Handler/IlluminateValidationExceptionHandler.php +++ b/src/Api/Handler/IlluminateValidationExceptionHandler.php @@ -31,8 +31,17 @@ class IlluminateValidationExceptionHandler implements ExceptionHandlerInterface public function handle(Exception $e) { $status = 422; + $errors = $this->formatErrors($e->errors()->toArray()); - $errors = $e->errors()->toArray(); + return new ResponseBag($status, $errors); + } + + /** + * @param array $errors + * @return array + */ + protected function formatErrors(array $errors) + { $errors = array_map(function ($field, $messages) { return [ 'detail' => implode("\n", $messages), @@ -40,6 +49,6 @@ class IlluminateValidationExceptionHandler implements ExceptionHandlerInterface ]; }, array_keys($errors), $errors); - return new ResponseBag($status, $errors); + return $errors; } } diff --git a/tests/Flarum/Api/Handler/FloodingExceptionHandlerTest.php b/tests/Flarum/Api/Handler/FloodingExceptionHandlerTest.php index 504c462b7..fae69cc00 100644 --- a/tests/Flarum/Api/Handler/FloodingExceptionHandlerTest.php +++ b/tests/Flarum/Api/Handler/FloodingExceptionHandlerTest.php @@ -1,5 +1,5 @@ handler = new ValidationExceptionHandler; + } + + public function test_it_handles_familiar_exceptions() + { + $validException = new ValidationException(['messages']); + + $this->assertFalse($this->handler->manages(new \Exception)); + $this->assertTrue($this->handler->manages($validException)); + } + + public function test_it_creates_the_desired_output() + { + $this->markTestIncomplete(); + + $exception = new ValidationException(['field' => ['Some error']]); + + $response = $this->handler->handle($exception); + + $this->assertEquals(422, $response->getStatus()); + } +}