123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Integration\Test\Unit\Model;
- use Magento\Authorization\Model\ResourceModel\Rules;
- use Magento\Authorization\Model\Role;
- use Magento\Authorization\Model\UserContextInterface;
- use Magento\Framework\Acl\RootResource;
- use Magento\Integration\Model\AuthorizationService;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class AuthorizationServiceTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * Sample role Id
- */
- const ROLE_ID = 1;
- /**
- * Sample integration id
- */
- const INTEGRATION_ID = 22;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject|Role
- */
- protected $roleMock;
- /**
- * @var AuthorizationService
- */
- protected $integrationAuthorizationService;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject|Rules
- */
- protected $rulesMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject|RootResource
- */
- protected $rootAclResourceMock;
- /**
- * @var array
- */
- protected $resources;
- protected function setUp()
- {
- $this->roleMock = $this->createPartialMock(
- \Magento\Authorization\Model\Role::class,
- ['load', 'delete', '__wakeup', 'getId', 'save']
- );
- $this->roleMock->expects($this->any())->method('load')->will($this->returnSelf());
- $this->roleMock->expects($this->any())->method('delete')->will($this->returnSelf());
- $this->roleMock->expects($this->any())->method('save')->will($this->returnSelf());
- /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Authorization\Model\RoleFactory $roleFactoryMock */
- $roleFactoryMock = $this->createPartialMock(\Magento\Authorization\Model\RoleFactory::class, ['create']);
- $roleFactoryMock->expects($this->any())->method('create')->will($this->returnValue($this->roleMock));
- $roleCollectionFactoryMock = $this->createPartialMock(
- \Magento\Authorization\Model\ResourceModel\Role\CollectionFactory::class,
- ['create']
- );
- $roleCollectionMock = $this->createPartialMock(
- \Magento\Authorization\Model\ResourceModel\Role\Collection::class,
- ['setUserFilter', 'getFirstItem']
- );
- $roleCollectionMock->expects($this->any())->method('setUserFilter')->will($this->returnSelf());
- $roleCollectionMock->expects($this->any())->method('getFirstItem')->will($this->returnValue($this->roleMock));
- $roleCollectionFactoryMock->expects($this->any())
- ->method('create')
- ->will($this->returnValue($roleCollectionMock));
- $rulesFactoryMock = $this->createPartialMock(\Magento\Authorization\Model\RulesFactory::class, ['create']);
- $this->rulesMock = $this->createPartialMock(
- \Magento\Authorization\Model\Rules::class,
- ['setRoleId', 'setResources', 'saveRel']
- );
- $rulesFactoryMock->expects($this->any())
- ->method('create')
- ->will($this->returnValue($this->rulesMock));
- $this->rootAclResourceMock = $this->createPartialMock(\Magento\Framework\Acl\RootResource::class, ['getId']);
- $this->integrationAuthorizationService = new AuthorizationService(
- $this->createMock(\Magento\Framework\Acl\Builder::class),
- $roleFactoryMock,
- $roleCollectionFactoryMock,
- $rulesFactoryMock,
- $this->createMock(\Magento\Authorization\Model\ResourceModel\Rules\CollectionFactory::class),
- $this->createMock(\Psr\Log\LoggerInterface::class),
- $this->rootAclResourceMock
- );
- }
- public function testRemovePermissions()
- {
- $roleName = UserContextInterface::USER_TYPE_INTEGRATION . self::INTEGRATION_ID;
- $this->roleMock->expects($this->once())->method('load')->with($roleName)->will($this->returnSelf());
- $this->integrationAuthorizationService->removePermissions(self::INTEGRATION_ID);
- }
- /**
- * @expectedException \Magento\Framework\Exception\LocalizedException
- * @expectedExceptionMessage Something went wrong while deleting roles and permissions.
- */
- public function testRemovePermissionsException()
- {
- $roleName = UserContextInterface::USER_TYPE_INTEGRATION . self::INTEGRATION_ID;
- $this->roleMock->expects($this->once())
- ->method('load')
- ->with($roleName)
- ->will($this->throwException(new \Exception()));
- $this->integrationAuthorizationService->removePermissions(self::INTEGRATION_ID);
- }
- public function testGrantPermissions()
- {
- $this->resources = [
- 'Magento_Sales::sales',
- 'Magento_Sales::sales_operations',
- 'Magento_Cart::cart',
- 'Magento_Cart::manage'
- ];
- $this->roleMock->expects($this->any())->method('getId')->will($this->returnValue(self::ROLE_ID));
- $this->rulesMock->expects($this->any())->method('setRoleId')->with(self::ROLE_ID)->will($this->returnSelf());
- $this->rulesMock->expects($this->any())
- ->method('setResources')
- ->with($this->resources)
- ->will($this->returnSelf());
- $this->rulesMock->expects($this->any())->method('saveRel')->will($this->returnSelf());
- $result = $this->integrationAuthorizationService->grantPermissions(self::INTEGRATION_ID, $this->resources);
- $this->assertNull($result);
- }
- public function testGrantPermissionsNoRole()
- {
- $calculatedRoleId = UserContextInterface::USER_TYPE_INTEGRATION . self::INTEGRATION_ID;
- $this->resources = [
- 'Magento_Sales::sales',
- 'Magento_Sales::sales_operations',
- 'Magento_Cart::cart',
- 'Magento_Cart::manage'
- ];
- //Return invalid role
- $this->roleMock->expects($this->any())
- ->method('getId')
- ->will($this->onConsecutiveCalls(null, $calculatedRoleId));
- // Verify if the method is called with the newly created role
- $this->rulesMock->expects($this->any())
- ->method('setRoleId')
- ->with($calculatedRoleId)
- ->will($this->returnSelf());
- $this->rulesMock->expects($this->any())
- ->method('setResources')
- ->with($this->resources)
- ->will($this->returnSelf());
- $this->rulesMock->expects($this->any())->method('saveRel')->will($this->returnSelf());
- $result = $this->integrationAuthorizationService->grantPermissions(self::INTEGRATION_ID, $this->resources);
- $this->assertNull($result);
- }
- /**
- * @expectedException \Magento\Framework\Exception\LocalizedException
- */
- public function testGrantPermissionsException()
- {
- $this->resources = [
- 'Magento_Sales::sales',
- 'Magento_Sales::sales_operations',
- 'Magento_Cart::cart',
- 'Magento_Cart::manage'
- ];
- $this->roleMock->expects($this->any())->method('getId')->will($this->returnValue(self::ROLE_ID));
- $this->rulesMock->expects($this->any())->method('setRoleId')->with(self::ROLE_ID)->will($this->returnSelf());
- $this->rulesMock->expects($this->any())
- ->method('setResources')
- ->with($this->resources)
- ->will($this->returnSelf());
- $this->rulesMock->expects($this->any())->method('saveRel')->will($this->throwException(new \Exception()));
- $this->integrationAuthorizationService->grantPermissions(self::INTEGRATION_ID, $this->resources);
- $this->expectExceptionMessage(
- 'An error occurred during the attempt to grant permissions. For details, see the exceptions log.'
- );
- }
- public function testGrantAllPermissions()
- {
- $rootResource = 'Magento_All:all';
- $this->rootAclResourceMock->expects($this->any())->method('getId')->will($this->returnValue($rootResource));
- $this->roleMock->expects($this->any())->method('getId')->will($this->returnValue(self::ROLE_ID));
- $this->rulesMock->expects($this->any())->method('setRoleId')->with(self::ROLE_ID)->will($this->returnSelf());
- $this->rulesMock->expects($this->any())
- ->method('setResources')
- ->with([$rootResource])
- ->will($this->returnSelf());
- $this->rulesMock->expects($this->any())->method('saveRel')->will($this->returnSelf());
- $result = $this->integrationAuthorizationService->grantAllPermissions(self::INTEGRATION_ID);
- $this->assertNull($result);
- }
- }
|