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.

Reply via email to