Symfony2 Functional Authentication

I am trying to set up my functional tests and I am having problems getting authenticity. I read this guide: http://symfony.com/doc/current/cookbook/testing/http_authentication.html and implemented what they said, but I still focus on input redirection. I'm sure this is something trivial, but I'm not sure that.

Test controller

namespace HvH\ClientsBundle\Tests\Controller; use HvH\ClientsBundle\Controller\ClientsController; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\HeaderBag; use Symfony\Component\HttpFoundation\Session; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class ClientsControllerTest extends WebTestCase { public function testGetClientsAction() { $client = static::createClient(); $client->request( '/clients/123456', 'GET', array(), /* request params */ array(), /* files */ array('X-Requested-With' => "XMLHttpRequest", 'PHP_AUTH_USER' => 'testuser', 'PHP_AUTH_PW' => 'testpass') ); print_r($client->getResponse()); die(); } } 

congif_test.yml

 security: firewalls: secured_area: http_basic: 

Query result

 Symfony\Component\HttpFoundation\RedirectResponse Object ( [headers] => Symfony\Component\HttpFoundation\ResponseHeaderBag Object ( [computedCacheControl:protected] => Array ( [no-cache] => 1 ) [cookies:protected] => Array ( [] => Array ( [/] => Array ( [PHPSESSID] => Symfony\Component\HttpFoundation\Cookie Object ( [name:protected] => PHPSESSID [value:protected] => 7e3ece541918264de0003e2dcd251833 [domain:protected] => [expire:protected] => 1342616045 [path:protected] => / [secure:protected] => [httpOnly:protected] => ) ) ) ) [headers:protected] => Array ( [location] => Array ( [0] => http://localhost/login ) [cache-control] => Array ( [0] => no-cache ) [date] => Array ( [0] => Wed, 18 Jul 2012 00:54:05 GMT ) [content-type] => Array ( [0] => text/html ) [x-debug-token] => Array ( [0] => 5006092d43848 ) ) [cacheControl:protected] => Array ( ) ) [content:protected] => <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="refresh" content="1;url=http://localhost/login" /> <title>Redirecting to http://localhost/login</title> </head> <body> Redirecting to <a href="http://localhost/login">http://localhost/login</a>. </body> </html> [version:protected] => 1.0 [statusCode:protected] => 302 [statusText:protected] => Found [charset:protected] => UTF-8 ) 

Any suggestions on how to get around this?

+7
source share
2 answers

Or use:

 $crawler = $client->followRedirect(); 

or make the client always redirect:

 $client->followRedirects(); 

Associated document: http://symfony.com/doc/current/book/testing.html#redirecting

+8
source

You should be able to do the following:

1) "view" on the page

 $client = static::createClient(); $crawler = $client->request('GET', '/login'); 

2) Select a form via the submit button

 $buttonCrawlerNode = $crawler->selectButton('submit'); 

3) Pass the login credentials as data and submit the form

 $form = $buttonCrawlerNode->form(); $data = array('username' => ' u@u.com ','password' => 'pass'); $client->submit($form,$data); 

4) Follow the forwarding

 $crawler = $client->followRedirect(); 

5) At this point you can check the response code

 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 

or access a secure page

 $crawler = $client->request('GET', '/dashboard'); //do other stuff 
+8
source

All Articles