[HttpKernel] removed Response assertions
They are too magic and they don't really add value: $this->assertResponseStatusCodeEmpty($client); $this->assertTrue($client->getResponse()->isEmpty()); $this->assertResponseStatusCodeNotFound($client); $this->assertTrue($client->getResponse()->isNotFound()); $this->assertResponseStatusCodeForbidden($client); $this->assertTrue($client->getResponse()->isForbidden()); $this->assertResponseStatusCodeOk($client); $this->assertTrue($client->getResponse()->isOk()); $this->assertResponseStatusCodeServerError($client); $this->assertTrue($client->getResponse()->isServerError()); $this->assertResponseStatusCodeClientError($client); $this->assertTrue($client->getResponse()->isClientError()); $this->assertResponseStatusCodeRedirection($client); $this->assertTrue($client->getResponse()->isRedirection()); $this->assertResponseStatusCodeSuccessful($client); $this->assertTrue($client->getResponse()->isSuccessful()); $this->assertResponseStatusCodeInformational($client); $this->assertTrue($client->getResponse()->isInformational()); $this->assertResponseStatusCode(200, $client); $this->assertEquals(200, $client->getResponse()->getStatusCode()); $this->assertResponseStatusCodeRedirect('google.com', $client); $this->assertTrue($client->getResponse()->isRedirected('google.com')); $this->assertResponseNotRegExp('/foo/', $client); $this->assertNotRegExp('/foo', $client->getResponse()->getContent()); $this->assertResponseRegExp('/foo/', $client); $this->assertRegExp('/foo', $client->getResponse()->getContent()); $this->assertResponseNotSelectExists('h1', $client); $this->assertTrue($crawler->filter('h1')->isEmpty()); $this->assertResponseSelectExists('h1', $client); $this->assertFalse($crawler->filter('h1')->isEmpty()); $this->assertResponseSelectCount(3, 'h1', $client); $this->assertEquals(3, $crawler->filter('h1')->count()); $this->assertResponseSelectEquals($expected, $selector, $arguments, $client); $this->assertEquals($expected, $crawler->filter($selector)->extract($arguments)); $this->assertResponseHeaderEquals($value, $key, $client); $this->assertTrue($client->getResponse()->headers->contains($key, $value)); $this->assertResponseNotHeaderEquals($value, $key, $client); $this->assertFalse($client->getResponse()->headers->contains($key, $value)); $this->assertResponseHeaderRegExp($regex, $key, $client); $this->assertRegExp($regex, $client->getResponse()->headers->get($key)); $this->assertResponseNotHeaderRegExp($regex, $key, $client); $this->assertNotRegExp($regex, $client->getResponse()->headers->get($key)); $this->assertResponseCookie($value, $attributes, $name, $client); $this->assertTrue($client->getResponse()->hasCookie($name));
This commit is contained in:
parent
7661e9a5f7
commit
da23747a1a
|
@ -97,6 +97,19 @@ class HeaderBag extends ParameterBag
|
|||
return array_key_exists(strtr(strtolower($key), '_', '-'), $this->parameters);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the given HTTP header contains the given value.
|
||||
*
|
||||
* @param string $key The HTTP header name
|
||||
* @param string $value The HTTP value
|
||||
*
|
||||
* @return Boolean true if the value is contained in the header, false otherwise
|
||||
*/
|
||||
public function contains($key, $value)
|
||||
{
|
||||
return in_array($value, explode(', ', $this->get($key, '')));
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a header.
|
||||
*
|
||||
|
|
|
@ -253,6 +253,30 @@ class Response
|
|||
return $this->cookies;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a cookies by name.
|
||||
*
|
||||
* @param string $name The cookie name
|
||||
*
|
||||
* @return array|false An array of cookie parameters, or false if the cookie does not exist
|
||||
*/
|
||||
public function getCookie($name)
|
||||
{
|
||||
return isset($this->cookies[$name]) ? $this->cookies[$name] : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the cookie is defined.
|
||||
*
|
||||
* @param string $name The cookie name
|
||||
*
|
||||
* @return Boolean true if the cookie is defined, false otherwise
|
||||
*/
|
||||
public function hasCookie($name)
|
||||
{
|
||||
return isset($this->cookies[$name]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets cookies.
|
||||
*
|
||||
|
@ -706,4 +730,9 @@ class Response
|
|||
{
|
||||
return in_array($this->statusCode, array(201, 204, 304));
|
||||
}
|
||||
|
||||
public function isRedirected($location)
|
||||
{
|
||||
return $this->isRedirect() && $location == $this->headers->get('Location');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,14 +23,9 @@ use Symfony\Components\HttpKernel\Client;
|
|||
*/
|
||||
abstract class WebTestCase extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
protected $currentClient;
|
||||
protected $cache;
|
||||
|
||||
/**
|
||||
* Creates a Client.
|
||||
*
|
||||
* This method must set the current client by calling the setCurrentClient() method.
|
||||
*
|
||||
* @param array $options An array of options to pass to the createKernel class
|
||||
* @param Boolean $debug The debug flag
|
||||
* @param array $server An array of server parameters
|
||||
|
@ -38,355 +33,4 @@ abstract class WebTestCase extends \PHPUnit_Framework_TestCase
|
|||
* @return Symfony\Foundation\Client A Client instance
|
||||
*/
|
||||
abstract public function createClient(array $options = array(), array $server = array());
|
||||
|
||||
/**
|
||||
* Asserts that the response matches a given CSS selector.
|
||||
*
|
||||
* @param array $expected The expected values for the attributes
|
||||
* @param string $selector A CSS selector
|
||||
* @param array $arguments An array of attributes to extract
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseSelectEquals($expected, $selector, $arguments, Client $client = null)
|
||||
{
|
||||
$this->assertEquals($expected, $this->getCrawler($client)->filter($selector)->extract($arguments));
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that the response matches a given CSS selector n times.
|
||||
*
|
||||
* @param integer $count The number of times the CSS selector must match
|
||||
* @param string $selector A CSS selector
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseSelectCount($count, $selector, Client $client = null)
|
||||
{
|
||||
$this->assertEquals($count, $this->getCrawler($client)->filter($selector)->count(), sprintf('response selector "%s" matches "%s" times', $selector, $count));
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that the response matches a given CSS selector.
|
||||
*
|
||||
* @param string $selector The CSS selector
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseSelectExists($selector, Client $client = null)
|
||||
{
|
||||
$this->assertTrue($this->getCrawler($client)->filter($selector)->count() > 0, sprintf('response selector "%s" exists', $selector));
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that the response does not match a given CSS selector.
|
||||
*
|
||||
* @param string $selector The CSS selector
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseNotSelectExists($selector, Client $client = null)
|
||||
{
|
||||
$this->assertTrue($this->getCrawler($client)->filter($selector)->count() == 0, sprintf('Response selector "%s" does not exist', $selector));
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts the a response header has the given value.
|
||||
*
|
||||
* @param string $value The header value
|
||||
* @param string $key The header name
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseHeaderEquals($value, $key, Client $client = null)
|
||||
{
|
||||
$headers = explode(', ', $this->getResponse($client)->headers->get($key));
|
||||
foreach ($headers as $header) {
|
||||
if ($header == $value) {
|
||||
return $this->pass(sprintf('Response header "%s" is "%s" (%s)', $key, $value, $this->getResponse($client)->headers->get($key)));
|
||||
}
|
||||
}
|
||||
|
||||
$this->fail(sprintf('Response header "%s" matches "%s" (%s)', $key, $value, $this->getResponse($client)->headers->get($key)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts the a response header has not the given value.
|
||||
*
|
||||
* @param string $value The header value
|
||||
* @param string $key The header name
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseNotHeaderEquals($value, $key, Client $client = null)
|
||||
{
|
||||
$headers = explode(', ', $this->getResponse($client)->headers->get($key));
|
||||
foreach ($headers as $header) {
|
||||
if ($header == $value) {
|
||||
return $this->fail(sprintf('Response header "%s" is not "%s" (%s)', $key, $value, $this->getResponse($client)->headers->get($key)));
|
||||
}
|
||||
}
|
||||
|
||||
$this->pass(sprintf('Response header "%s" does not match "%s" (%s)', $key, $value, $this->getResponse($client)->headers->get($key)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts the response header matches the given regexp.
|
||||
*
|
||||
* @param string $regex A regexp
|
||||
* @param string $key The header name
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseHeaderRegExp($regex, $key, Client $client = null)
|
||||
{
|
||||
$headers = explode(', ', $this->getResponse($client)->headers->get($key));
|
||||
foreach ($headers as $header) {
|
||||
if (preg_match($regex, $header)) {
|
||||
return $this->pass(sprintf('Response header "%s" matches "%s" (%s)', $key, $value, $this->getResponse($client)->headers->get($key)));
|
||||
}
|
||||
}
|
||||
|
||||
return $this->fail(sprintf('Response header "%s" matches "%s" (%s)', $key, $value, $this->getResponse($client)->headers->get($key)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts the response header does not match the given regexp.
|
||||
*
|
||||
* @param string $regex A regexp
|
||||
* @param string $key The header name
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseNotHeaderRegExp($regex, $key, Client $client = null)
|
||||
{
|
||||
$headers = explode(', ', $this->getResponse($client)->headers->get($key));
|
||||
foreach ($headers as $header) {
|
||||
if (!preg_match($regex, $header)) {
|
||||
return $this->pass(sprintf('Response header "%s" matches "%s" (%s)', $key, $value, $this->getResponse($client)->headers->get($key)));
|
||||
}
|
||||
}
|
||||
|
||||
return $this->fail(sprintf('Response header "%s" matches "%s" (%s)', $key, $value, $this->getResponse($client)->headers->get($key)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts if a cookie was set with the given value and attributes.
|
||||
*
|
||||
* @param string $value The cookie value
|
||||
* @param array $attributes Other cookie attributes to check (expires, path, domain, etc)
|
||||
* @param string $name The cookie name
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseCookie($value, $attributes = array(), $name, Client $client = null)
|
||||
{
|
||||
foreach ($this->getResponse($client)->getCookies() as $cookie) {
|
||||
if ($name == $cookie['name']) {
|
||||
if (null === $value) {
|
||||
$this->pass(sprintf('Response sets cookie "%s"', $name));
|
||||
} else {
|
||||
$this->assertTrue($value == $cookie['value'], sprintf('Response sets cookie "%s" to "%s"', $name, $value));
|
||||
}
|
||||
|
||||
foreach ($attributes as $attributeName => $attributeValue) {
|
||||
if (!array_key_exists($attributeName, $cookie)) {
|
||||
throw new \LogicException(sprintf('The cookie attribute "%s" is not valid.', $attributeName));
|
||||
}
|
||||
|
||||
$this->assertEquals($attributeValue, $cookie[$attributeName], sprintf('Attribute "%s" of cookie "%s" is "%s"', $attributeName, $name, $attributeValue));
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$this->fail(sprintf('response sets cookie "%s"', $name));
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that the response content matches a regexp.
|
||||
*
|
||||
* @param string The regexp
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseRegExp($regex, Client $client = null)
|
||||
{
|
||||
$this->assertRegExp($regex, $this->getResponse($client)->getContent(), sprintf('Response content matches regex "%s"', $regex));
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that the response content does not match a regexp.
|
||||
*
|
||||
* @param string The regexp
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseNotRegExp($regex, Client $client = null)
|
||||
{
|
||||
$this->assertNotRegExp($regex, $this->getResponse($client)->getContent(), sprintf('Response content does not match regex "%s"', substr($regex, 1)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts the response status code.
|
||||
*
|
||||
* @param string $statusCode Status code to check
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseStatusCode($statusCode, Client $client = null)
|
||||
{
|
||||
$this->assertEquals($statusCode, $this->getResponse($client)->getStatusCode(), sprintf('Status code is "%s"', $statusCode));
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that the response status code is informational.
|
||||
*
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseStatusCodeInformational(Client $client = null)
|
||||
{
|
||||
$this->assertTrue($this->getResponse($client)->getStatusCode() >= 100 && $this->getResponse($client)->getStatusCode() < 200, 'Status code is informational');
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that the response status code is successful.
|
||||
*
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseStatusCodeSuccessful(Client $client = null)
|
||||
{
|
||||
$this->assertTrue($this->getResponse($client)->getStatusCode() >= 200 && $this->getResponse($client)->getStatusCode() < 300, 'Status code is successful');
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that the response status code is a redirection.
|
||||
*
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseStatusCodeRedirection(Client $client = null)
|
||||
{
|
||||
$this->assertTrue($this->getResponse($client)->getStatusCode() >= 300 && $this->getResponse($client)->getStatusCode() < 400, 'Status code is successful');
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that the response status code is a client error.
|
||||
*
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseStatusCodeClientError(Client $client = null)
|
||||
{
|
||||
$this->assertTrue($this->getResponse($client)->getStatusCode() >= 400 && $this->getResponse($client)->getStatusCode() < 500, 'Status code is a client error');
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that the response status code is a server error.
|
||||
*
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseStatusCodeServerError(Client $client = null)
|
||||
{
|
||||
$this->assertTrue($this->getResponse($client)->getStatusCode() >= 500 && $this->getResponse($client)->getStatusCode() < 600, 'Status code is a server error');
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that the response status code is ok.
|
||||
*
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseStatusCodeOk(Client $client = null)
|
||||
{
|
||||
$this->assertEquals(200, $this->getResponse($client)->getStatusCode(), 'Status code is ok');
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that the response status code is forbidden.
|
||||
*
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseStatusCodeForbidden(Client $client = null)
|
||||
{
|
||||
$this->assertEquals(403, $this->getResponse($client)->getStatusCode(), 'Status code is forbidden');
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that the response status code is not found.
|
||||
*
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseStatusCodeNotFound(Client $client = null)
|
||||
{
|
||||
$this->assertEquals(404, $this->getResponse($client)->getStatusCode(), 'Status code is not found');
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that the response status code is a redirect.
|
||||
*
|
||||
* @param string $location The redirection location
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseStatusCodeRedirect($location = null, Client $client = null)
|
||||
{
|
||||
$this->assertTrue(in_array($this->getResponse($client)->getStatusCode(), array(301, 302, 303, 307)), 'Status code is a redirect');
|
||||
|
||||
if (null !== $location) {
|
||||
$this->assertEquals($location, $this->getResponse($client)->headers->get('Location'), sprintf('Page redirected to "%s"', $location));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that the response status code is empty.
|
||||
*
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*/
|
||||
public function assertResponseStatusCodeEmpty(Client $client = null)
|
||||
{
|
||||
$this->assertTrue(in_array($this->getResponse($client)->getStatusCode(), array(201, 204, 304)), 'Status code is empty');
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the current response associated with the client.
|
||||
*
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*
|
||||
* @return Symfony\Components\HttpKernel\Response A Response instance
|
||||
*/
|
||||
protected function getResponse(Client $client = null)
|
||||
{
|
||||
if (null === $client) {
|
||||
$client = $this->currentClient;
|
||||
}
|
||||
|
||||
return $client->getResponse();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the crawler associated with the client.
|
||||
*
|
||||
* @param Symfony\Foundation\Client $client A Client instance
|
||||
*
|
||||
* @return Symfony\Components\DomCrawler\Crawler A Crawler instance
|
||||
*/
|
||||
protected function getCrawler(Client $client = null)
|
||||
{
|
||||
if (!class_exists('Symfony\Components\DomCrawler\Crawler')) {
|
||||
// @codeCoverageIgnoreStart
|
||||
throw new \RuntimeException(sprintf('Unable to use %s() as the Symfony DomCrawler does not seem to be installed.', __METHOD__));
|
||||
// @codeCoverageIgnoreEnd
|
||||
}
|
||||
|
||||
if (null === $client) {
|
||||
$client = $this->currentClient;
|
||||
}
|
||||
|
||||
if (null === $this->cache) {
|
||||
$this->cache = new \SplObjectStorage();
|
||||
}
|
||||
|
||||
$response = $client->getResponse();
|
||||
if (isset($this->cache[$response])) {
|
||||
return $this->cache[$response];
|
||||
}
|
||||
|
||||
$crawler = new Crawler();
|
||||
$crawler->addContent($response->getContent(), $response->headers->get('Content-Type'));
|
||||
|
||||
$this->cache[$response] = $crawler;
|
||||
|
||||
return $crawler;
|
||||
}
|
||||
|
||||
protected function setCurrentClient(Client $client)
|
||||
{
|
||||
$this->currentClient = $client;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,8 +40,6 @@ abstract class WebTestCase extends BaseWebTestCase
|
|||
$client = $this->kernel->getContainer()->getTest_ClientService();
|
||||
$client->setServerParameters($server);
|
||||
|
||||
$this->setCurrentClient($client);
|
||||
|
||||
return $client;
|
||||
}
|
||||
|
||||
|
|
Reference in New Issue