subjectMock = $this->createMock(IntegrationService::class); $this->integrationAuthServiceMock = $this->createPartialMock( AuthorizationServiceInterface::class, ['removePermissions', 'grantAllPermissions', 'grantPermissions'] ); $this->aclRetrieverMock = $this->createPartialMock( AclRetriever::class, ['getAllowedResourcesByUser'] ); $this->integrationConfigMock = $this->getMockBuilder(IntegrationConfig::class) ->disableOriginalConstructor() ->onlyMethods(['getIntegrations']) ->getMock(); $this->consolidatedConfigMock = $this->getMockBuilder(ConsolidatedConfig::class) ->disableOriginalConstructor() ->getMock(); $objectManagerHelper = new ObjectManager($this); $this->integrationPlugin = $objectManagerHelper->getObject( \Magento\Integration\Model\Plugin\Integration::class, [ 'integrationAuthorizationService' => $this->integrationAuthServiceMock, 'aclRetriever' => $this->aclRetrieverMock, 'integrationConfig' => $this->integrationConfigMock, 'consolidatedConfig' => $this->consolidatedConfigMock ] ); } /** * @return void */ public function testAfterDelete(): void { $integrationId = 1; $integrationsData = [ Integration::ID => $integrationId, Integration::NAME => 'TestIntegration1', Integration::EMAIL => 'test-integration1@magento.com', Integration::ENDPOINT => 'http://endpoint.com', Integration::SETUP_TYPE => 1, ]; $this->integrationAuthServiceMock->expects($this->once()) ->method('removePermissions') ->with($integrationId); $this->integrationPlugin->afterDelete($this->subjectMock, $integrationsData); } /** * @return void */ public function testAfterCreateAllResources(): void { $integrationId = 1; $integrationModelMock = $this->getMockBuilder(Integration::class) ->disableOriginalConstructor() ->getMock(); $integrationModelMock->expects($this->exactly(2)) ->method('getId') ->willReturn($integrationId); $integrationModelMock->expects($this->once()) ->method('getData') ->with('all_resources') ->willReturn(1); $this->integrationAuthServiceMock->expects($this->once()) ->method('grantAllPermissions') ->with($integrationId); $this->integrationPlugin->afterCreate($this->subjectMock, $integrationModelMock); } /** * @return void */ public function testAfterCreateSomeResources(): void { $integrationId = 1; $integrationModelMock = $this->getMockBuilder(Integration::class) ->disableOriginalConstructor() ->getMock(); $integrationModelMock->expects($this->exactly(2)) ->method('getId') ->willReturn($integrationId); $integrationModelMock ->method('getData') ->withConsecutive(['all_resources'], ['resource'], ['resource']) ->willReturnOnConsecutiveCalls(null, ['testResource'], ['testResource']); $this->integrationAuthServiceMock->expects($this->once()) ->method('grantPermissions') ->with($integrationId, ['testResource']); $this->integrationPlugin->afterCreate($this->subjectMock, $integrationModelMock); } /** * @return void */ public function testAfterCreateNoResource(): void { $integrationId = 1; $integrationModelMock = $this->getMockBuilder(Integration::class) ->disableOriginalConstructor() ->getMock(); $integrationModelMock->expects($this->exactly(2)) ->method('getId') ->willReturn($integrationId); $integrationModelMock ->method('getData') ->withConsecutive(['all_resources'], ['resource']) ->willReturnOnConsecutiveCalls(null, null); $this->integrationAuthServiceMock->expects($this->once()) ->method('grantPermissions') ->with($integrationId, []); $this->integrationPlugin->afterCreate($this->subjectMock, $integrationModelMock); } /** * @return void */ public function testAfterUpdateAllResources(): void { $integrationId = 1; $integrationModelMock = $this->getMockBuilder(Integration::class) ->disableOriginalConstructor() ->getMock(); $integrationModelMock->expects($this->exactly(2)) ->method('getId') ->willReturn($integrationId); $integrationModelMock->expects($this->once()) ->method('getData') ->with('all_resources') ->willReturn(1); $this->integrationAuthServiceMock->expects($this->once()) ->method('grantAllPermissions') ->with($integrationId); $this->integrationPlugin->afterUpdate($this->subjectMock, $integrationModelMock); } /** * @return void */ public function testAfterGet(): void { $integrationId = 1; $integrationModelMock = $this->getMockBuilder(Integration::class) ->disableOriginalConstructor() ->onlyMethods(['getId', 'setData']) ->getMock(); $integrationModelMock->expects($this->exactly(2)) ->method('getId') ->willReturn($integrationId); $integrationModelMock->expects($this->once()) ->method('setData') ->with('resource', ['testResource']); $deprecatedIntegrationsData = [ Integration::ID => $integrationId, Integration::NAME => 'TestIntegration1', Integration::EMAIL => 'test-integration1@magento.com', Integration::ENDPOINT => 'http://endpoint.com', Integration::SETUP_TYPE => 1, 'resource' => ['testResource'] ]; $consolidatedIntegrationsData = [ Integration::ID => 2, Integration::NAME => 'TestIntegration2', Integration::EMAIL => 'test-integration2@magento.com', Integration::ENDPOINT => 'http://endpoint2.com', Integration::SETUP_TYPE => 1, 'resource' => ['testResource'] ]; $this->integrationConfigMock->method('getIntegrations')->willReturn($deprecatedIntegrationsData); $this->consolidatedConfigMock->method('getIntegrations')->willReturn($consolidatedIntegrationsData); $this->aclRetrieverMock->expects($this->once()) ->method('getAllowedResourcesByUser') ->with(UserContextInterface::USER_TYPE_INTEGRATION, $integrationId) ->willReturn(['testResource']); $this->integrationPlugin->afterGet($this->subjectMock, $integrationModelMock); } }