1
0
mirror of synced 2024-11-21 21:06:07 +03:00

Merge pull request #81 from Neur0toxine/master

[fix] fileDownload and fileUpload method works properly now
This commit is contained in:
Alex Lushpai 2020-02-12 14:25:27 +03:00 committed by GitHub
commit 30dfcc7c68
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 93 additions and 22 deletions

2
.gitignore vendored
View File

@ -2,6 +2,8 @@
/bin /bin
composer.lock composer.lock
composer.phar composer.phar
coverage.xml
test-report.xml
phpunit.xml phpunit.xml
.idea .idea
.DS_Store .DS_Store

View File

@ -29,8 +29,13 @@ use RetailCrm\Http\Client;
*/ */
abstract class AbstractLoader abstract class AbstractLoader
{ {
/** @var string|null */
protected $siteCode; protected $siteCode;
/** @var \RetailCrm\Http\Client */
protected $client; protected $client;
/** @var string */
protected $crmUrl; protected $crmUrl;
/** /**

View File

@ -75,7 +75,7 @@ class Client
* *
* @return ApiResponse * @return ApiResponse
*/ */
public function makeRequest( public function makeRawRequest(
$path, $path,
$method, $method,
array $parameters = [], array $parameters = [],
@ -119,7 +119,7 @@ class Client
curl_setopt($curlHandler, CURLOPT_POST, true); curl_setopt($curlHandler, CURLOPT_POST, true);
if ('/files/upload' == $path) { if ('/files/upload' == $path) {
curl_setopt($curlHandler, CURLOPT_POSTFIELDS, $parameters['file']); curl_setopt($curlHandler, CURLOPT_POSTFIELDS, file_get_contents($parameters['file']));
} else { } else {
curl_setopt($curlHandler, CURLOPT_POSTFIELDS, $parameters); curl_setopt($curlHandler, CURLOPT_POSTFIELDS, $parameters);
} }
@ -143,4 +143,29 @@ class Client
return new ApiResponse($statusCode, $responseBody); return new ApiResponse($statusCode, $responseBody);
} }
/**
* Make HTTP request and deserialize JSON body (throws exception otherwise)
*
* @param string $path request url
* @param string $method (default: 'GET')
* @param array $parameters (default: array())
* @param bool $fullPath (default: false)
*
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*
* @throws \InvalidArgumentException
* @throws CurlException
* @throws InvalidJsonException
*
* @return ApiResponse
*/
public function makeRequest(
$path,
$method,
array $parameters = [],
$fullPath = false
) {
return $this->makeRawRequest($path, $method, $parameters, $fullPath)->asJsonResponse();
}
} }

View File

@ -150,7 +150,7 @@ trait Files
public function fileDownload($id) public function fileDownload($id)
{ {
/* @noinspection PhpUndefinedMethodInspection */ /* @noinspection PhpUndefinedMethodInspection */
return $this->client->makeRequest( return $this->client->makeRawRequest(
sprintf('/files/%s/download', $id), sprintf('/files/%s/download', $id),
"GET" "GET"
); );

View File

@ -51,9 +51,17 @@ class ApiResponse implements \ArrayAccess
{ {
$this->statusCode = (int) $statusCode; $this->statusCode = (int) $statusCode;
$this->rawResponse = $responseBody; $this->rawResponse = $responseBody;
}
if (!empty($responseBody)) { /**
$response = json_decode($responseBody, true); * Deserialize JSON from raw response body
*
* @return $this
*/
public function asJsonResponse()
{
if (!empty($this->rawResponse)) {
$response = json_decode($this->rawResponse, true);
if (!$response && JSON_ERROR_NONE !== ($error = json_last_error())) { if (!$response && JSON_ERROR_NONE !== ($error = json_last_error())) {
throw new InvalidJsonException( throw new InvalidJsonException(
@ -64,6 +72,8 @@ class ApiResponse implements \ArrayAccess
$this->response = $response; $this->response = $response;
} }
return $this;
} }
/** /**

View File

@ -93,6 +93,22 @@ class ClientTest extends TestCase
$response = $client->makeRequest('/orders', Client::METHOD_GET); $response = $client->makeRequest('/orders', Client::METHOD_GET);
static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response); static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response);
static::assertNotEmpty($response->getResponseBody());
static::assertNotEmpty($response->getResponse());
static::assertEquals(200, $response->getStatusCode());
}
/**
* @group client
*/
public function testRequestSuccessNoDeserialization()
{
$client = static::getClient();
$response = $client->makeRawRequest('/orders', Client::METHOD_GET);
static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response);
static::assertNotEmpty($response->getResponseBody());
static::assertEmpty($response->getResponse());
static::assertEquals(200, $response->getStatusCode()); static::assertEquals(200, $response->getStatusCode());
} }
} }

View File

@ -308,7 +308,7 @@ class ApiClientCustomersCorporateTest extends TestCase
{ {
$client = static::getApiClient(); $client = static::getApiClient();
$response = $client->request->customersCorporateAddresses($ids['externalId'], ['name' => 'name'], 1, 20); $response = $client->request->customersCorporateAddresses($ids['externalId'], ['name' => 'name'], 1, 20);
static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response); static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response);
static::assertTrue( static::assertTrue(
$response->isSuccessful(), $response->isSuccessful(),

View File

@ -40,7 +40,7 @@ class ApiResponseTest extends TestCase
'Response object created' 'Response object created'
); );
$response = new ApiResponse(201, '{ "success": true }'); $response = (new ApiResponse(201, '{ "success": true }'))->asJsonResponse();
static::assertInstanceOf( static::assertInstanceOf(
'RetailCrm\Response\ApiResponse', 'RetailCrm\Response\ApiResponse',
$response, $response,
@ -54,7 +54,20 @@ class ApiResponseTest extends TestCase
*/ */
public function testJsonInvalid() public function testJsonInvalid()
{ {
new ApiResponse(400, '{ "asdf": }'); (new ApiResponse(400, '{ "asdf": }'))->asJsonResponse();
}
/**
* @group response
*/
public function testJsonInvalidNoDeserialize()
{
$response = new ApiResponse(400, '{ "asdf": }');
static::assertInstanceOf(
'RetailCrm\Response\ApiResponse',
$response,
'Response object created'
);
} }
/** /**
@ -69,7 +82,7 @@ class ApiResponseTest extends TestCase
'Response object returns the right status code' 'Response object returns the right status code'
); );
$response = new ApiResponse(460, '{ "success": false }'); $response = (new ApiResponse(460, '{ "success": false }'))->asJsonResponse();
static::assertEquals( static::assertEquals(
460, 460,
$response->getStatusCode(), $response->getStatusCode(),
@ -88,7 +101,7 @@ class ApiResponseTest extends TestCase
'Request was successful' 'Request was successful'
); );
$response = new ApiResponse(460, '{ "success": false }'); $response = (new ApiResponse(460, '{ "success": false }'))->asJsonResponse();
static::assertFalse( static::assertFalse(
$response->isSuccessful(), $response->isSuccessful(),
'Request was failed' 'Request was failed'
@ -100,7 +113,7 @@ class ApiResponseTest extends TestCase
*/ */
public function testMagicCall() public function testMagicCall()
{ {
$response = new ApiResponse(201, '{ "success": true }'); $response = (new ApiResponse(201, '{ "success": true }'))->asJsonResponse();
static::assertEquals( static::assertEquals(
true, true,
$response->isSuccessful(), $response->isSuccessful(),
@ -125,7 +138,7 @@ class ApiResponseTest extends TestCase
*/ */
public function testMagicCallException2() public function testMagicCallException2()
{ {
$response = new ApiResponse(201, '{ "success": true }'); $response = (new ApiResponse(201, '{ "success": true }'))->asJsonResponse();
/* @noinspection PhpUndefinedMethodInspection */ /* @noinspection PhpUndefinedMethodInspection */
$response->getSomeSuccess(); $response->getSomeSuccess();
} }
@ -135,7 +148,7 @@ class ApiResponseTest extends TestCase
*/ */
public function testMagicGet() public function testMagicGet()
{ {
$response = new ApiResponse(201, '{ "success": true }'); $response = (new ApiResponse(201, '{ "success": true }'))->asJsonResponse();
static::assertEquals( static::assertEquals(
true, true,
$response->success, $response->success,
@ -160,7 +173,7 @@ class ApiResponseTest extends TestCase
*/ */
public function testMagicGetException2() public function testMagicGetException2()
{ {
$response = new ApiResponse(201, '{ "success": true }'); $response = (new ApiResponse(201, '{ "success": true }'))->asJsonResponse();
/* @noinspection PhpUndefinedFieldInspection */ /* @noinspection PhpUndefinedFieldInspection */
$response->someSuccess; $response->someSuccess;
} }
@ -170,7 +183,7 @@ class ApiResponseTest extends TestCase
*/ */
public function testArrayGet() public function testArrayGet()
{ {
$response = new ApiResponse(201, '{ "success": true }'); $response = (new ApiResponse(201, '{ "success": true }'))->asJsonResponse();
static::assertEquals( static::assertEquals(
true, true,
$response['success'], $response['success'],
@ -194,7 +207,7 @@ class ApiResponseTest extends TestCase
*/ */
public function testArrayGetException2() public function testArrayGetException2()
{ {
$response = new ApiResponse(201, '{ "success": true }'); $response = (new ApiResponse(201, '{ "success": true }'))->asJsonResponse();
$response['someSuccess']; $response['someSuccess'];
} }
@ -203,7 +216,7 @@ class ApiResponseTest extends TestCase
*/ */
public function testArrayIsset() public function testArrayIsset()
{ {
$response = new ApiResponse(201, '{ "success": true }'); $response = (new ApiResponse(201, '{ "success": true }'))->asJsonResponse();
static::assertTrue( static::assertTrue(
isset($response['success']), isset($response['success']),
@ -222,7 +235,7 @@ class ApiResponseTest extends TestCase
*/ */
public function testArraySetException1() public function testArraySetException1()
{ {
$response = new ApiResponse(201, '{ "success": true }'); $response = (new ApiResponse(201, '{ "success": true }'))->asJsonResponse();
$response['success'] = 'a'; $response['success'] = 'a';
} }
@ -232,7 +245,7 @@ class ApiResponseTest extends TestCase
*/ */
public function testArraySetException2() public function testArraySetException2()
{ {
$response = new ApiResponse(201, '{ "success": true }'); $response = (new ApiResponse(201, '{ "success": true }'))->asJsonResponse();
$response['sssssssuccess'] = 'a'; $response['sssssssuccess'] = 'a';
} }
@ -242,7 +255,7 @@ class ApiResponseTest extends TestCase
*/ */
public function testArrayUnsetException1() public function testArrayUnsetException1()
{ {
$response = new ApiResponse(201, '{ "success": true }'); $response = (new ApiResponse(201, '{ "success": true }'))->asJsonResponse();
unset($response['success']); unset($response['success']);
} }
@ -252,7 +265,7 @@ class ApiResponseTest extends TestCase
*/ */
public function testArrayUnsetException2() public function testArrayUnsetException2()
{ {
$response = new ApiResponse(201, '{ "success": true }'); $response = (new ApiResponse(201, '{ "success": true }'))->asJsonResponse();
unset($response['sssssssuccess']); unset($response['sssssssuccess']);
} }
@ -261,7 +274,7 @@ class ApiResponseTest extends TestCase
*/ */
public function testMagicIsset() public function testMagicIsset()
{ {
$response = new ApiResponse(201, '{ "success": true }'); $response = (new ApiResponse(201, '{ "success": true }'))->asJsonResponse();
static::assertTrue( static::assertTrue(
isset($response->success), isset($response->success),