فهرست منبع

[Security] added some more tests

Johannes M. Schmitt 14 سال پیش
والد
کامیت
13665fc113

+ 1 - 1
src/Symfony/Bundle/SecurityBundle/Templating/Helper/SecurityHelper.php

@@ -18,7 +18,7 @@ use Symfony\Component\Security\Core\SecurityContextInterface;
 /**
  * SecurityHelper provides read-only access to the security context.
  *
- * @author Fabien Potencier <fabien.potencier@symfony-project.com>
+ * @author Fabien Potencier <fabien@symfony.com>
  */
 class SecurityHelper extends Helper
 {

+ 6 - 2
src/Symfony/Component/Security/Core/Authentication/Token/AbstractToken.php

@@ -84,11 +84,15 @@ abstract class AbstractToken implements TokenInterface
         if (null === $this->user) {
             $changed = false;
         } else if ($this->user instanceof UserInterface) {
-            $changed = $this->user->equals($user);
+            if (!$user instanceof UserInterface) {
+                $changed = true;
+            } else {
+                $changed = !$this->user->equals($user);
+            }
         } else if ($user instanceof UserInterface) {
             $changed = true;
         } else {
-            $changed = (string) $this->user === (string) $user;
+            $changed = (string) $this->user !== (string) $user;
         }
 
         if ($changed) {

+ 10 - 1
src/Symfony/Component/Security/Core/Authentication/Token/RememberMeToken.php

@@ -48,7 +48,16 @@ class RememberMeToken extends AbstractToken
         $this->persistentToken = $persistentToken;
 
         $this->setUser($user);
-        $this->setAuthenticated(true);
+        parent::setAuthenticated(true);
+    }
+
+    public function setAuthenticated($authenticated)
+    {
+        if ($authenticated) {
+            throw new \RuntimeException('You cannot set this token to authenticated after creation.');
+        }
+
+        parent::setAuthenticated(false);
     }
 
     public function getProviderKey()

+ 98 - 0
tests/Symfony/Tests/Component/Security/Core/Authentication/Token/AbstractTokenTest.php

@@ -131,6 +131,104 @@ class AbstractTokenTest extends \PHPUnit_Framework_TestCase
         }
     }
 
+    /**
+     * @dataProvider getUsers
+     */
+    public function testSetUser($user)
+    {
+        $token = $this->getToken();
+        $token->setUser($user);
+        $this->assertSame($user, $token->getUser());
+    }
+
+    public function getUsers()
+    {
+        $user = $this->getMock('Symfony\Component\Security\Core\User\UserInterface');
+        $user
+            ->expects($this->any())
+            ->method('equals')
+            ->will($this->returnValue(true))
+        ;
+
+        return array(
+            array($user),
+            array(new TestUser('foo')),
+            array('foo'),
+        );
+    }
+
+    /**
+     * @dataProvider getUserChanges
+     */
+    public function testSetUserSetsAuthenticatedToFalseWhenUserChanges($firstUser, $secondUser)
+    {
+        $token = $this->getToken();
+        $token->setAuthenticated(true);
+        $this->assertTrue($token->isAuthenticated());
+
+        $token->setUser($firstUser);
+        $this->assertTrue($token->isAuthenticated());
+
+        $token->setUser($secondUser);
+        $this->assertFalse($token->isAuthenticated());
+    }
+
+    public function getUserChanges()
+    {
+        $user = $this->getMock('Symfony\Component\Security\Core\User\UserInterface');
+        $user
+            ->expects($this->any())
+            ->method('equals')
+            ->will($this->returnValue(false))
+        ;
+
+        return array(
+            array(
+                'foo', 'bar',
+            ),
+            array(
+                'foo', new TestUser('bar'),
+            ),
+            array(
+                'foo', $user,
+            ),
+            array(
+                $user, $user,
+            ),
+            array(
+                $user, 'foo'
+            ),
+            array(
+                $user, new TestUser('foo'),
+            ),
+            array(
+                new TestUser('foo'), new TestUser('bar'),
+            ),
+            array(
+                new TestUser('foo'), 'bar',
+            ),
+            array(
+                new TestUser('foo'), $user,
+            ),
+        );
+    }
+
+    /**
+     * @dataProvider getUsers
+     */
+    public function testSetUserDoesNotSetAuthenticatedToFalseWhenUserDoesNotChange($user)
+    {
+        $token = $this->getToken();
+        $token->setAuthenticated(true);
+        $this->assertTrue($token->isAuthenticated());
+
+        $token->setUser($user);
+        $this->assertTrue($token->isAuthenticated());
+
+        $token->setUser($user);
+        $this->assertTrue($token->isAuthenticated());
+    }
+
     protected function getToken(array $roles = array())
     {
         return $this->getMockForAbstractClass('Symfony\Component\Security\Core\Authentication\Token\AbstractToken', array($roles));