add ordersLoyaltyApply method (#169)
This commit is contained in:
parent
2efa527817
commit
140e48e6e9
4
.gitignore
vendored
4
.gitignore
vendored
@ -15,4 +15,6 @@ phpunit.xml
|
|||||||
.docker
|
.docker
|
||||||
docker-compose*.yml
|
docker-compose*.yml
|
||||||
.php_cs*
|
.php_cs*
|
||||||
.phpunit*
|
.phpunit*
|
||||||
|
.env*
|
||||||
|
!*.dist
|
@ -15,7 +15,8 @@
|
|||||||
"php": ">=5.4.0",
|
"php": ">=5.4.0",
|
||||||
"ext-curl": "*",
|
"ext-curl": "*",
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"ext-fileinfo": "*"
|
"ext-fileinfo": "*",
|
||||||
|
"symfony/dotenv": "3.4.*"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "6.*",
|
"phpunit/phpunit": "6.*",
|
||||||
|
@ -150,4 +150,51 @@ trait Orders
|
|||||||
"POST"
|
"POST"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Application of loyalty program bonuses
|
||||||
|
*
|
||||||
|
* @param array $payment order data
|
||||||
|
* @param float $bonuses bonuses count
|
||||||
|
* @param null $site site code
|
||||||
|
*
|
||||||
|
* @throws \InvalidArgumentException
|
||||||
|
* @throws \RetailCrm\Exception\CurlException
|
||||||
|
* @throws \RetailCrm\Exception\InvalidJsonException
|
||||||
|
*
|
||||||
|
* @return \RetailCrm\Response\ApiResponse
|
||||||
|
*/
|
||||||
|
public function ordersLoyaltyApply(array $order, float $bonuses, $site = null)
|
||||||
|
{
|
||||||
|
if (!count($order)) {
|
||||||
|
throw new \InvalidArgumentException(
|
||||||
|
'Parameter `order` must contains a data'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($order['id']) && empty($order['externalId'])) {
|
||||||
|
throw new \InvalidArgumentException(
|
||||||
|
'Parameter `order` must contain an identifier: `id` or `externalId`'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($bonuses)) {
|
||||||
|
throw new \InvalidArgumentException(
|
||||||
|
'Specify a different amount of bonuses'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @noinspection PhpUndefinedMethodInspection */
|
||||||
|
return $this->client->makeRequest(
|
||||||
|
'/orders/loyalty/apply',
|
||||||
|
"POST",
|
||||||
|
$this->fillSite(
|
||||||
|
$site,
|
||||||
|
[
|
||||||
|
'order' => json_encode($order),
|
||||||
|
'bonuses' => $bonuses,
|
||||||
|
]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
5
tests/.env.dist
Normal file
5
tests/.env.dist
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
RETAILCRM_URL=
|
||||||
|
RETAILCRM_KEY=
|
||||||
|
RETAILCRM_VERSION=
|
||||||
|
RETAILCRM_SITE=
|
||||||
|
RETAILCRM_USER=
|
@ -39,7 +39,7 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
|
|
||||||
$externalId = 'c-create-' . time();
|
$externalId = 'c-create-' . time();
|
||||||
|
|
||||||
$response = $client->customersCreate(array(
|
$response = $client->request->customersCreate(array(
|
||||||
'firstName' => self::FIRST_NAME,
|
'firstName' => self::FIRST_NAME,
|
||||||
'externalId' => $externalId,
|
'externalId' => $externalId,
|
||||||
));
|
));
|
||||||
@ -61,7 +61,7 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
public function testCreateExceptionEmpty()
|
public function testCreateExceptionEmpty()
|
||||||
{
|
{
|
||||||
$client = static::getApiClient();
|
$client = static::getApiClient();
|
||||||
$client->customersCreate(array());
|
$client->request->customersCreate(array());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -76,19 +76,19 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
{
|
{
|
||||||
$client = static::getApiClient();
|
$client = static::getApiClient();
|
||||||
|
|
||||||
$response = $client->customersGet(678678678);
|
$response = $client->request->customersGet(678678678);
|
||||||
static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response);
|
static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response);
|
||||||
static::assertEquals(404, $response->getStatusCode());
|
static::assertEquals(404, $response->getStatusCode());
|
||||||
static::assertFalse($response->isSuccessful());
|
static::assertFalse($response->isSuccessful());
|
||||||
|
|
||||||
$response = $client->customersGet($ids['id'], 'id');
|
$response = $client->request->customersGet($ids['id'], 'id');
|
||||||
$customerById = $response['customer'];
|
$customerById = $response['customer'];
|
||||||
static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response);
|
static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response);
|
||||||
static::assertEquals(200, $response->getStatusCode());
|
static::assertEquals(200, $response->getStatusCode());
|
||||||
static::assertTrue($response->isSuccessful());
|
static::assertTrue($response->isSuccessful());
|
||||||
static::assertEquals(self::FIRST_NAME, $response['customer']['firstName']);
|
static::assertEquals(self::FIRST_NAME, $response['customer']['firstName']);
|
||||||
|
|
||||||
$response = $client->customersGet($ids['externalId'], 'externalId');
|
$response = $client->request->customersGet($ids['externalId'], 'externalId');
|
||||||
static::assertEquals($customerById['id'], $response['customer']['id']);
|
static::assertEquals($customerById['id'], $response['customer']['id']);
|
||||||
|
|
||||||
return $ids;
|
return $ids;
|
||||||
@ -101,7 +101,7 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
public function testCustomersGetException()
|
public function testCustomersGetException()
|
||||||
{
|
{
|
||||||
$client = static::getApiClient();
|
$client = static::getApiClient();
|
||||||
$client->customersGet(678678678, 'asdf');
|
$client->request->customersGet(678678678, 'asdf');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -114,7 +114,7 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
{
|
{
|
||||||
$client = static::getApiClient();
|
$client = static::getApiClient();
|
||||||
|
|
||||||
$response = $client->customersEdit(
|
$response = $client->request->customersEdit(
|
||||||
array(
|
array(
|
||||||
'id' => 22342134,
|
'id' => 22342134,
|
||||||
'lastName' => '12345',
|
'lastName' => '12345',
|
||||||
@ -124,7 +124,7 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response);
|
static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response);
|
||||||
static::assertEquals(404, $response->getStatusCode());
|
static::assertEquals(404, $response->getStatusCode());
|
||||||
|
|
||||||
$response = $client->customersEdit(array(
|
$response = $client->request->customersEdit(array(
|
||||||
'externalId' => $ids['externalId'],
|
'externalId' => $ids['externalId'],
|
||||||
'lastName' => '12345',
|
'lastName' => '12345',
|
||||||
));
|
));
|
||||||
@ -140,7 +140,7 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
public function testCustomersEditExceptionEmpty()
|
public function testCustomersEditExceptionEmpty()
|
||||||
{
|
{
|
||||||
$client = static::getApiClient();
|
$client = static::getApiClient();
|
||||||
$client->customersEdit(array(), 'asdf');
|
$client->request->customersEdit(array(), 'asdf');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -150,7 +150,7 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
public function testCustomersEditException()
|
public function testCustomersEditException()
|
||||||
{
|
{
|
||||||
$client = static::getApiClient();
|
$client = static::getApiClient();
|
||||||
$client->customersEdit(array('id' => 678678678), 'asdf');
|
$client->request->customersEdit(array('id' => 678678678), 'asdf');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -160,19 +160,19 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
{
|
{
|
||||||
$client = static::getApiClient();
|
$client = static::getApiClient();
|
||||||
|
|
||||||
$response = $client->customersList();
|
$response = $client->request->customersList();
|
||||||
static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response);
|
static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response);
|
||||||
static::assertTrue($response->isSuccessful());
|
static::assertTrue($response->isSuccessful());
|
||||||
static::assertTrue(isset($response['customers']));
|
static::assertTrue(isset($response['customers']));
|
||||||
|
|
||||||
$response = $client->customersList(array(), 1, 300);
|
$response = $client->request->customersList(array(), 1, 300);
|
||||||
static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response);
|
static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response);
|
||||||
static::assertFalse(
|
static::assertFalse(
|
||||||
$response->isSuccessful(),
|
$response->isSuccessful(),
|
||||||
'Pagination error'
|
'Pagination error'
|
||||||
);
|
);
|
||||||
|
|
||||||
$response = $client->customersList(array('maxOrdersCount' => 10), 1);
|
$response = $client->request->customersList(array('maxOrdersCount' => 10), 1);
|
||||||
static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response);
|
static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response);
|
||||||
static::assertTrue(
|
static::assertTrue(
|
||||||
$response->isSuccessful(),
|
$response->isSuccessful(),
|
||||||
@ -187,7 +187,7 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
public function testCustomersFixExternalIdsException()
|
public function testCustomersFixExternalIdsException()
|
||||||
{
|
{
|
||||||
$client = static::getApiClient();
|
$client = static::getApiClient();
|
||||||
$client->customersFixExternalIds(array());
|
$client->request->customersFixExternalIds(array());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -197,7 +197,7 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
{
|
{
|
||||||
$client = static::getApiClient();
|
$client = static::getApiClient();
|
||||||
|
|
||||||
$response = $client->ordersCreate(array(
|
$response = $client->request->ordersCreate(array(
|
||||||
'firstName' => 'Aaa111',
|
'firstName' => 'Aaa111',
|
||||||
));
|
));
|
||||||
|
|
||||||
@ -206,7 +206,7 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
'Order created'
|
'Order created'
|
||||||
);
|
);
|
||||||
|
|
||||||
$response = $client->ordersGet($response['id'], 'id');
|
$response = $client->request->ordersGet($response['id'], 'id');
|
||||||
static::assertTrue(
|
static::assertTrue(
|
||||||
$response->isSuccessful(),
|
$response->isSuccessful(),
|
||||||
'Order fetched'
|
'Order fetched'
|
||||||
@ -215,7 +215,7 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
$id = $response['order']['customer']['id'];
|
$id = $response['order']['customer']['id'];
|
||||||
$externalId = 'asdf' . time();
|
$externalId = 'asdf' . time();
|
||||||
|
|
||||||
$response = $client->customersFixExternalIds(array(
|
$response = $client->request->customersFixExternalIds(array(
|
||||||
array('id' => $id, 'externalId' => $externalId)
|
array('id' => $id, 'externalId' => $externalId)
|
||||||
));
|
));
|
||||||
|
|
||||||
@ -224,7 +224,7 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
'Fixed customer ids'
|
'Fixed customer ids'
|
||||||
);
|
);
|
||||||
|
|
||||||
$response = $client->customersGet($externalId);
|
$response = $client->request->customersGet($externalId);
|
||||||
static::assertTrue(
|
static::assertTrue(
|
||||||
$response->isSuccessful(),
|
$response->isSuccessful(),
|
||||||
'Got customer'
|
'Got customer'
|
||||||
@ -248,7 +248,7 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
public function testCustomersUploadExceptionEmpty()
|
public function testCustomersUploadExceptionEmpty()
|
||||||
{
|
{
|
||||||
$client = static::getApiClient();
|
$client = static::getApiClient();
|
||||||
$client->customersUpload(array());
|
$client->request->customersUpload(array());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -261,7 +261,7 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
$externalIdA = 'upload-a-' . time();
|
$externalIdA = 'upload-a-' . time();
|
||||||
$externalIdB = 'upload-b-' . time();
|
$externalIdB = 'upload-b-' . time();
|
||||||
|
|
||||||
$response = $client->customersUpload(array(
|
$response = $client->request->customersUpload(array(
|
||||||
array(
|
array(
|
||||||
'externalId' => $externalIdA,
|
'externalId' => $externalIdA,
|
||||||
'firstName' => 'Aaa',
|
'firstName' => 'Aaa',
|
||||||
@ -292,7 +292,7 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
{
|
{
|
||||||
$client = static::getApiClient();
|
$client = static::getApiClient();
|
||||||
|
|
||||||
$responseCreateFirst = $client->customersCreate(array(
|
$responseCreateFirst = $client->request->customersCreate(array(
|
||||||
'firstName' => 'Aaa111',
|
'firstName' => 'Aaa111',
|
||||||
'externalId' => 'AA-' . time(),
|
'externalId' => 'AA-' . time(),
|
||||||
'phones' => array(
|
'phones' => array(
|
||||||
@ -307,7 +307,7 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
'Got customer'
|
'Got customer'
|
||||||
);
|
);
|
||||||
|
|
||||||
$responseCreateSecond = $client->customersCreate(array(
|
$responseCreateSecond = $client->request->customersCreate(array(
|
||||||
'firstName' => 'Aaa222',
|
'firstName' => 'Aaa222',
|
||||||
'externalId' => 'BB-' . time(),
|
'externalId' => 'BB-' . time(),
|
||||||
'phones' => array(
|
'phones' => array(
|
||||||
@ -328,7 +328,7 @@ class ApiClientCustomersTest extends TestCase
|
|||||||
|
|
||||||
$resultCustomer = array('id' => $responseCreateSecond['id']);
|
$resultCustomer = array('id' => $responseCreateSecond['id']);
|
||||||
|
|
||||||
$response = $client->customersCombine($customers, $resultCustomer);
|
$response = $client->request->customersCombine($customers, $resultCustomer);
|
||||||
|
|
||||||
static::assertTrue(
|
static::assertTrue(
|
||||||
$response->isSuccessful(),
|
$response->isSuccessful(),
|
||||||
|
@ -417,4 +417,84 @@ class ApiClientOrdersTest extends TestCase
|
|||||||
'Delete payment'
|
'Delete payment'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider ordersLoyaltyApplyProvider
|
||||||
|
*
|
||||||
|
* @group orders_v5
|
||||||
|
*
|
||||||
|
* @param array $order
|
||||||
|
* @param float $bonuses
|
||||||
|
* @param string $site
|
||||||
|
* @param string|null $exceptionClass
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testOrdersLoyaltyApply(array $order, float $bonuses, string $site, $exceptionClass)
|
||||||
|
{
|
||||||
|
$client = static::getApiClient();
|
||||||
|
if (!empty($exceptionClass)) {
|
||||||
|
$this->expectException($exceptionClass);
|
||||||
|
}
|
||||||
|
$response = $client->request->ordersLoyaltyApply($order, $bonuses, $site);
|
||||||
|
if (empty($exceptionClass)) {
|
||||||
|
static::assertContains($response->getStatusCode(), [200, 201]);
|
||||||
|
static::assertTrue($response->isSuccessful());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array[]
|
||||||
|
*/
|
||||||
|
public function ordersLoyaltyApplyProvider(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'success_id' => [
|
||||||
|
[
|
||||||
|
'id' => 111111111,
|
||||||
|
],
|
||||||
|
100,
|
||||||
|
'moysklad',
|
||||||
|
null,
|
||||||
|
],
|
||||||
|
'success_externalId' => [
|
||||||
|
[
|
||||||
|
'externalId' => 111111111,
|
||||||
|
],
|
||||||
|
100,
|
||||||
|
'moysklad',
|
||||||
|
null,
|
||||||
|
],
|
||||||
|
'success_site_empty' => [
|
||||||
|
[
|
||||||
|
'externalId' => 111111111,
|
||||||
|
],
|
||||||
|
100,
|
||||||
|
'',
|
||||||
|
null,
|
||||||
|
],
|
||||||
|
'error_bonus_zero' => [
|
||||||
|
[
|
||||||
|
'externalId' => 111111111,
|
||||||
|
],
|
||||||
|
0,
|
||||||
|
'moysklad',
|
||||||
|
'InvalidArgumentException',
|
||||||
|
],
|
||||||
|
'error_missing_orderId' => [
|
||||||
|
[
|
||||||
|
'firstName' => 111111111,
|
||||||
|
],
|
||||||
|
0,
|
||||||
|
'moysklad',
|
||||||
|
'InvalidArgumentException',
|
||||||
|
],
|
||||||
|
'error_empty_order' => [
|
||||||
|
[],
|
||||||
|
0,
|
||||||
|
'moysklad',
|
||||||
|
'InvalidArgumentException',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,16 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use Symfony\Component\Dotenv\Dotenv;
|
||||||
|
|
||||||
if (function_exists('date_default_timezone_set')
|
if (function_exists('date_default_timezone_set')
|
||||||
&& function_exists('date_default_timezone_get')
|
&& function_exists('date_default_timezone_get')
|
||||||
) {
|
) {
|
||||||
date_default_timezone_set(date_default_timezone_get());
|
date_default_timezone_set(date_default_timezone_get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (class_exists(Dotenv::class) and file_exists(__DIR__.'/.env')) {
|
||||||
|
(new Dotenv())->load(__DIR__.'/.env');
|
||||||
|
}
|
||||||
|
|
||||||
$loader = include dirname(__DIR__) . '/vendor/autoload.php';
|
$loader = include dirname(__DIR__) . '/vendor/autoload.php';
|
||||||
$loader->add('RetailCrm\\Test', __DIR__);
|
$loader->add('RetailCrm\\Test', __DIR__);
|
||||||
|
Loading…
Reference in New Issue
Block a user