Files

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