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