83 lines
2.8 KiB
PHP
83 lines
2.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Unit\Auth;
|
|
|
|
use GuzzleHttp\Psr7\Uri as Psr7Uri;
|
|
use Ramsey\Uuid\Uuid;
|
|
use Uwil\ArcadiaApiPhpClient\Auth\ClientSecret;
|
|
use Uwil\ArcadiaApiPhpClient\Auth\Nonce;
|
|
use Uwil\ArcadiaApiPhpClient\Auth\RequestSignatureCalculator;
|
|
use Uwil\ArcadiaApiPhpClient\Auth\RequestSignaturePayload;
|
|
use Uwil\ArcadiaApiPhpClient\Enum\HttpMethod;
|
|
|
|
describe('RequestSignatureCalculator Test', function () {
|
|
it('can instantiate the RequestSignatureCalculator', function () {
|
|
// GIVEN
|
|
// WHEN
|
|
$calculator = new RequestSignatureCalculator();
|
|
|
|
// THEN
|
|
expect($calculator)->toBeInstanceOf(RequestSignatureCalculator::class);
|
|
});
|
|
|
|
it('can calculate a request signature', function () {
|
|
// GIVEN
|
|
$secret = new ClientSecret('your-client-secret');
|
|
$calculator = new RequestSignatureCalculator();
|
|
$payload = new RequestSignaturePayload(
|
|
HttpMethod::POST,
|
|
new Psr7Uri('https://api.example.com/resource'),
|
|
new \DateTimeImmutable(),
|
|
new Nonce(Uuid::uuid7()),
|
|
'sdsdsd'
|
|
);
|
|
|
|
// WHEN
|
|
$signature = $calculator->sign($payload, $secret);
|
|
|
|
// THEN
|
|
expect($signature)->not->toBeEmpty();
|
|
});
|
|
});
|
|
|
|
describe('RequestSignatureCalculator validation rules', function () {
|
|
it('calculates a valid signature for a GET request', function () {
|
|
// GIVEN
|
|
$secret = new ClientSecret('your-client-secret');
|
|
$calculator = new RequestSignatureCalculator();
|
|
$payload = new RequestSignaturePayload(
|
|
HttpMethod::GET,
|
|
new Psr7Uri('https://api.example.com/resource'),
|
|
new \DateTimeImmutable('2024-06-06T12:00:00Z'),
|
|
new Nonce(Uuid::fromString('00000000-0000-7000-8000-000000000000')),
|
|
''
|
|
);
|
|
|
|
// WHEN
|
|
$signature = $calculator->sign($payload, $secret);
|
|
|
|
// THEN
|
|
expect($signature->value)->toEqual('12dc1f97094b1447663e9821aa347c813c30f3ae2a04adeb173a722b1ede46ad');
|
|
});
|
|
|
|
it('calculates a valid signature for a POST request', function () {
|
|
// GIVEN
|
|
$secret = new ClientSecret('your-client-secret');
|
|
$calculator = new RequestSignatureCalculator();
|
|
$payload = new RequestSignaturePayload(
|
|
HttpMethod::POST,
|
|
new Psr7Uri('https://api.example.com/resource'),
|
|
new \DateTimeImmutable('2024-06-06T12:00:00Z'),
|
|
new Nonce(Uuid::fromString('00000000-0000-7000-8000-000000000000')),
|
|
'url-encoded-body'
|
|
);
|
|
|
|
// WHEN
|
|
$signature = $calculator->sign($payload, $secret);
|
|
|
|
// THEN
|
|
expect($signature->value)->toEqual('39e2372ec2362a78b71d82ebe796ae36f4b0cf5c0ed7b72ceef19764d9225436');
|
|
});
|
|
});
|