This looks like bug, could you please open a ticket in github describing
the problem?
As a workaround, before calling testAction(), do this:
$articles->Auth->session = new \Cake\Network\Session();
On Tuesday, August 19, 2014 9:26:29 AM UTC+2, Aki Foudila wrote:
>
> I am trying to make tests for the blog tutorial in the cookbook. Recently
> I've been stuck and trying to solve my problem with testing as authed users.
>
> Here is my test code:
>
> /**
> * Tests wheter you can edit article with unauthorized user.
> *
> * @return void
> */
> public function testEditUnauthorized()
> {
> // Mock the articles controller with Auth.
> $articles = $this->generate("Articles", ["components" => ["Auth"
> => ["user"]]]);
>
> // Set the user to be logged in as one from the fixture.
> $user = ["id" => 2, "username" => "Jack", "role" => "author"];
>
> // Make Auth's "user" method return the user specified.
> $articles->Auth
> ->expects($this->once())
> ->method("user")
> ->with(null)
> ->willReturn($user);
>
> // Test the action on edit function on someone elses article.
> $this->testAction("/articles/edit/1");
>
> // This shouldn't go to the article edit.
> $this->assertNotEquals("/articles/edit/1", $this->headers[
> "Location"]);
>
> // (Test not yet implemented fully).
> $this->markTestIncomplete('testEditUnauthorized not implemented.'
> );
> }
>
> So, the above test should try to edit someone else's article as 'Jack' who
> has role author, which should be denied. This is checked with
> assertNotEquals(). But running this test gives me error:
>
> *Fatal error: Call to a member function delete() on a non-object in
> C:\...\cakephp\src\Controller\Component\AuthComponent.php on line 660.*
> The code there, at the line 660 is underlined in the following:
>
> /**
> * Similar to AuthComponent::user() except if the session user cannot be
> found, connected authentication
> * objects will have their getUser() methods called. This lets stateless
> authentication methods function correctly.
> *
> * @return bool true if a user can be found, false if one cannot.
> */
> protected function _getUser() {
> $user = $this->user();
> if ($user) {
> *$this->session->delete('Auth.redirect');* // (Line 660)
> return true;
> }
>
> if (empty($this->_authenticateObjects)) {
> $this->constructAuthenticate();
> }
> foreach ($this->_authenticateObjects as $auth) {
> $result = $auth->getUser($this->request);
> if (!empty($result) && is_array($result)) {
> $this->_user = $result;
> return true;
> }
> }
>
> return false;
> }
>
> So, it has something to do with sessions not working. I run the PHPUnit
> also with --stderr flag, so that is not the case. I also tried adding
> "Session" to the components like this:
>
> $articles = $this->generate("Articles", ["components" => ["Auth" => [
> "user"], "Session"]]);
>
> but this didn't help either and I get the same error message. Any idea
> what might be causing this?
>
>
--
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP
---
You received this message because you are subscribed to the Google Groups
"CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.