72 lines
2.8 KiB
PHP
72 lines
2.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Tests\Module\Core\Api;
|
|
|
|
/**
|
|
* Regression test de pagination sur GET /api/audit-logs (ERP-72).
|
|
*
|
|
* Avant ce ticket, `paginationItemsPerPage` etait fixe a 30 dans
|
|
* AuditLogResource. Apres migration vers les defaults globaux (10/50),
|
|
* ce fichier verrouille le nouveau contrat :
|
|
* - la reponse est paginee (max 10 items par page par defaut) ;
|
|
* - un itemsPerPage excessif est plafonne a 50.
|
|
*
|
|
* Pas de seed : la table audit_log contient deja des lignes issues des
|
|
* fixtures / autres tests. Les assertions utilisent des inegalites pour
|
|
* rester robustes quelle que soit la quantite exacte de donnees presentes.
|
|
*
|
|
* @internal
|
|
*/
|
|
final class AuditLogPaginationRegressionTest extends AbstractApiTestCase
|
|
{
|
|
/**
|
|
* La collection /api/audit-logs doit etre paginee avec les defaults globaux :
|
|
* - `member`, `totalItems`, `view` presentes dans la reponse JSON-LD ;
|
|
* - au plus 10 items par page (nouveau defaut, etait 30 avant ce ticket).
|
|
*/
|
|
public function testAuditLogCollectionStillPaginated(): void
|
|
{
|
|
$client = $this->authenticatedClient('admin', 'admin');
|
|
$response = $client->request('GET', '/api/audit-logs');
|
|
|
|
self::assertSame(200, $response->getStatusCode());
|
|
|
|
$data = $response->toArray();
|
|
self::assertArrayHasKey('totalItems', $data, 'La collection audit-logs doit exposer totalItems.');
|
|
self::assertArrayHasKey('view', $data, 'La collection audit-logs doit exposer view (pagination active).');
|
|
self::assertIsArray($data['member'], 'member doit etre un tableau.');
|
|
|
|
// Le nouveau defaut global est 10 (etait 30 dans AuditLogResource avant ERP-72).
|
|
self::assertLessThanOrEqual(
|
|
10,
|
|
count($data['member']),
|
|
'La page par defaut ne doit pas depasser 10 items (default global ERP-72).',
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Un itemsPerPage excessif (99999) doit etre plafonne au maximum global (50).
|
|
* Teste la regression specifique du paginator DBAL custom (DbalPaginator) qui
|
|
* pourrait ignorer la limite si la logique de cap n'est pas appliquee cote provider.
|
|
*/
|
|
public function testAuditLogItemsPerPageCappedAt50(): void
|
|
{
|
|
$client = $this->authenticatedClient('admin', 'admin');
|
|
$response = $client->request('GET', '/api/audit-logs?itemsPerPage=99999');
|
|
|
|
self::assertSame(200, $response->getStatusCode());
|
|
|
|
$data = $response->toArray();
|
|
self::assertIsArray($data['member'], 'member doit etre un tableau.');
|
|
|
|
// Le cap global est 50 : jamais plus d'items par page que le maximum.
|
|
self::assertLessThanOrEqual(
|
|
50,
|
|
count($data['member']),
|
|
'itemsPerPage=99999 doit etre plafonne a 50 (maximum global ERP-72).',
|
|
);
|
|
}
|
|
}
|