Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DGS-2634] add BatchSendings and BatchSendingsItems endpoints #256

Merged
merged 8 commits into from
Aug 28, 2024
Merged
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) princip
- Add `IdentifyScenarioVersion.restrictedCountries`
- Add `EnvelopeTemplateDocumentAssignments` endpoint
- Add `Envelope.createdBy` and `Envelope.sentBy`
- Add `BatchSendings` and `BatchSendingsItems` endpoints

## [2.4.0] - 2024-05-14
### Added
Expand Down
10 changes: 8 additions & 2 deletions src/DigiSign.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use DigitalCz\DigiSign\Auth\Credentials;
use DigitalCz\DigiSign\Endpoint\AccountEndpoint;
use DigitalCz\DigiSign\Endpoint\AuthEndpoint;
use DigitalCz\DigiSign\Endpoint\BatchSendingsEndpoint;
use DigitalCz\DigiSign\Endpoint\DeliveriesEndpoint;
use DigitalCz\DigiSign\Endpoint\EndpointInterface;
use DigitalCz\DigiSign\Endpoint\EnumsEndpoint;
Expand Down Expand Up @@ -128,8 +129,8 @@ public function validateSignature(string $payload, string $header, string $secre
throw new InvalidSignatureException('Unable to parse signature header');
}

$ts = (int)($matches['t'] ?? 0);
$signature = $matches['s'] ?? '';
$ts = (int)($matches['t']);
$signature = $matches['s'];

if ($ts < time() - $this->signatureTolerance) {
throw new InvalidSignatureException("Request is older than {$this->signatureTolerance} seconds");
Expand Down Expand Up @@ -243,6 +244,11 @@ public function deliveries(): DeliveriesEndpoint
return new DeliveriesEndpoint($this);
}

public function batchSendings(): BatchSendingsEndpoint
{
return new BatchSendingsEndpoint($this);
}

public function identifications(): IdentificationsEndpoint
{
return new IdentificationsEndpoint($this);
Expand Down
34 changes: 34 additions & 0 deletions src/Endpoint/BatchSendingsEndpoint.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

declare(strict_types=1);

namespace DigitalCz\DigiSign\Endpoint;

use DigitalCz\DigiSign\DigiSign;
use DigitalCz\DigiSign\Endpoint\Traits\CreateEndpointTrait;
use DigitalCz\DigiSign\Endpoint\Traits\GetEndpointTrait;
use DigitalCz\DigiSign\Endpoint\Traits\UpdateEndpointTrait;
use DigitalCz\DigiSign\Resource\BatchSending;

/**
* @extends ResourceEndpoint<BatchSending>
* @method BatchSending get(string $id)
* @method BatchSending update(string $id, array $body)
* @method BatchSending create(array $body)
*/
final class BatchSendingsEndpoint extends ResourceEndpoint
{
use GetEndpointTrait;
use UpdateEndpointTrait;
use CreateEndpointTrait;

public function __construct(DigiSign $parent)
{
parent::__construct($parent, '/api/batch-sendings');
}

public function items(string $id): BatchSendingsItemsEndpoint
{
return new BatchSendingsItemsEndpoint($this, $id);
}
}
26 changes: 26 additions & 0 deletions src/Endpoint/BatchSendingsItemsEndpoint.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

declare(strict_types=1);

namespace DigitalCz\DigiSign\Endpoint;

use DigitalCz\DigiSign\Resource\BaseResource;

/**
* @extends ResourceEndpoint<BaseResource>
*/
final class BatchSendingsItemsEndpoint extends ResourceEndpoint
{
public function __construct(BatchSendingsEndpoint $parent, string $batchSending)
{
parent::__construct($parent, '/{id}/items', BaseResource::class, ['id' => $batchSending]);
}

/**
* @param mixed[] $body
*/
public function import(array $body): BaseResource
{
return $this->createResource($this->postRequest('/import', ['json' => $body]));
}
}
2 changes: 1 addition & 1 deletion src/Resource/BaseResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ protected function setProperty(string $property, mixed $value): void
// parse Resource class from type
preg_match('/Collection<(.+)>/', $type, $matches);
/** @var class-string<ResourceInterface> $resourceClass */
$resourceClass = $matches[1];
$resourceClass = $matches[1] ?? '';

if (!class_exists($resourceClass)) {
$reflection = new ReflectionClass($this::class);
Expand Down
33 changes: 33 additions & 0 deletions src/Resource/BatchSending.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

declare(strict_types=1);

namespace DigitalCz\DigiSign\Resource;

use DigitalCz\DigiSign\Resource\Traits\EntityResourceTrait;

class BatchSending extends BaseResource
{
use EntityResourceTrait;

public string $id;

public ?string $name;

public ?string $envelopeTemplateId;

public int $itemsWaitingCount;

public int $itemsSuccessCount;

public int $itemsFailedCount;

public int $itemsTotalCount;

public string $status;

/**
* @var array<string>
*/
public array $importFields;
}
2 changes: 2 additions & 0 deletions tests/DigiSignTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,8 @@ public function testChildren(): void
self::assertSame('/api/auth-token', $mockClient->getLastRequest()->getUri()->getPath());
$dgs->account()->request('GET');
self::assertSame('/api/account', $mockClient->getLastRequest()->getUri()->getPath());
$dgs->batchSendings()->request('GET');
self::assertSame('/api/batch-sendings', $mockClient->getLastRequest()->getUri()->getPath());
$dgs->envelopes()->request('GET');
self::assertSame('/api/envelopes', $mockClient->getLastRequest()->getUri()->getPath());
$dgs->envelopeTemplates()->request('GET');
Expand Down
33 changes: 33 additions & 0 deletions tests/Endpoint/BatchSendingEndpointTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

declare(strict_types=1);

namespace DigitalCz\DigiSign\Endpoint;

/**
* @covers \DigitalCz\DigiSign\Endpoint\BatchSendingsEndpoint
*/
class BatchSendingEndpointTest extends EndpointTestCase
{
public function testChildren(): void
{
self::assertDefaultEndpointPath(self::endpoint()->items('foo'), '/api/batch-sendings/foo/items');
}

public function testCRUD(): void
{
self::endpoint()->get('foo');
self::assertLastRequest('GET', "/api/batch-sendings/foo");

self::endpoint()->create([]);
self::assertLastRequest('POST', "/api/batch-sendings");

self::endpoint()->update('foo', []);
self::assertLastRequest('PUT', "/api/batch-sendings/foo");
}

protected static function endpoint(): BatchSendingsEndpoint
{
return self::dgs()->batchSendings();
}
}
22 changes: 22 additions & 0 deletions tests/Endpoint/BatchSendingItemsEndpointTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

declare(strict_types=1);

namespace DigitalCz\DigiSign\Endpoint;

/**
* @covers \DigitalCz\DigiSign\Endpoint\BatchSendingsItemsEndpoint
*/
class BatchSendingItemsEndpointTest extends EndpointTestCase
{
public function testImport(): void
{
self::endpoint()->import(['file' => 'bar']);
self::assertLastRequest('POST', "/api/batch-sendings/foo/items/import", ['file' => 'bar']);
}

protected static function endpoint(): BatchSendingsItemsEndpoint
{
return self::dgs()->batchSendings()->items('foo');
}
}