123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- <?php
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Symfony\Bridge\Doctrine\Tests\Security\User;
- use Doctrine\ORM\Tools\SchemaTool;
- use PHPUnit\Framework\TestCase;
- use Symfony\Bridge\Doctrine\Security\User\EntityUserProvider;
- use Symfony\Bridge\Doctrine\Test\DoctrineTestHelper;
- use Symfony\Bridge\Doctrine\Tests\Fixtures\User;
- class EntityUserProviderTest extends TestCase
- {
- public function testRefreshUserGetsUserByPrimaryKey()
- {
- $em = DoctrineTestHelper::createTestEntityManager();
- $this->createSchema($em);
- $user1 = new User(1, 1, 'user1');
- $user2 = new User(1, 2, 'user2');
- $em->persist($user1);
- $em->persist($user2);
- $em->flush();
- $provider = new EntityUserProvider($this->getManager($em), 'Symfony\Bridge\Doctrine\Tests\Fixtures\User', 'name');
- // try to change the user identity
- $user1->name = 'user2';
- $this->assertSame($user1, $provider->refreshUser($user1));
- }
- public function testLoadUserByUsername()
- {
- $em = DoctrineTestHelper::createTestEntityManager();
- $this->createSchema($em);
- $user = new User(1, 1, 'user1');
- $em->persist($user);
- $em->flush();
- $provider = new EntityUserProvider($this->getManager($em), 'Symfony\Bridge\Doctrine\Tests\Fixtures\User', 'name');
- $this->assertSame($user, $provider->loadUserByUsername('user1'));
- }
- public function testLoadUserByUsernameWithUserLoaderRepositoryAndWithoutProperty()
- {
- $user = new User(1, 1, 'user1');
- $repository = $this->getMockBuilder('Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface')
- ->disableOriginalConstructor()
- ->getMock();
- $repository
- ->expects($this->once())
- ->method('loadUserByUsername')
- ->with('user1')
- ->willReturn($user);
- $em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
- ->disableOriginalConstructor()
- ->getMock();
- $em
- ->expects($this->once())
- ->method('getRepository')
- ->with('Symfony\Bridge\Doctrine\Tests\Fixtures\User')
- ->willReturn($repository);
- $provider = new EntityUserProvider($this->getManager($em), 'Symfony\Bridge\Doctrine\Tests\Fixtures\User');
- $this->assertSame($user, $provider->loadUserByUsername('user1'));
- }
- /**
- * @group legacy
- * @expectedDeprecation Implementing Symfony\Component\Security\Core\User\UserProviderInterface in a Doctrine repository when using the entity provider is deprecated since Symfony 2.8 and will not be supported in 3.0. Make the repository implement Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface instead.
- */
- public function testLoadUserByUsernameWithUserProviderRepositoryAndWithoutProperty()
- {
- $user = new User(1, 1, 'user1');
- $repository = $this->getMockBuilder('Symfony\Component\Security\Core\User\UserProviderInterface')
- ->disableOriginalConstructor()
- ->getMock();
- $repository
- ->expects($this->once())
- ->method('loadUserByUsername')
- ->with('user1')
- ->willReturn($user);
- $em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
- ->disableOriginalConstructor()
- ->getMock();
- $em
- ->expects($this->once())
- ->method('getRepository')
- ->with('Symfony\Bridge\Doctrine\Tests\Fixtures\User')
- ->willReturn($repository);
- $provider = new EntityUserProvider($this->getManager($em), 'Symfony\Bridge\Doctrine\Tests\Fixtures\User');
- $this->assertSame($user, $provider->loadUserByUsername('user1'));
- }
- /**
- * @expectedException \InvalidArgumentException
- * @expectedExceptionMessage You must either make the "Symfony\Bridge\Doctrine\Tests\Fixtures\User" entity Doctrine Repository ("Doctrine\ORM\EntityRepository") implement "Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface" or set the "property" option in the corresponding entity provider configuration.
- */
- public function testLoadUserByUsernameWithNonUserLoaderRepositoryAndWithoutProperty()
- {
- $em = DoctrineTestHelper::createTestEntityManager();
- $this->createSchema($em);
- $user = new User(1, 1, 'user1');
- $em->persist($user);
- $em->flush();
- $provider = new EntityUserProvider($this->getManager($em), 'Symfony\Bridge\Doctrine\Tests\Fixtures\User');
- $provider->loadUserByUsername('user1');
- }
- public function testRefreshUserRequiresId()
- {
- $em = DoctrineTestHelper::createTestEntityManager();
- $user1 = new User(null, null, 'user1');
- $provider = new EntityUserProvider($this->getManager($em), 'Symfony\Bridge\Doctrine\Tests\Fixtures\User', 'name');
- $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}(
- 'InvalidArgumentException',
- 'You cannot refresh a user from the EntityUserProvider that does not contain an identifier. The user object has to be serialized with its own identifier mapped by Doctrine'
- );
- $provider->refreshUser($user1);
- }
- public function testRefreshInvalidUser()
- {
- $em = DoctrineTestHelper::createTestEntityManager();
- $this->createSchema($em);
- $user1 = new User(1, 1, 'user1');
- $em->persist($user1);
- $em->flush();
- $provider = new EntityUserProvider($this->getManager($em), 'Symfony\Bridge\Doctrine\Tests\Fixtures\User', 'name');
- $user2 = new User(1, 2, 'user2');
- $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}(
- 'Symfony\Component\Security\Core\Exception\UsernameNotFoundException',
- 'User with id {"id1":1,"id2":2} not found'
- );
- $provider->refreshUser($user2);
- }
- public function testSupportProxy()
- {
- $em = DoctrineTestHelper::createTestEntityManager();
- $this->createSchema($em);
- $user1 = new User(1, 1, 'user1');
- $em->persist($user1);
- $em->flush();
- $em->clear();
- $provider = new EntityUserProvider($this->getManager($em), 'Symfony\Bridge\Doctrine\Tests\Fixtures\User', 'name');
- $user2 = $em->getReference('Symfony\Bridge\Doctrine\Tests\Fixtures\User', array('id1' => 1, 'id2' => 1));
- $this->assertTrue($provider->supportsClass(\get_class($user2)));
- }
- public function testLoadUserByUserNameShouldLoadUserWhenProperInterfaceProvided()
- {
- $repository = $this->getMockBuilder('\Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface')->getMock();
- $repository->expects($this->once())
- ->method('loadUserByUsername')
- ->with('name')
- ->willReturn(
- $this->getMockBuilder('\Symfony\Component\Security\Core\User\UserInterface')->getMock()
- );
- $provider = new EntityUserProvider(
- $this->getManager($this->getObjectManager($repository)),
- 'Symfony\Bridge\Doctrine\Tests\Fixtures\User'
- );
- $provider->loadUserByUsername('name');
- }
- /**
- * @expectedException \InvalidArgumentException
- */
- public function testLoadUserByUserNameShouldDeclineInvalidInterface()
- {
- $repository = $this->getMockBuilder('\Symfony\Component\Security\Core\User\AdvancedUserInterface')->getMock();
- $provider = new EntityUserProvider(
- $this->getManager($this->getObjectManager($repository)),
- 'Symfony\Bridge\Doctrine\Tests\Fixtures\User'
- );
- $provider->loadUserByUsername('name');
- }
- private function getManager($em, $name = null)
- {
- $manager = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
- $manager->expects($this->any())
- ->method('getManager')
- ->with($this->equalTo($name))
- ->will($this->returnValue($em));
- return $manager;
- }
- private function getObjectManager($repository)
- {
- $em = $this->getMockBuilder('\Doctrine\Common\Persistence\ObjectManager')
- ->setMethods(array('getClassMetadata', 'getRepository'))
- ->getMockForAbstractClass();
- $em->expects($this->any())
- ->method('getRepository')
- ->willReturn($repository);
- return $em;
- }
- private function createSchema($em)
- {
- $schemaTool = new SchemaTool($em);
- $schemaTool->createSchema(array(
- $em->getClassMetadata('Symfony\Bridge\Doctrine\Tests\Fixtures\User'),
- ));
- }
- }
|