vendor/bundles/FOS/UserBundle/Tests/Model/UserManagerTest.php
changeset 3 e54dfe4d0b2b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/bundles/FOS/UserBundle/Tests/Model/UserManagerTest.php	Fri Sep 30 11:24:53 2011 +0200
@@ -0,0 +1,106 @@
+<?php
+
+/*
+ * This file is part of the FOSUserBundle package.
+ *
+ * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace FOS\UserBundle\Tests\Model;
+
+class UserManagerTest extends \PHPUnit_Framework_TestCase
+{
+    private $manager;
+    private $encoderFactory;
+    private $algorithm;
+    private $usernameCanonicalizer;
+    private $emailCanonicalizer;
+
+    protected function setUp()
+    {
+        $this->encoderFactory        = $this->getMockEncoderFactory();
+        $this->algorithm             = 'sha512';
+        $this->usernameCanonicalizer = $this->getMockCanonicalizer();
+        $this->emailCanonicalizer    = $this->getMockCanonicalizer();
+
+        $this->manager = $this->getUserManager(array(
+            $this->encoderFactory,
+            $this->algorithm,
+            $this->usernameCanonicalizer,
+            $this->emailCanonicalizer,
+        ));
+    }
+
+    public function testUpdateCanonicalFields()
+    {
+        $user = $this->getUser();
+        $user->setUsername('Username');
+        $user->setEmail('User@Example.com');
+
+        $this->usernameCanonicalizer->expects($this->once())
+            ->method('canonicalize')
+            ->with('Username')
+            ->will($this->returnCallback('strtolower'));
+
+        $this->emailCanonicalizer->expects($this->once())
+            ->method('canonicalize')
+            ->with('User@Example.com')
+            ->will($this->returnCallback('strtolower'));
+
+        $this->manager->updateCanonicalFields($user);
+        $this->assertEquals('username', $user->getUsernameCanonical());
+        $this->assertEquals('user@example.com', $user->getEmailCanonical());
+    }
+
+    public function testUpdatePassword()
+    {
+        $encoder = $this->getMockPasswordEncoder();
+        $user = $this->getUser();
+        $user->setPlainPassword('password');
+
+        $this->encoderFactory->expects($this->once())
+            ->method('getEncoder')
+            ->will($this->returnValue($encoder));
+
+        $encoder->expects($this->once())
+            ->method('encodePassword')
+            ->with('password', $user->getSalt())
+            ->will($this->returnValue('encodedPassword'));
+
+        $this->manager->updatePassword($user);
+        $this->assertEquals($this->algorithm, $user->getAlgorithm(), '->updatePassword() sets algorithm');
+        $this->assertEquals('encodedPassword', $user->getPassword(), '->updatePassword() sets encoded password');
+        $this->assertNull($user->getPlainPassword(), '->updatePassword() erases credentials');
+    }
+
+    private function getMockCanonicalizer()
+    {
+        return $this->getMock('FOS\UserBundle\Util\CanonicalizerInterface');
+    }
+
+    private function getMockEncoderFactory()
+    {
+        return $this->getMock('Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface');
+    }
+
+    private function getMockPasswordEncoder()
+    {
+        return $this->getMock('Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface');
+    }
+
+    private function getUser()
+    {
+        return $this->getMockBuilder('FOS\UserBundle\Model\User')
+            ->getMockForAbstractClass();
+    }
+
+    private function getUserManager(array $args)
+    {
+        return $this->getMockBuilder('FOS\UserBundle\Model\UserManager')
+            ->setConstructorArgs($args)
+            ->getMockForAbstractClass();
+    }
+}