1
0
mirror of synced 2024-11-29 00:36:06 +03:00

support /api/v5/customers/{externalId}/subscriptions method

This commit is contained in:
Ivan Chaplygin 2024-09-25 15:29:03 +03:00
parent e72d179f35
commit aff95ec791
2 changed files with 84 additions and 0 deletions

View File

@ -141,4 +141,45 @@ trait Customers
"POST" "POST"
); );
} }
/**
* Update subscriptions a customer
*
* @param array $subscriptions subscriptions data
* @param integer $customerId identifier customer
* @param string $by (default: 'externalId')
* @param string|null $site (default: null)
*
* @throws \InvalidArgumentException
* @throws \RetailCrm\Exception\InvalidJsonException
* @throws \RetailCrm\Exception\CurlException
*
* @return \RetailCrm\Response\ApiResponse
*/
public function customerSubscriptionsUpdate(array $subscriptions, $customerId, $by = 'externalId', $site = null)
{
if (!count($subscriptions)) {
throw new \InvalidArgumentException(
'Parameter `subscriptions` must contains a data'
);
}
if (!is_int($customerId)) {
throw new \InvalidArgumentException(
'Parameter `customerId` must be an integer'
);
}
$this->checkIdParameter($by);
/* @noinspection PhpUndefinedMethodInspection */
return $this->client->makeRequest(
sprintf('/customer/%s/subscriptions', $customerId),
'POST',
$this->fillSite(
$site,
['subscriptions' => json_encode($subscriptions), 'by' => $by]
)
);
}
} }

View File

@ -11,6 +11,8 @@
namespace RetailCrm\Tests\Methods\Version5; namespace RetailCrm\Tests\Methods\Version5;
use RetailCrm\Http\Client;
use RetailCrm\Response\ApiResponse;
use RetailCrm\Test\TestCase; use RetailCrm\Test\TestCase;
/** /**
@ -441,4 +443,45 @@ class ApiClientCustomersTest extends TestCase
static::assertTrue($responseDelete->isSuccessful(), 'Note deleted'); static::assertTrue($responseDelete->isSuccessful(), 'Note deleted');
static::assertEquals(200, $responseDelete->getStatusCode()); static::assertEquals(200, $responseDelete->getStatusCode());
} }
public function testCustomerSubscriptionsUpdate()
{
$clientMock = $this->getMockBuilder(\RetailCrm\Http\Client::class)
->disableOriginalConstructor()
->setMethods(['makeRequest'])
->getMock()
;
$parameters = [
'subscriptions' => [
[
'channel' => 'email',
'active' => false
]
],
'by' => 'externalId',
'site' => 'test'
];
$clientMock->expects(self::once())->method('makeRequest')->with(
'/customer/123/subscriptions',
'POST',
[
'subscriptions' => json_encode($parameters['subscriptions']),
'by' => $parameters['by'],
'site' => $parameters['site']
]
)->willReturn((new ApiResponse(200, json_encode(['success' => true])))->asJsonResponse());
$client = static::getMockedApiClient($clientMock);
$response = $client->request->customerSubscriptionsUpdate(
$parameters['subscriptions'],
123,
$parameters['by'],
$parameters['site']
);
static::assertTrue($response->isSuccessful());
}
} }