ldc-arcadia-genesis-php-client/tests/Unit/Auth/RequestSignatureCalculatorTest.php

84 lines
2.8 KiB
PHP
Raw Permalink Normal View History

<?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');
});
});