From 6ca35f7955d901c6b196c2dfdbacfc620d6fe656 Mon Sep 17 00:00:00 2001 From: Jordi Sala Morales Date: Sun, 5 Dec 2021 18:12:42 +0100 Subject: [PATCH 1/9] Update to Sonata 4, PHPStan 1 --- composer.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/composer.json b/composer.json index 026ac6432..fa2f34ba1 100644 --- a/composer.json +++ b/composer.json @@ -21,10 +21,10 @@ "homepage": "https://docs.sonata-project.org/projects/SonataUserBundle", "require": { "php": "^7.3 || ^8.0", - "doctrine/common": "^2.0 || ^3.1", - "doctrine/persistence": "^1.3 || ^2.1", + "doctrine/common": "^3.1", + "doctrine/persistence": "^2.1", "friendsofsymfony/user-bundle": "^2.0", - "sonata-project/admin-bundle": "^3.104", + "sonata-project/admin-bundle": "^4.0", "sonata-project/doctrine-extensions": "^1.10.1", "sonata-project/form-extensions": "^1.4", "sonata-project/twig-extensions": "^1.3.1", @@ -47,26 +47,26 @@ "dama/doctrine-test-bundle": "^6.7", "doctrine/annotations": "^1.10", "doctrine/doctrine-bundle": "^2.0", - "doctrine/orm": "^2.0", + "doctrine/orm": "^2.9", "egulias/email-validator": "^2.1.9", "matthiasnoback/symfony-config-test": "^4.2", "matthiasnoback/symfony-dependency-injection-test": "^4.0", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.84", - "phpstan/phpstan-phpunit": "^0.12.18", - "phpstan/phpstan-symfony": "^0.12.21", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-symfony": "^1.0", "phpunit/phpunit": "^9.5", "psalm/plugin-phpunit": "^0.16", - "psalm/plugin-symfony": "^2.0", + "psalm/plugin-symfony": "^3.0", "sonata-project/block-bundle": "^4.0", - "sonata-project/doctrine-orm-admin-bundle": "^3.18", + "sonata-project/doctrine-orm-admin-bundle": "^4.0", "symfony/browser-kit": "^4.4 || ^5.3", - "symfony/phpunit-bridge": "^5.3", + "symfony/phpunit-bridge": "^6.0", "vimeo/psalm": "^4.9.2" }, "conflict": { "sonata-project/block-bundle": "<4.0", - "sonata-project/doctrine-orm-admin-bundle": "<3.0" + "sonata-project/doctrine-orm-admin-bundle": "<4.0" }, "suggest": { "sonata-project/doctrine-orm-admin-bundle": "For persisting entities" From 33266792c741829245a2c41815838b2fa5165488 Mon Sep 17 00:00:00 2001 From: Jordi Sala Morales Date: Sun, 5 Dec 2021 21:00:10 +0100 Subject: [PATCH 2/9] Upgrade code to work with Sonata 4 --- src/Admin/Model/GroupAdmin.php | 11 ++-- src/Admin/Model/UserAdmin.php | 38 +++++--------- src/Resources/config/admin.xml | 4 +- src/Security/EditableRolesBuilder.php | 11 +++- .../RolesBuilder/AdminRolesBuilder.php | 10 +++- .../RolesBuilder/SecurityRolesBuilder.php | 14 ++--- tests/Action/CheckEmailActionTest.php | 5 +- tests/Action/LoginActionTest.php | 5 +- tests/Action/RequestActionTest.php | 5 +- tests/Action/ResetActionTest.php | 5 +- tests/Action/SendEmailActionTest.php | 5 +- tests/Security/EditableRolesBuilderTest.php | 39 ++++++++------ .../RolesBuilder/AdminRolesBuilderTest.php | 37 +++++--------- .../RolesBuilder/SecurityRolesBuilderTest.php | 51 ++++--------------- 14 files changed, 108 insertions(+), 132 deletions(-) diff --git a/src/Admin/Model/GroupAdmin.php b/src/Admin/Model/GroupAdmin.php index f1acec157..9e20ba134 100644 --- a/src/Admin/Model/GroupAdmin.php +++ b/src/Admin/Model/GroupAdmin.php @@ -21,17 +21,18 @@ class GroupAdmin extends AbstractAdmin { - protected $formOptions = [ - 'validation_groups' => 'Registration', - ]; - - public function getNewInstance() + protected function createNewInstance(): object { $class = $this->getClass(); return new $class('', []); } + protected function configureFormOptions(array &$formOptions): void + { + $formOptions['validation_groups'] = 'Registration'; + } + protected function configureListFields(ListMapper $list): void { $list diff --git a/src/Admin/Model/UserAdmin.php b/src/Admin/Model/UserAdmin.php index cf9896bbf..a63c71fcc 100644 --- a/src/Admin/Model/UserAdmin.php +++ b/src/Admin/Model/UserAdmin.php @@ -35,41 +35,31 @@ class UserAdmin extends AbstractAdmin */ protected $userManager; - public function getFormBuilder() + public function setUserManager(UserManagerInterface $userManager): void { - $this->formOptions['data_class'] = $this->getClass(); - - $options = $this->formOptions; - $options['validation_groups'] = ['Default', 'Profile']; - - if (!$this->getSubject() || null === $this->getSubject()->getId()) { - $options['validation_groups'] = ['Default', 'Registration']; - } - - $formBuilder = $this->getFormContractor()->getFormBuilder($this->getUniqid(), $options); - - $this->defineFormBuilder($formBuilder); + $this->userManager = $userManager; + } - return $formBuilder; + public function getUserManager(): UserManagerInterface + { + return $this->userManager; } - public function preUpdate($object): void + protected function preUpdate(object $object): void { $this->getUserManager()->updateCanonicalFields($object); $this->getUserManager()->updatePassword($object); } - public function setUserManager(UserManagerInterface $userManager): void + protected function configureFormOptions(array &$formOptions): void { - $this->userManager = $userManager; - } + $formOptions['validation_groups'] = ['Default']; - /** - * @return UserManagerInterface - */ - public function getUserManager() - { - return $this->userManager; + if (!$this->getSubject() || null === $this->getSubject()->getId()) { + $formOptions['validation_groups'][] = 'Registration'; + } else { + $formOptions['validation_groups'][] = 'Profile'; + } } protected function configureListFields(ListMapper $list): void diff --git a/src/Resources/config/admin.xml b/src/Resources/config/admin.xml index 280d92c53..56ece8a54 100644 --- a/src/Resources/config/admin.xml +++ b/src/Resources/config/admin.xml @@ -5,6 +5,7 @@ + %security.role_hierarchy.roles% @@ -22,11 +23,12 @@ + - + %security.role_hierarchy.roles% diff --git a/src/Security/EditableRolesBuilder.php b/src/Security/EditableRolesBuilder.php index 889713ae0..d9dfe5bbe 100644 --- a/src/Security/EditableRolesBuilder.php +++ b/src/Security/EditableRolesBuilder.php @@ -14,6 +14,7 @@ namespace Sonata\UserBundle\Security; use Sonata\AdminBundle\Admin\Pool; +use Sonata\AdminBundle\SonataConfiguration; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; use Symfony\Contracts\Translation\TranslatorInterface; @@ -45,11 +46,17 @@ class EditableRolesBuilder */ protected $rolesHierarchy; - public function __construct(TokenStorageInterface $tokenStorage, AuthorizationCheckerInterface $authorizationChecker, Pool $pool, array $rolesHierarchy = []) + /** + * @var SonataConfiguration + */ + private $configuration; + + public function __construct(TokenStorageInterface $tokenStorage, AuthorizationCheckerInterface $authorizationChecker, Pool $pool, SonataConfiguration $configuration, array $rolesHierarchy = []) { $this->tokenStorage = $tokenStorage; $this->authorizationChecker = $authorizationChecker; $this->pool = $pool; + $this->configuration = $configuration; $this->rolesHierarchy = $rolesHierarchy; } @@ -83,7 +90,7 @@ public function getRoles($domain = false, $expanded = true) }); $isMaster = $this->authorizationChecker->isGranted( - $this->pool->getOption('role_super_admin', 'ROLE_SUPER_ADMIN') + $this->configuration->getOption('role_super_admin', 'ROLE_SUPER_ADMIN') ); // get roles from the service container diff --git a/src/Security/RolesBuilder/AdminRolesBuilder.php b/src/Security/RolesBuilder/AdminRolesBuilder.php index 244997dd0..e6da987df 100644 --- a/src/Security/RolesBuilder/AdminRolesBuilder.php +++ b/src/Security/RolesBuilder/AdminRolesBuilder.php @@ -15,6 +15,7 @@ use Sonata\AdminBundle\Admin\AdminInterface; use Sonata\AdminBundle\Admin\Pool; +use Sonata\AdminBundle\SonataConfiguration; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; use Symfony\Contracts\Translation\TranslatorInterface; @@ -33,6 +34,11 @@ final class AdminRolesBuilder implements AdminRolesBuilderInterface */ private $pool; + /** + * @var SonataConfiguration + */ + private $configuration; + /** * @var TranslatorInterface */ @@ -46,10 +52,12 @@ final class AdminRolesBuilder implements AdminRolesBuilderInterface public function __construct( AuthorizationCheckerInterface $authorizationChecker, Pool $pool, + SonataConfiguration $configuration, TranslatorInterface $translator ) { $this->authorizationChecker = $authorizationChecker; $this->pool = $pool; + $this->configuration = $configuration; $this->translator = $translator; } @@ -104,7 +112,7 @@ public function getRoles(?string $domain = null): array private function isMaster(AdminInterface $admin): bool { return $admin->isGranted('MASTER') || $admin->isGranted('OPERATOR') - || $this->authorizationChecker->isGranted($this->pool->getOption('role_super_admin')); + || $this->authorizationChecker->isGranted($this->configuration->getOption('role_super_admin')); } private function translateRole(string $role, $domain): string diff --git a/src/Security/RolesBuilder/SecurityRolesBuilder.php b/src/Security/RolesBuilder/SecurityRolesBuilder.php index 81091a933..7b9f4972f 100644 --- a/src/Security/RolesBuilder/SecurityRolesBuilder.php +++ b/src/Security/RolesBuilder/SecurityRolesBuilder.php @@ -13,7 +13,7 @@ namespace Sonata\UserBundle\Security\RolesBuilder; -use Sonata\AdminBundle\Admin\Pool; +use Sonata\AdminBundle\SonataConfiguration; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; use Symfony\Contracts\Translation\TranslatorInterface; @@ -28,9 +28,9 @@ final class SecurityRolesBuilder implements ExpandableRolesBuilderInterface private $authorizationChecker; /** - * @var Pool + * @var SonataConfiguration */ - private $pool; + private $configuration; /** * @var TranslatorInterface @@ -44,12 +44,12 @@ final class SecurityRolesBuilder implements ExpandableRolesBuilderInterface public function __construct( AuthorizationCheckerInterface $authorizationChecker, - Pool $pool, + SonataConfiguration $configuration, TranslatorInterface $translator, array $rolesHierarchy = [] ) { $this->authorizationChecker = $authorizationChecker; - $this->pool = $pool; + $this->configuration = $configuration; $this->translator = $translator; $this->rolesHierarchy = $rolesHierarchy; } @@ -97,8 +97,8 @@ public function getRoles(?string $domain = null): array private function getHierarchy(): array { return array_merge([ - $this->pool->getOption('role_super_admin') => [], - $this->pool->getOption('role_admin') => [], + $this->configuration->getOption('role_super_admin') => [], + $this->configuration->getOption('role_admin') => [], ], $this->rolesHierarchy); } diff --git a/tests/Action/CheckEmailActionTest.php b/tests/Action/CheckEmailActionTest.php index aa0b994fb..95d08972f 100644 --- a/tests/Action/CheckEmailActionTest.php +++ b/tests/Action/CheckEmailActionTest.php @@ -18,6 +18,7 @@ use Sonata\AdminBundle\Admin\Pool; use Sonata\AdminBundle\Templating\TemplateRegistryInterface; use Sonata\UserBundle\Action\CheckEmailAction; +use Symfony\Component\DependencyInjection\Container; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; @@ -36,7 +37,7 @@ class CheckEmailActionTest extends TestCase protected $urlGenerator; /** - * @var Pool|MockObject + * @var Pool */ protected $pool; @@ -54,7 +55,7 @@ protected function setUp(): void { $this->templating = $this->createMock(Environment::class); $this->urlGenerator = $this->createMock(UrlGeneratorInterface::class); - $this->pool = $this->createMock(Pool::class); + $this->pool = new Pool(new Container()); $this->templateRegistry = $this->createMock(TemplateRegistryInterface::class); $this->resetTtl = 60; } diff --git a/tests/Action/LoginActionTest.php b/tests/Action/LoginActionTest.php index 62877f17e..a6537485c 100644 --- a/tests/Action/LoginActionTest.php +++ b/tests/Action/LoginActionTest.php @@ -19,6 +19,7 @@ use Sonata\AdminBundle\Templating\TemplateRegistryInterface; use Sonata\UserBundle\Action\LoginAction; use Sonata\UserBundle\Model\UserInterface; +use Symfony\Component\DependencyInjection\Container; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Session\Flash\FlashBag; @@ -51,7 +52,7 @@ class LoginActionTest extends TestCase protected $authorizationChecker; /** - * @var Pool|MockObject + * @var Pool */ protected $pool; @@ -85,7 +86,7 @@ protected function setUp(): void $this->templating = $this->createMock(Environment::class); $this->urlGenerator = $this->createMock(UrlGeneratorInterface::class); $this->authorizationChecker = $this->createMock(AuthorizationCheckerInterface::class); - $this->pool = $this->createMock(Pool::class); + $this->pool = new Pool(new Container()); $this->templateRegistry = $this->createMock(TemplateRegistryInterface::class); $this->tokenStorage = $this->createMock(TokenStorageInterface::class); $this->session = $this->createMock(Session::class); diff --git a/tests/Action/RequestActionTest.php b/tests/Action/RequestActionTest.php index 42e283606..e589aad1a 100644 --- a/tests/Action/RequestActionTest.php +++ b/tests/Action/RequestActionTest.php @@ -18,6 +18,7 @@ use Sonata\AdminBundle\Admin\Pool; use Sonata\AdminBundle\Templating\TemplateRegistryInterface; use Sonata\UserBundle\Action\RequestAction; +use Symfony\Component\DependencyInjection\Container; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; @@ -42,7 +43,7 @@ class RequestActionTest extends TestCase protected $authorizationChecker; /** - * @var Pool|MockObject + * @var Pool */ protected $pool; @@ -56,7 +57,7 @@ protected function setUp(): void $this->templating = $this->createMock(Environment::class); $this->urlGenerator = $this->createMock(UrlGeneratorInterface::class); $this->authorizationChecker = $this->createMock(AuthorizationCheckerInterface::class); - $this->pool = $this->createMock(Pool::class); + $this->pool = new Pool(new Container()); $this->templateRegistry = $this->createMock(TemplateRegistryInterface::class); } diff --git a/tests/Action/ResetActionTest.php b/tests/Action/ResetActionTest.php index 108cc9930..3d672736d 100644 --- a/tests/Action/ResetActionTest.php +++ b/tests/Action/ResetActionTest.php @@ -22,6 +22,7 @@ use Sonata\AdminBundle\Admin\Pool; use Sonata\AdminBundle\Templating\TemplateRegistryInterface; use Sonata\UserBundle\Action\ResetAction; +use Symfony\Component\DependencyInjection\Container; use Symfony\Component\Form\Form; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; @@ -52,7 +53,7 @@ class ResetActionTest extends TestCase protected $authorizationChecker; /** - * @var Pool|MockObject + * @var Pool */ protected $pool; @@ -101,7 +102,7 @@ protected function setUp(): void $this->templating = $this->createMock(Environment::class); $this->urlGenerator = $this->createMock(UrlGeneratorInterface::class); $this->authorizationChecker = $this->createMock(AuthorizationCheckerInterface::class); - $this->pool = $this->createMock(Pool::class); + $this->pool = new Pool(new Container()); $this->templateRegistry = $this->createMock(TemplateRegistryInterface::class); $this->formFactory = $this->createMock(FactoryInterface::class); $this->userManager = $this->createMock(UserManagerInterface::class); diff --git a/tests/Action/SendEmailActionTest.php b/tests/Action/SendEmailActionTest.php index f1c1cecd3..734850a6b 100644 --- a/tests/Action/SendEmailActionTest.php +++ b/tests/Action/SendEmailActionTest.php @@ -22,6 +22,7 @@ use Sonata\AdminBundle\Admin\Pool; use Sonata\AdminBundle\Templating\TemplateRegistryInterface; use Sonata\UserBundle\Action\SendEmailAction; +use Symfony\Component\DependencyInjection\Container; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; @@ -36,7 +37,7 @@ class SendEmailActionTest extends TestCase protected $urlGenerator; /** - * @var Pool|MockObject + * @var Pool */ protected $pool; @@ -89,7 +90,7 @@ protected function setUp(): void { $this->templating = $this->createMock(Environment::class); $this->urlGenerator = $this->createMock(UrlGeneratorInterface::class); - $this->pool = $this->createMock(Pool::class); + $this->pool = new Pool(new Container()); $this->templateRegistry = $this->createMock(TemplateRegistryInterface::class); $this->userManager = $this->createMock(UserManagerInterface::class); $this->mailer = $this->createMock(MailerInterface::class); diff --git a/tests/Security/EditableRolesBuilderTest.php b/tests/Security/EditableRolesBuilderTest.php index 40f9fe64d..a3015c8ad 100644 --- a/tests/Security/EditableRolesBuilderTest.php +++ b/tests/Security/EditableRolesBuilderTest.php @@ -17,7 +17,9 @@ use Sonata\AdminBundle\Admin\AdminInterface; use Sonata\AdminBundle\Admin\Pool; use Sonata\AdminBundle\Security\Handler\SecurityHandlerInterface; +use Sonata\AdminBundle\SonataConfiguration; use Sonata\UserBundle\Security\EditableRolesBuilder; +use Symfony\Component\DependencyInjection\Container; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; @@ -37,11 +39,12 @@ public function testRolesFromHierarchy(): void $authorizationChecker = $this->createMock(AuthorizationCheckerInterface::class); $authorizationChecker->method('isGranted')->willReturn(true); - $pool = $this->getMockBuilder(Pool::class) - ->disableOriginalConstructor() - ->getMock(); + $pool = new Pool(new Container()); - $pool->expects(static::exactly(2))->method('getAdminServiceIds')->willReturn([]); + $configuration = new SonataConfiguration('title', 'logo', [ + 'role_admin' => 'ROLE_ADMIN', + 'role_super_admin' => 'ROLE_SUPER_ADMIN', + ]); $rolesHierarchy = [ 'ROLE_ADMIN' => [ @@ -69,7 +72,7 @@ public function testRolesFromHierarchy(): void 'SONATA' => 'SONATA: ', ]; - $builder = new EditableRolesBuilder($tokenStorage, $authorizationChecker, $pool, $rolesHierarchy); + $builder = new EditableRolesBuilder($tokenStorage, $authorizationChecker, $pool, $configuration, $rolesHierarchy); $roles = $builder->getRoles(); $rolesReadOnly = $builder->getRolesReadOnly(); @@ -95,14 +98,17 @@ public function testRolesFromAdminWithMasterAdmin(): void $authorizationChecker = $this->createMock(AuthorizationCheckerInterface::class); $authorizationChecker->method('isGranted')->willReturn(true); - $pool = $this->getMockBuilder(Pool::class) - ->disableOriginalConstructor() - ->getMock(); + $container = new Container(); + $container->set('myadmin', $admin); - $pool->expects(static::exactly(2))->method('getInstance')->willReturn($admin); - $pool->expects(static::exactly(2))->method('getAdminServiceIds')->willReturn(['myadmin']); + $pool = new Pool($container, ['myadmin']); - $builder = new EditableRolesBuilder($tokenStorage, $authorizationChecker, $pool, []); + $configuration = new SonataConfiguration('title', 'logo', [ + 'role_admin' => 'ROLE_ADMIN', + 'role_super_admin' => 'ROLE_SUPER_ADMIN', + ]); + + $builder = new EditableRolesBuilder($tokenStorage, $authorizationChecker, $pool, $configuration, []); $expected = [ 'ROLE_FOO_GUEST' => 'ROLE_FOO_GUEST', @@ -125,11 +131,14 @@ public function testWithNoSecurityToken(): void $authorizationChecker = $this->createMock(AuthorizationCheckerInterface::class); $authorizationChecker->method('isGranted')->willReturn(false); - $pool = $this->getMockBuilder(Pool::class) - ->disableOriginalConstructor() - ->getMock(); + $pool = new Pool(new Container()); + + $configuration = new SonataConfiguration('title', 'logo', [ + 'role_admin' => 'ROLE_ADMIN', + 'role_super_admin' => 'ROLE_SUPER_ADMIN', + ]); - $builder = new EditableRolesBuilder($tokenStorage, $authorizationChecker, $pool, []); + $builder = new EditableRolesBuilder($tokenStorage, $authorizationChecker, $pool, $configuration, []); $roles = $builder->getRoles(); $rolesReadOnly = $builder->getRolesReadOnly(); diff --git a/tests/Security/RolesBuilder/AdminRolesBuilderTest.php b/tests/Security/RolesBuilder/AdminRolesBuilderTest.php index 0bcca8092..70932fa7b 100644 --- a/tests/Security/RolesBuilder/AdminRolesBuilderTest.php +++ b/tests/Security/RolesBuilder/AdminRolesBuilderTest.php @@ -17,9 +17,9 @@ use Sonata\AdminBundle\Admin\AdminInterface; use Sonata\AdminBundle\Admin\Pool; use Sonata\AdminBundle\Security\Handler\SecurityHandlerInterface; +use Sonata\AdminBundle\SonataConfiguration; use Sonata\UserBundle\Security\RolesBuilder\AdminRolesBuilder; -use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; -use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\DependencyInjection\Container; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; use Symfony\Contracts\Translation\TranslatorInterface; @@ -31,9 +31,8 @@ final class AdminRolesBuilderTest extends TestCase private $securityHandler; private $authorizationChecker; private $admin; - private $tokenStorage; - private $token; private $pool; + private $configuration; private $translator; private $securityInformation = [ @@ -48,9 +47,12 @@ protected function setUp(): void $this->securityHandler = $this->createMock(SecurityHandlerInterface::class); $this->authorizationChecker = $this->createMock(AuthorizationCheckerInterface::class); $this->admin = $this->createMock(AdminInterface::class); - $this->tokenStorage = $this->createMock(TokenStorageInterface::class); - $this->token = $this->createMock(TokenInterface::class); - $this->pool = $this->createMock(Pool::class); + + $container = new Container(); + $container->set('sonata.admin.bar', $this->admin); + + $this->pool = new Pool($container, ['sonata.admin.bar']); + $this->configuration = new SonataConfiguration('title', 'logo', []); $this->translator = $this->createMock(TranslatorInterface::class); } @@ -70,18 +72,10 @@ public function testGetPermissionLabels(): void $this->admin->method('getSecurityInformation') ->willReturn($this->securityInformation); - $this->pool->expects(static::once()) - ->method('getAdminServiceIds') - ->willReturn(['sonata.admin.bar']); - - $this->pool->expects(static::once()) - ->method('getInstance') - ->with('sonata.admin.bar') - ->willReturn($this->admin); - $rolesBuilder = new AdminRolesBuilder( $this->authorizationChecker, $this->pool, + $this->configuration, $this->translator ); @@ -115,18 +109,10 @@ public function testGetRoles(): void $this->admin->method('getLabel') ->willReturn('Foo'); - $this->pool->expects(static::once()) - ->method('getAdminServiceIds') - ->willReturn(['sonata.admin.bar']); - - $this->pool->expects(static::once()) - ->method('getInstance') - ->with('sonata.admin.bar') - ->willReturn($this->admin); - $rolesBuilder = new AdminRolesBuilder( $this->authorizationChecker, $this->pool, + $this->configuration, $this->translator ); @@ -169,6 +155,7 @@ public function testGetAddExcludeAdmins(): void $rolesBuilder = new AdminRolesBuilder( $this->authorizationChecker, $this->pool, + $this->configuration, $this->translator ); $rolesBuilder->addExcludeAdmin('sonata.admin.bar'); diff --git a/tests/Security/RolesBuilder/SecurityRolesBuilderTest.php b/tests/Security/RolesBuilder/SecurityRolesBuilderTest.php index 4b3bfe25c..790bb4024 100644 --- a/tests/Security/RolesBuilder/SecurityRolesBuilderTest.php +++ b/tests/Security/RolesBuilder/SecurityRolesBuilderTest.php @@ -14,8 +14,7 @@ namespace Sonata\UserBundle\Tests\Security\RolesBuilder; use PHPUnit\Framework\TestCase; -use Sonata\AdminBundle\Admin\AdminInterface; -use Sonata\AdminBundle\Admin\Pool; +use Sonata\AdminBundle\SonataConfiguration; use Sonata\UserBundle\Security\RolesBuilder\SecurityRolesBuilder; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; use Symfony\Contracts\Translation\TranslatorInterface; @@ -26,35 +25,25 @@ final class SecurityRolesBuilderTest extends TestCase { private $authorizationChecker; - private $admin; - private $pool; + private $configuration; private $translator; private $rolesHierarchy = ['ROLE_FOO' => ['ROLE_BAR', 'ROLE_ADMIN']]; protected function setUp(): void { $this->authorizationChecker = $this->createMock(AuthorizationCheckerInterface::class); - $this->admin = $this->createMock(AdminInterface::class); - $this->pool = $this->createMock(Pool::class); + $this->configuration = new SonataConfiguration('title', 'logo', [ + 'role_admin' => 'ROLE_SONATA_ADMIN', + 'role_super_admin' => 'ROLE_SUPER_ADMIN', + ]); $this->translator = $this->createMock(TranslatorInterface::class); } public function testGetRoles(): void { - $this->pool - ->method('getOption') - ->withConsecutive( - ['role_super_admin'], - ['role_admin'] - ) - ->willReturnOnConsecutiveCalls( - 'ROLE_SUPER_ADMIN', - 'ROLE_SONATA_ADMIN' - ); - $securityRolesBuilder = new SecurityRolesBuilder( $this->authorizationChecker, - $this->pool, + $this->configuration, $this->translator, $this->rolesHierarchy ); @@ -95,20 +84,9 @@ public function testGetRoles(): void public function testGetRolesNotExpanded(): void { - $this->pool - ->method('getOption') - ->withConsecutive( - ['role_super_admin'], - ['role_admin'] - ) - ->willReturnOnConsecutiveCalls( - 'ROLE_SUPER_ADMIN', - 'ROLE_SONATA_ADMIN' - ); - $securityRolesBuilder = new SecurityRolesBuilder( $this->authorizationChecker, - $this->pool, + $this->configuration, $this->translator, $this->rolesHierarchy ); @@ -149,22 +127,11 @@ public function testGetRolesNotExpanded(): void public function testGetRolesWithExistingRole(): void { - $this->pool - ->method('getOption') - ->withConsecutive( - ['role_super_admin'], - ['role_admin'] - ) - ->willReturnOnConsecutiveCalls( - 'ROLE_SUPER_ADMIN', - 'ROLE_SONATA_ADMIN' - ); - $this->rolesHierarchy['ROLE_STAFF'] = ['ROLE_SUPER_ADMIN', 'ROLE_SUPER_ADMIN']; $securityRolesBuilder = new SecurityRolesBuilder( $this->authorizationChecker, - $this->pool, + $this->configuration, $this->translator, $this->rolesHierarchy ); From 43b5d691e91ebca2885cd55d36f2a17bb19f78ca Mon Sep 17 00:00:00 2001 From: Jordi Sala Morales Date: Sun, 5 Dec 2021 21:07:50 +0100 Subject: [PATCH 3/9] Fix templates --- .../Admin/Security/Resetting/checkEmail.html.twig | 10 ++-------- .../views/Admin/Security/Resetting/request.html.twig | 10 ++-------- .../views/Admin/Security/Resetting/reset.html.twig | 10 ++-------- src/Resources/views/Admin/Security/login.html.twig | 10 ++-------- 4 files changed, 8 insertions(+), 32 deletions(-) diff --git a/src/Resources/views/Admin/Security/Resetting/checkEmail.html.twig b/src/Resources/views/Admin/Security/Resetting/checkEmail.html.twig index ea3b8dd05..cbf09049c 100644 --- a/src/Resources/views/Admin/Security/Resetting/checkEmail.html.twig +++ b/src/Resources/views/Admin/Security/Resetting/checkEmail.html.twig @@ -28,18 +28,12 @@ file that was distributed with this source code. {% block login_box_header %}