From f9a5009ecf7ce9b48ded5dfb916e6ce63262043d Mon Sep 17 00:00:00 2001 From: tristan Date: Fri, 29 May 2026 15:56:32 +0200 Subject: [PATCH] test(api) : verrouille la pagination par defaut (Role, Permission) + doc AuditLogProvider sur ?pagination=false --- .../State/Provider/AuditLogProvider.php | 7 ++++ tests/Module/Core/Api/PermissionApiTest.php | 32 +++++++++++++++++++ tests/Module/Core/Api/RoleApiTest.php | 29 +++++++++++++++++ 3 files changed, 68 insertions(+) diff --git a/src/Module/Core/Infrastructure/ApiPlatform/State/Provider/AuditLogProvider.php b/src/Module/Core/Infrastructure/ApiPlatform/State/Provider/AuditLogProvider.php index c0a4aa2..7cc3126 100644 --- a/src/Module/Core/Infrastructure/ApiPlatform/State/Provider/AuditLogProvider.php +++ b/src/Module/Core/Infrastructure/ApiPlatform/State/Provider/AuditLogProvider.php @@ -68,6 +68,13 @@ final readonly class AuditLogProvider implements ProviderInterface */ private function provideCollection(Operation $operation, array $context): DbalPaginator { + // Contrairement aux ressources ORM (cf. CategoryProvider), ce provider + // ne gere PAS l'echappatoire `?pagination=false` : la pagination y est + // toujours forcee. `audit_log` est une table append-only a croissance + // infinie — la dumper entierement saturerait memoire/reseau et n'a aucun + // usage front (pas de ) et n'exerce donc plus le defaut + * paginE. On seed 11 roles de test pour depasser une page (10) et verifier + * que, sans parametre, la page est bornee a 10 et expose `view`. + */ + public function testDefaultCollectionIsPaginatedToGlobalDefault(): void + { + $em = $this->getEm(); + for ($i = 1; $i <= 11; ++$i) { + $em->persist(new Role(sprintf('test_pg_%d', $i), sprintf('Role pagination %d (test)', $i), false)); + } + $em->flush(); + $em->clear(); + + $client = $this->authenticatedClient('admin', 'admin'); + $response = $client->request('GET', '/api/roles'); + + self::assertResponseIsSuccessful(); + $data = $response->toArray(); + + // La page par defaut ne doit jamais depasser le maximum global (10). + self::assertLessThanOrEqual(10, count($data['member']), 'La page par defaut doit etre bornee a 10 items.'); + // 11 roles de test + 2 systeme + editor + viewer => total > 10. + self::assertGreaterThan(10, $data['totalItems']); + // `view` n'est present que lorsque la collection est reellement paginee. + self::assertArrayHasKey('view', $data, 'La collection doit exposer view quand totalItems > itemsPerPage.'); + } + public function testGetCollectionFilterByIsSystemTrue(): void { $client = $this->authenticatedClient('admin', 'admin');