diff --git a/lib/RetailCrm/Methods/V5/Module.php b/lib/RetailCrm/Methods/V5/Module.php index 5322d08..6ca8893 100644 --- a/lib/RetailCrm/Methods/V5/Module.php +++ b/lib/RetailCrm/Methods/V5/Module.php @@ -73,4 +73,38 @@ trait Module ['integrationModule' => json_encode($configuration)] ); } + + /** + * Update scopes + * + * @param string $code + * @param array $requires + * + * @throws \RetailCrm\Exception\InvalidJsonException + * @throws \RetailCrm\Exception\CurlException + * @throws \InvalidArgumentException + * + * @return \RetailCrm\Response\ApiResponse + */ + public function integrationModulesUpdateScopes($code, array $requires) + { + if (empty($code)) { + throw new \InvalidArgumentException( + 'Parameter `code` must be set' + ); + } + + if (!count($requires) || empty($requires['scopes'])) { + throw new \InvalidArgumentException( + 'Parameter `requires` must contains a data & configuration `scopes` must be set' + ); + } + + /* @noinspection PhpUndefinedMethodInspection */ + return $this->client->makeRequest( + sprintf('/integration-modules/%s/update-scopes', $code), + "POST", + ['requires' => json_encode($requires)] + ); + } } diff --git a/tests/RetailCrm/Tests/Methods/Version5/ApiClientModuleTest.php b/tests/RetailCrm/Tests/Methods/Version5/ApiClientModuleTest.php new file mode 100644 index 0000000..5cd7a34 --- /dev/null +++ b/tests/RetailCrm/Tests/Methods/Version5/ApiClientModuleTest.php @@ -0,0 +1,60 @@ +getMockBuilder(\RetailCrm\Http\Client::class) + ->disableOriginalConstructor() + ->setMethods(['makeRequest']) + ->getMock(); + + $requires = [ + 'scopes' => [ + "integration_read", + "integration_write" + ], + ]; + + $stub->expects(self::once()) + ->method('makeRequest') + ->with( + sprintf('/integration-modules/%s/update-scopes', $integrationCode), + "POST", + ['requires' => json_encode($requires)] + ) + ->willReturn( + (new ApiResponse(200, json_encode(['success' => true, 'apiKey' => 'test key']))) + ->asJsonResponse() + ) + ; + $client = static::getMockedApiClient($stub); + + /** @var \RetailCrm\Response\ApiResponse $response */ + $response = $client->request->integrationModulesUpdateScopes($integrationCode, $requires); + + static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response); + static::assertEquals($response->getStatusCode(), 200); + static::assertTrue($response->isSuccessful()); + static::assertNotEmpty($response['apiKey']); + } +}