Skip to content

Commit

Permalink
Added support for POST /api/v5/store/products/api/v5/customers/{exter…
Browse files Browse the repository at this point in the history
…nalId}/subscriptions
  • Loading branch information
uryvskiy-dima authored Sep 26, 2024
2 parents e72d179 + b7ce7fa commit 3c316cf
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 0 deletions.
41 changes: 41 additions & 0 deletions lib/RetailCrm/Methods/V5/Customers.php
Original file line number Diff line number Diff line change
Expand Up @@ -141,4 +141,45 @@ public function customersNotesDelete($id)
"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 ($customerId === null || $customerId === '') {
throw new \InvalidArgumentException(
'Parameter `customerId` is empty'
);
}

$this->checkIdParameter($by);

/* @noinspection PhpUndefinedMethodInspection */
return $this->client->makeRequest(
sprintf('/customers/%s/subscriptions', $customerId),
'POST',
$this->fillSite(
$site,
['subscriptions' => json_encode($subscriptions), 'by' => $by]
)
);
}
}
42 changes: 42 additions & 0 deletions tests/RetailCrm/Tests/Methods/Version5/ApiClientCustomersTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

namespace RetailCrm\Tests\Methods\Version5;

use RetailCrm\Response\ApiResponse;
use RetailCrm\Test\TestCase;

/**
Expand Down Expand Up @@ -441,4 +442,45 @@ public function testCustomersNotesDelete()
static::assertTrue($responseDelete->isSuccessful(), 'Note deleted');
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(
'/customers/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());
}
}

0 comments on commit 3c316cf

Please sign in to comment.