Skip to content

Commit

Permalink
add verbose messages when exceptions could affect assertions
Browse files Browse the repository at this point in the history
  • Loading branch information
steinkel committed Nov 28, 2018
1 parent 3a8e92a commit 0b6686d
Show file tree
Hide file tree
Showing 3 changed files with 246 additions and 38 deletions.
138 changes: 100 additions & 38 deletions src/TestSuite/IntegrationTestTrait.php
Expand Up @@ -606,11 +606,11 @@ protected function _handleError($exception)
protected function _buildRequest($url, $method, $data)
{
$sessionConfig = (array)Configure::read('Session') + [
'defaults' => 'php',
];
'defaults' => 'php',
];
$session = Session::create($sessionConfig);
$session->write($this->_session);
list ($url, $query) = $this->_url($url);
list($url, $query) = $this->_url($url);
$tokenUrl = $url;

if ($query) {
Expand Down Expand Up @@ -777,7 +777,8 @@ public function viewVariable($name)
*/
public function assertResponseOk($message = null)
{
$this->assertThat(null, new StatusOk($this->_response), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat(null, new StatusOk($this->_response), $verboseMessage);
}

/**
Expand All @@ -788,7 +789,8 @@ public function assertResponseOk($message = null)
*/
public function assertResponseSuccess($message = null)
{
$this->assertThat(null, new StatusSuccess($this->_response), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat(null, new StatusSuccess($this->_response), $verboseMessage);
}

/**
Expand Down Expand Up @@ -836,10 +838,11 @@ public function assertResponseCode($code, $message = null)
*/
public function assertRedirect($url = null, $message = '')
{
$this->assertThat(null, new HeaderSet($this->_response, 'Location'), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat(null, new HeaderSet($this->_response, 'Location'), $verboseMessage);

if ($url) {
$this->assertThat(Router::url($url, ['_full' => true]), new HeaderEquals($this->_response, 'Location'), $message);
$this->assertThat(Router::url($url, ['_full' => true]), new HeaderEquals($this->_response, 'Location'), $verboseMessage);
}
}

Expand All @@ -852,8 +855,9 @@ public function assertRedirect($url = null, $message = '')
*/
public function assertRedirectContains($url, $message = '')
{
$this->assertThat(null, new HeaderSet($this->_response, 'Location'), $message);
$this->assertThat($url, new HeaderContains($this->_response, 'Location'), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat(null, new HeaderSet($this->_response, 'Location'), $verboseMessage);
$this->assertThat($url, new HeaderContains($this->_response, 'Location'), $verboseMessage);
}

/**
Expand All @@ -865,8 +869,9 @@ public function assertRedirectContains($url, $message = '')
*/
public function assertRedirectNotContains($url, $message = '')
{
$this->assertThat(null, new HeaderSet($this->_response, 'Location'), $message);
$this->assertThat($url, new HeaderNotContains($this->_response, 'Location'), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat(null, new HeaderSet($this->_response, 'Location'), $verboseMessage);
$this->assertThat($url, new HeaderNotContains($this->_response, 'Location'), $verboseMessage);
}

/**
Expand All @@ -877,7 +882,8 @@ public function assertRedirectNotContains($url, $message = '')
*/
public function assertNoRedirect($message = '')
{
$this->assertThat(null, new HeaderNotSet($this->_response, 'Location'), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat(null, new HeaderNotSet($this->_response, 'Location'), $verboseMessage);
}

/**
Expand All @@ -890,8 +896,9 @@ public function assertNoRedirect($message = '')
*/
public function assertHeader($header, $content, $message = '')
{
$this->assertThat(null, new HeaderSet($this->_response, $header), $message);
$this->assertThat($content, new HeaderEquals($this->_response, $header), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat(null, new HeaderSet($this->_response, $header), $verboseMessage);
$this->assertThat($content, new HeaderEquals($this->_response, $header), $verboseMessage);
}

/**
Expand All @@ -904,8 +911,9 @@ public function assertHeader($header, $content, $message = '')
*/
public function assertHeaderContains($header, $content, $message = '')
{
$this->assertThat(null, new HeaderSet($this->_response, $header), $message);
$this->assertThat($content, new HeaderContains($this->_response, $header), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat(null, new HeaderSet($this->_response, $header), $verboseMessage);
$this->assertThat($content, new HeaderContains($this->_response, $header), $verboseMessage);
}

/**
Expand All @@ -918,8 +926,9 @@ public function assertHeaderContains($header, $content, $message = '')
*/
public function assertHeaderNotContains($header, $content, $message = '')
{
$this->assertThat(null, new HeaderSet($this->_response, $header), $message);
$this->assertThat($content, new HeaderNotContains($this->_response, $header), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat(null, new HeaderSet($this->_response, $header), $verboseMessage);
$this->assertThat($content, new HeaderNotContains($this->_response, $header), $verboseMessage);
}

/**
Expand All @@ -931,7 +940,8 @@ public function assertHeaderNotContains($header, $content, $message = '')
*/
public function assertContentType($type, $message = '')
{
$this->assertThat($type, new ContentType($this->_response), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat($type, new ContentType($this->_response), $verboseMessage);
}

/**
Expand All @@ -943,7 +953,8 @@ public function assertContentType($type, $message = '')
*/
public function assertResponseEquals($content, $message = '')
{
$this->assertThat($content, new BodyEquals($this->_response), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat($content, new BodyEquals($this->_response), $verboseMessage);
}

/**
Expand All @@ -955,7 +966,8 @@ public function assertResponseEquals($content, $message = '')
*/
public function assertResponseNotEquals($content, $message = '')
{
$this->assertThat($content, new BodyNotEquals($this->_response), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat($content, new BodyNotEquals($this->_response), $verboseMessage);
}

/**
Expand All @@ -968,7 +980,8 @@ public function assertResponseNotEquals($content, $message = '')
*/
public function assertResponseContains($content, $message = '', $ignoreCase = false)
{
$this->assertThat($content, new BodyContains($this->_response, $ignoreCase), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat($content, new BodyContains($this->_response, $ignoreCase), $verboseMessage);
}

/**
Expand All @@ -981,7 +994,8 @@ public function assertResponseContains($content, $message = '', $ignoreCase = fa
*/
public function assertResponseNotContains($content, $message = '', $ignoreCase = false)
{
$this->assertThat($content, new BodyNotContains($this->_response, $ignoreCase), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat($content, new BodyNotContains($this->_response, $ignoreCase), $verboseMessage);
}

/**
Expand All @@ -993,7 +1007,8 @@ public function assertResponseNotContains($content, $message = '', $ignoreCase =
*/
public function assertResponseRegExp($pattern, $message = '')
{
$this->assertThat($pattern, new BodyRegExp($this->_response), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat($pattern, new BodyRegExp($this->_response), $verboseMessage);
}

/**
Expand All @@ -1005,7 +1020,8 @@ public function assertResponseRegExp($pattern, $message = '')
*/
public function assertResponseNotRegExp($pattern, $message = '')
{
$this->assertThat($pattern, new BodyNotRegExp($this->_response), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat($pattern, new BodyNotRegExp($this->_response), $verboseMessage);
}

/**
Expand Down Expand Up @@ -1039,7 +1055,8 @@ public function assertResponseEmpty($message = '')
*/
public function assertTemplate($content, $message = '')
{
$this->assertThat($content, new TemplateFileEquals($this->_viewName), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat($content, new TemplateFileEquals($this->_viewName), $verboseMessage);
}

/**
Expand All @@ -1051,7 +1068,8 @@ public function assertTemplate($content, $message = '')
*/
public function assertLayout($content, $message = '')
{
$this->assertThat($content, new LayoutFileEquals($this->_layoutName), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat($content, new LayoutFileEquals($this->_layoutName), $verboseMessage);
}

/**
Expand All @@ -1064,7 +1082,8 @@ public function assertLayout($content, $message = '')
*/
public function assertSession($expected, $path, $message = '')
{
$this->assertThat($expected, new SessionEquals($this->_requestSession, $path), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat($expected, new SessionEquals($this->_requestSession, $path), $verboseMessage);
}

/**
Expand All @@ -1077,7 +1096,8 @@ public function assertSession($expected, $path, $message = '')
*/
public function assertFlashMessage($expected, $key = 'flash', $message = '')
{
$this->assertThat($expected, new FlashParamEquals($this->_requestSession, $key, 'message'), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat($expected, new FlashParamEquals($this->_requestSession, $key, 'message'), $verboseMessage);
}

/**
Expand All @@ -1091,7 +1111,8 @@ public function assertFlashMessage($expected, $key = 'flash', $message = '')
*/
public function assertFlashMessageAt($at, $expected, $key = 'flash', $message = '')
{
$this->assertThat($expected, new FlashParamEquals($this->_requestSession, $key, 'message', $at), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat($expected, new FlashParamEquals($this->_requestSession, $key, 'message', $at), $verboseMessage);
}

/**
Expand All @@ -1104,7 +1125,8 @@ public function assertFlashMessageAt($at, $expected, $key = 'flash', $message =
*/
public function assertFlashElement($expected, $key = 'flash', $message = '')
{
$this->assertThat($expected, new FlashParamEquals($this->_requestSession, $key, 'element'), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat($expected, new FlashParamEquals($this->_requestSession, $key, 'element'), $verboseMessage);
}

/**
Expand All @@ -1118,7 +1140,8 @@ public function assertFlashElement($expected, $key = 'flash', $message = '')
*/
public function assertFlashElementAt($at, $expected, $key = 'flash', $message = '')
{
$this->assertThat($expected, new FlashParamEquals($this->_requestSession, $key, 'element', $at), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat($expected, new FlashParamEquals($this->_requestSession, $key, 'element', $at), $verboseMessage);
}

/**
Expand All @@ -1131,8 +1154,9 @@ public function assertFlashElementAt($at, $expected, $key = 'flash', $message =
*/
public function assertCookie($expected, $name, $message = '')
{
$this->assertThat($name, new CookieSet($this->_response), $message);
$this->assertThat($expected, new CookieEquals($this->_response, $name), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat($name, new CookieSet($this->_response), $verboseMessage);
$this->assertThat($expected, new CookieEquals($this->_response, $name), $verboseMessage);
}

/**
Expand All @@ -1144,7 +1168,8 @@ public function assertCookie($expected, $name, $message = '')
*/
public function assertCookieNotSet($cookie, $message = '')
{
$this->assertThat($cookie, new CookieNotSet($this->_response), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat($cookie, new CookieNotSet($this->_response), $verboseMessage);
}

/**
Expand Down Expand Up @@ -1179,7 +1204,8 @@ public function disableErrorHandlerMiddleware()
*/
public function assertCookieEncrypted($expected, $name, $encrypt = 'aes', $key = null, $message = '')
{
$this->assertThat($name, new CookieSet($this->_response), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat($name, new CookieSet($this->_response), $verboseMessage);

$this->_cookieEncryptionKey = $key;
$this->assertThat($expected, new CookieEncryptedEquals($this->_response, $name, $encrypt, $this->_getCookieEncryptionKey()));
Expand All @@ -1194,7 +1220,43 @@ public function assertCookieEncrypted($expected, $name, $encrypt = 'aes', $key =
*/
public function assertFileResponse($expected, $message = '')
{
$this->assertThat(null, new FileSent($this->_response), $message);
$this->assertThat($expected, new FileSentAs($this->_response), $message);
$verboseMessage = $this->extractVerboseMessage($message);
$this->assertThat(null, new FileSent($this->_response), $verboseMessage);
$this->assertThat($expected, new FileSentAs($this->_response), $verboseMessage);
}

/**
* Inspect controller to extract possible causes of the failed assertion
*
* @param null $message
*/
protected function extractVerboseMessage($message = null)
{
if ($this->_exception instanceof \Exception) {
$message .= $this->extractExceptionMessage($this->_exception);
}
if ($this->_controller === null) {
return $message;
}
$error = Hash::get($this->_controller->viewVars, 'error');
if ($error instanceof \Exception) {
$message .= $this->extractExceptionMessage($this->viewVariable('error'));
}

return $message;
}

/**
* Extract verbose message for existing exception
*
* @param Exception $exception
* @return string
*/
protected function extractExceptionMessage(\Exception $exception)
{
return PHP_EOL .
sprintf('Possibly related to %s: "%s" ', get_class($exception), $exception->getMessage()) .
PHP_EOL .
$exception->getTraceAsString();
}
}

0 comments on commit 0b6686d

Please sign in to comment.