The workaround worked indeed, though left me with other problems, but that's another topic.
Opened the issue here: https://github.com/cakephp/cakephp/issues/4313 tiistai, 19. elokuuta 2014 11.02.54 UTC+3 José Lorenzo kirjoitti: > > 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.
