views:

39

answers:

1

Hello

A similar problem to mine is in this thread, but it doesn't use Zend_Session so is different from my issue.

I have successfully got PHPUnit working using Zend Framework's ControllerTestCase class. I can log in a user and write successful tests for that log in, so that is fine:

$this->request->setMethod('POST')->setPost(array('username' => $user, 'password' => $password));

I cannot figure out how to log out the user though. Even if I specifically try by doing:

$namespace = new Zend_Session_Namespace("Default");
$namespace->username = false;
$namespace->passsword = false;

This should log out the user, even dispatching the test to the logout URL does not work.

I have checked my code to make sure that a use POSTing new credentials is logged in and any existing Session data is overwritten by the new log in credentials. This does not log in a new user either when running the test.

  • Has anyone attempted this and succeeded?

  • How can I log out the user so that a new POST log ins another user?

Thanks.

+1  A: 

I'll assume you're using Zend_Auth for the authentication and if I understood you correctly (I haven't had my first coffee yet), you want to test that after a log out, a second user can log in.

AFAIK, Z_A doesn't use the default session namespace by default, but another one (I think it's even Zend_Auth). If you're logging out a user, all you need to do is to call the clearIdentity() method on the Zend_Auth object.

I personally never tested logging in/out functionality, but you can write a test case that first logs in a user, assert that he's logged in and/or that Zend_Auth has an identity, clear the identity, assert that Zend_Auth doesn't have an identity, log in the second user, assert again.

HTH :)

Edit: Here's a link to a test case for testing login stuff: http://zendframeworkstorefront.googlecode.com/svn/trunk/tests/application/controllers/customerControllerTest.php it's from Keith Pope's "Storefront" application.

robertbasic
This is what I needed. Took me a while to getting around to trying it, but using `clearIdentity()` worked perfectly.
jakenoble