On symfony 1.0 & 1.1, redirection can be followed this way : $browser-> ... isRedirected()-> followRedirect()-> ...
Also, more info on functional tests refactoring here : http://www.symfony-project.org/blog/2008/09/19/call-the-expert-a-refactoring-story-part-2-5 Jérôme On 28 jan, 12:58, dantleech <[email protected]> wrote: > thanks Jerome > > I am doing something similar, though our project started life off with > sf1.0 so the login page doesnt use the form framework. > > ------ test browser > class emTestBrowser extends sfTestFunctional > { > public function loadData() > { > // load fixtures.. > } > public function loginOk() > { > $this -> post('/customer/login', array('email' => > '[email protected]', 'password' => 'wibble'); > $this -> isRedirected(); > > return $this; > } > > } > > -------- test > $browser = new emTestBrowser(new sfBrowser()); > $browser -> initialize(); > $browser -> loadData(); > $browser -> loginOk(); > > $browser-> > get('/someModule/index')-> > isStatusCode(200)-> > isRequestParameter('module', 'someModule')-> > isRequestParameter('action', 'index')-> > isRequestParameter('mailbox_id', 1)-> > checkResponseElement('body', 'Something')-> > end(); > > ---------------- > > The problem is that we do not get as far as the first assertion in > emTestBrowser::loginOk. The login code calls [->redirect] and that > throws an sfStopException which, err, stops everything. If I remove > the redirect from the login code then the tests proceed as expected. I > know I must be missing something here otherwise assertions such as [- > > >isRedirected] would be pretty pointless :) > > On 28 Jan, 09:34, Jérôme TEXIER <[email protected]> wrote: > > > Did you try to use the specific sfTesterUser to check the state of the > > your user : > > > with('user')->begin()-> > > isAuthenticated()-> > > end() > > > One good point dealing with signin/signout operations on functional > > test is to write a reusable class for those kind of test, something > > like : > > > class sfGuardTestFunctional extends sfTestFunctional { > > public function signinOk($user_data) > > { > > return $this-> > > info(sprintf('Connexion with login : "%s" and password "%s" > > should be ok OK.', $user_data['username'], $user_data['password']))-> > > get('/login')-> > > click('login',array('signin'=>$user_data))-> > > > with('form')->begin()-> > > hasErrors(false)-> > > end()-> > > > with('user')->begin()-> > > isCulture('en')-> > > isAuthenticated(true)-> > > end()-> > > > with('request')->begin()-> > > isParameter('module', 'sfGuardAuth')-> > > isParameter('action', 'signin')-> > > end()-> > > > isRedirected(); > > } > > //could add signout, signinError methods here > > ?> > > > So on your fonctional test, you can use the signin test : > > > $browser = new sfGuardTestFunctional(new sfBrowser()); //rather than > > $browser = new sfTestFunctional(new sfBrowser()) > > $browser->signinOk(array('username'=>'foo','password'=>'bar')); > > > Regards. > > > Jérôme > > > On 27 jan, 15:00, dantleech <[email protected]> wrote: > > > > cheers alecs > > > > though im not sure that your examples addresses my problem of > > > authenticating the user before function testing a page ... what I > > > meant by sfContext::getUser() was > > > > <?php > > > $user = sfContext::getInstance() -> getUser(); > > > $user -> login($user_object); > > > > On 27 Jan, 13:00, Lupu Alexandru-Emil <[email protected]> wrote: > > > > > On Tue, Jan 27, 2009 at 1:17 PM, dantleech <[email protected]> > > > > wrote: > > > > > > I am trying to write functional tests for an authenticated > > > > > application, but every time I authenticate the user it seems that the > > > > > users state is reset every time, > > > > > > i.e. the next [-> get] doesn't seem to recognize the fact that I > > > > > have previously authenticated the user and when running the test I > > > > > receive the login HTML rather than the page I want to test > > > > > > I have tried both authenticating the user using sfContext::getUser() > > > > > and logging in manually by using: > > > > > > $sf_test_functional -> post('/user_plugin_module/login', array('email' > > > > > => '[email protected]', 'password' => 'blah'); > > > > > > and the dev log seems to suggest that the user was indeed logged in, > > > > > but the subsequent request redirects to the login page anyway .. > > > > > > cheers > > > > > > dan > > > > > Hi! > > > > before you call "sfContext::getUser()" each time, you could try > > > > <?php > > > > > $my_test_user = sfContext::getUser(); > > > > $my_test_user->getFOO(); > > > > .... > > > > ?> > > > > Also you might wanna try : > > > > <?php > > > > $context = sfContext::getInstance(); > > > > $my_test_user = $context->getUser(); > > > > $my_test_user->getFOO(); > > > > .... > > > > ?> > > > > > Alecs --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "symfony users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/symfony-users?hl=en -~----------~----~----~----~------~----~------~--~---
