29 lines
1.1 KiB
PHP
29 lines
1.1 KiB
PHP
<?php
|
|
|
|
use AKSRT\Ledger\OperationKey;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
final class OperationKeyTest extends TestCase {
|
|
public function test_request_key_requires_uuid_header(): void {
|
|
$error = OperationKey::from_request(new WP_REST_Request(), 'transfer', 9);
|
|
self::assertInstanceOf(WP_Error::class, $error);
|
|
self::assertSame('aksrt_idempotency_key', $error->get_error_code());
|
|
self::assertSame(400, $error->get_error_data()['status']);
|
|
}
|
|
|
|
public function test_request_key_is_scoped_to_actor_and_operation(): void {
|
|
$request = new WP_REST_Request(['Idempotency-Key' => '550E8400-E29B-41D4-A716-446655440000']);
|
|
self::assertSame(
|
|
'client-transfer:9:550e8400-e29b-41d4-a716-446655440000',
|
|
OperationKey::from_request($request, 'transfer', 9)
|
|
);
|
|
}
|
|
|
|
public function test_deterministic_key_is_stable_and_length_bounded(): void {
|
|
$key = OperationKey::deterministic('Revenue Settle', [42, str_repeat('A', 300)]);
|
|
self::assertSame($key, OperationKey::deterministic('Revenue Settle', [42, str_repeat('A', 300)]));
|
|
self::assertLessThanOrEqual(191, strlen($key));
|
|
self::assertMatchesRegularExpression('/^[a-z0-9:._-]+$/', $key);
|
|
}
|
|
}
|