delete(); }); it('retrieves logs filtered by date range, client and event type', function (): void { // GIVEN $clientId1 = Uuid::uuid7()->toString(); $clientId2 = Uuid::uuid7()->toString(); $clientIdentifier1 = 'arcadia_id_' . str_repeat('1', 32); $clientIdentifier2 = 'arcadia_id_' . str_repeat('2', 32); ClientAuditLog::query()->create([ 'id' => Uuid::uuid7(new \DateTimeImmutable('2026-08-01 10:00:00 UTC'))->toString(), 'client_id' => $clientId1, 'client_identifier' => $clientIdentifier1, 'event_type' => 'client_secret_generated', 'details' => null, ]); ClientAuditLog::query()->create([ 'id' => Uuid::uuid7(new \DateTimeImmutable('2026-08-10 14:00:00 UTC'))->toString(), 'client_id' => $clientId1, 'client_identifier' => $clientIdentifier1, 'event_type' => 'client_status_toggled', 'details' => ['is_active' => 'false'], ]); ClientAuditLog::query()->create([ 'id' => Uuid::uuid7(new \DateTimeImmutable('2026-08-15 12:00:00 UTC'))->toString(), 'client_id' => $clientId2, 'client_identifier' => $clientIdentifier2, 'event_type' => 'client_secret_generated', 'details' => null, ]); $directory = new EloquentClientAuditLogDirectory(); // WHEN (Filter by date range and client1) $since = new \DateTimeImmutable('2026-08-05 00:00:00'); $to = new \DateTimeImmutable('2026-08-20 23:59:59'); $results = $directory->findLogs( since: $since, to: $to, clientIdentifier: $clientIdentifier1, ); // THEN expect($results)->toHaveCount(1) ->and($results[0]->clientIdentifier)->toBe($clientIdentifier1) ->and($results[0]->eventType)->toBe('client_status_toggled') ->and($results[0]->details->getValues())->toBe(['is_active' => 'false']); }); });