Fixing issue where errors that did not have a 500+ code would use the incorrect status code.

This commit is contained in:
Mark Story 2010-09-04 19:06:10 -04:00
parent 4d863618f5
commit d198230e61
2 changed files with 16 additions and 3 deletions

View file

@ -85,8 +85,8 @@ class ErrorHandler {
/**
* Creates the controller to perform rendering on the error response.
* If the error is a CakeException it will be converted to either a 404 or a 500
* type error depending on the code used to construct the error.
* If the error is a CakeException it will be converted to either a 400 or a 500
* code error depending on the code used to construct the error.
*
* @param string $method Method producing the error
* @param array $messages Error messages
@ -228,7 +228,8 @@ class ErrorHandler {
*/
public function error500($error) {
$url = Router::normalize($this->controller->request->here);
$this->controller->response->statusCode($error->getCode());
$code = ($error->getCode() > 500) ? $error->getCode() : 500;
$this->controller->response->statusCode($code);
$this->controller->set(array(
'name' => __('An Internal Error Has Occurred'),
'message' => h($url),

View file

@ -341,6 +341,12 @@ class ErrorHandlerTest extends CakeTestCase {
function testUnknownExceptionTypeWithExceptionThatHasA400Code() {
$exception = new MissingWidgetThingException('coding fail.');
$ErrorHandler = new ErrorHandler($exception);
$ErrorHandler->controller->response = $this->getMock('CakeResponse', array('statusCode'));
$ErrorHandler->controller->response->expects($this->once())->method('statusCode')->with(404);
ob_start();
$ErrorHandler->render();
$results = ob_get_clean();
$this->assertFalse(method_exists($ErrorHandler, 'missingWidgetThing'), 'no method should exist.');
$this->assertEquals('error400', $ErrorHandler->method, 'incorrect method coercion.');
@ -354,6 +360,12 @@ class ErrorHandlerTest extends CakeTestCase {
function testUnknownExceptionTypeWithNoCodeIsA500() {
$exception = new OutOfBoundsException('foul ball.');
$ErrorHandler = new ErrorHandler($exception);
$ErrorHandler->controller->response = $this->getMock('CakeResponse', array('statusCode'));
$ErrorHandler->controller->response->expects($this->once())->method('statusCode')->with(500);
ob_start();
$ErrorHandler->render();
$results = ob_get_clean();
$this->assertEquals('error500', $ErrorHandler->method, 'incorrect method coercion.');
}