Skip to content

Commit

Permalink
Add credit memo transaction allocations
Browse files Browse the repository at this point in the history
  • Loading branch information
Boyd Bueno de Mesquita committed Sep 6, 2022
1 parent fc037c1 commit 34380c0
Show file tree
Hide file tree
Showing 4 changed files with 157 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/Client.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
* @method Services\CustomerService customers()
* @method Services\InvoiceItemService invoiceItems()
* @method Services\CreditMemoInvoiceAllocationService creditMemoInvoiceAllocations()
* @method Services\CreditMemoTransactionAllocationService creditMemoTransactionAllocations()
* @method Services\InvoiceService invoices()
* @method Services\CreditMemoService creditMemos()
* @method Services\PaymentCardService paymentCards()
Expand Down Expand Up @@ -115,6 +116,7 @@ final class Client
'customers' => Services\CustomerService::class,
'invoiceItems' => Services\InvoiceItemService::class,
'creditMemoInvoiceAllocations' => Services\CreditMemoInvoiceAllocationService::class,
'creditMemoTransactionAllocations' => Services\CreditMemoTransactionAllocationService::class,
'invoices' => Services\InvoiceService::class,
'creditMemos' => Services\CreditMemoService::class,
'paymentCards' => Services\PaymentCardService::class,
Expand Down
6 changes: 6 additions & 0 deletions src/Entities/Schema.php
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,12 @@ public function __construct()
'credit-memos/{creditMemoId}' => function (array $content) {
return new CreditMemo($content);
},
'credit-memos/{creditMemoId}/transaction-allocations' => function (array $content) {
return new Collection(new CreditMemoTransactionAllocation(), $content);
},
'credit-memos/{creditMemoId}/transaction-allocations/{transactionId}' => function (array $content) {
return new CreditMemoTransactionAllocation($content);
},
];
}

Expand Down
102 changes: 102 additions & 0 deletions src/Services/CreditMemoTransactionAllocationService.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
<?php
/**
* This source file is proprietary and part of Rebilly.
*
* (c) Rebilly SRL
* Rebilly Ltd.
* Rebilly Inc.
*
* @see https://www.rebilly.com
*/

namespace Rebilly\Services;

use ArrayObject;
use JsonSerializable;
use Rebilly\Entities\CreditMemoTransactionAllocation;
use Rebilly\Http\Exception\DataValidationException;
use Rebilly\Http\Exception\NotFoundException;
use Rebilly\Paginator;
use Rebilly\Rest\Collection;
use Rebilly\Rest\Service;

/**
* Class CreditMemoTransactionAllocationService.
*/
final class CreditMemoTransactionAllocationService extends Service
{
/**
* @param string $creditMemoId
* @param array|ArrayObject $params
*
* @return CreditMemoTransactionAllocation[][]|Collection[]|Paginator
*/
public function paginator($creditMemoId, $params = [])
{
return new Paginator(
$this->client(),
'credit-memos/{creditMemoId}/transaction-allocations',
['creditMemoId' => $creditMemoId] + (array) $params
);
}

/**
* @param string $creditMemoId
* @param array|ArrayObject $params
*
* @return CreditMemoTransactionAllocation[]|Collection
*/
public function search($creditMemoId, $params = [])
{
return $this->client()->get(
'credit-memos/{creditMemoId}/transaction-allocations',
['creditMemoId' => $creditMemoId] + (array) $params
);
}

/**
* @param string $creditMemoId
* @param string $transactionId
*
* @return CreditMemoTransactionAllocation
*@throws NotFoundException if resource does not exist
*
*/
public function load($creditMemoId, $transactionId)
{
return $this->client()->get(
'credit-memos/{creditMemoId}/transaction-allocations/{transactionId}',
['transactionId' => $transactionId, 'creditMemoId' => $creditMemoId]
);
}

/**
* @param string $creditMemoId
* @param string $transactionId
* @param array|JsonSerializable|CreditMemoTransactionAllocation $data
*
* @return CreditMemoTransactionAllocation
* @throws DataValidationException if input data is not valid
*
*/
public function update($creditMemoId, $transactionId, $data)
{
return $this->client()->put(
$data,
'credit-memos/{creditMemoId}/transaction-allocations/{transactionId}',
['transactionId' => $transactionId, 'creditMemoId' => $creditMemoId]
);
}

/**
* @param string $creditMemoId
* @param string $transactionId
*/
public function delete($creditMemoId, $transactionId)
{
$this->client()->delete(
'credit-memos/{creditMemoId}/transaction-allocations/{transactionId}',
['transactionId' => $transactionId, 'creditMemoId' => $creditMemoId]
);
}
}
47 changes: 47 additions & 0 deletions tests/Api/ServiceTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,48 @@ public function creditMemoInvoiceAllocationsService()
$service->delete('invoiceId', 'dummy');
}

/**
* @test
*/
public function creditMemoTransactionAllocationsService()
{
$client = new Client(['apiKey' => 'QWERTY']);

/** @var CurlHandler|MockObject $handler */
$handler = $this->createMock(CurlHandler::class);
$handler
->method('__invoke')
->willReturnOnConsecutiveCalls(
$client->createResponse(),
$client->createResponse(),
$client->createResponse()->withHeader('Location', 'credit-memos/creditMemoId/transaction-allocations/dummy'),
$client->createResponse()->withHeader('Location', 'credit-memos/creditMemoId/transaction-allocations/dummy'),
$client->createResponse()->withStatus(204)
);

$client = new Client([
'apiKey' => 'QWERTY',
'httpHandler' => $handler,
]);

$service = $client->creditMemoTransactionAllocations();
self::assertInstanceOf(Services\CreditMemoTransactionAllocationService::class, $service);

$paginator = $service->paginator('creditMemoId');
self::assertInstanceOf(Paginator::class, $paginator);

$result = $service->search('creditMemoId');
self::assertInstanceOf(Rest\Collection::class, $result);

$result = $service->load('creditMemoId', 'dummy');
self::assertInstanceOf(Entities\CreditMemoTransactionAllocation::class, $result);

$result = $service->update('creditMemoId', 'dummy', []);
self::assertInstanceOf(Entities\CreditMemoTransactionAllocation::class, $result);

$service->delete('creditMemoId', 'dummy');
}

/**
* @test
*/
Expand Down Expand Up @@ -1212,6 +1254,11 @@ public function provideServiceClasses()
Services\CreditMemoInvoiceAllocationService::class,
Entities\CreditMemoInvoiceAllocation::class,
],
[
'creditMemoTransactionAllocations',
Services\CreditMemoTransactionAllocationService::class,
Entities\CreditMemoTransactionAllocation::class,
],
[
'creditMemos',
Services\CreditMemoService::class,
Expand Down

0 comments on commit 34380c0

Please sign in to comment.