fix(audit-log) : applique fixes code review (precision timestamp, ESCAPE LIKE, pagination max)
- TIMESTAMP(6) WITH TIME ZONE + tie-breaker id DESC sur l'ORDER BY pour garantir un tri deterministe quand plusieurs lignes partagent la meme timestamp (batch fixture, bulk flush < 1µs). - Suppression de la clause ESCAPE '\\' redondante (`\` est deja l'echappement LIKE par defaut en PostgreSQL) et fragile sur standard_conforming_strings. Le str_replace des wildcards reste. - paginationMaximumItemsPerPage : 100 -> 50. Reduit le pire cas de reponse lourde sur un endpoint admin (changes JSONB volumineux).
This commit is contained in:
@@ -260,8 +260,9 @@ final class AuditLogApiTest extends AbstractApiTestCase
|
||||
/**
|
||||
* Les caracteres wildcard PostgreSQL (`%`, `_`) saisis par l'utilisateur
|
||||
* doivent etre echappes et traites comme caracteres litteraux, pas comme
|
||||
* des metacaracteres LIKE. Idem pour le backslash qui doit etre double
|
||||
* pour ne pas interferer avec la clause ESCAPE.
|
||||
* des metacaracteres LIKE. `\` est le caractere d'echappement LIKE par
|
||||
* defaut en PostgreSQL (pas de clause ESCAPE explicite) : on le double
|
||||
* dans le motif pour qu'il soit aussi traite comme litteral.
|
||||
*/
|
||||
public function testFilterByPerformedByEscapesWildcards(): void
|
||||
{
|
||||
@@ -281,8 +282,9 @@ final class AuditLogApiTest extends AbstractApiTestCase
|
||||
$ours = array_filter($data['member'], fn (array $m) => ($m['requestId'] ?? null) === $this->runTag);
|
||||
self::assertCount(0, $ours, '_ doit etre traite comme literal, pas wildcard single-char.');
|
||||
|
||||
// `\` (backslash) dans le motif ne doit pas casser la clause ESCAPE :
|
||||
// on attend une reponse 200 (pas 500), meme si le resultat est vide.
|
||||
// `\` (backslash, echappement LIKE par defaut en PG) : un seul `\`
|
||||
// dans l'entree utilisateur est double en `\\` et doit etre interprete
|
||||
// comme litteral. On attend une reponse 200 (pas 500), resultat vide.
|
||||
$response = $client->request('GET', '/api/audit-logs?performed_by=%5C&entity_id=999');
|
||||
self::assertSame(200, $response->getStatusCode(), 'Un backslash dans le filtre ne doit pas produire de 500.');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user