corentin_wakdo/tests/Integration/AllergenReadDbTest.php
Imugiii 77bf973860
All checks were successful
CI / secret-scan (pull_request) Successful in 10s
CI / static-tests (pull_request) Successful in 46s
CI / js-tests (pull_request) Successful in 30s
CI / php-lint (push) Successful in 25s
CI / php-lint (pull_request) Successful in 21s
CI / secret-scan (push) Successful in 12s
CI / static-tests (push) Successful in 47s
CI / js-tests (push) Successful in 27s
feat(api): endpoint public /api/allergens + decision prix (P4 optionnel)
- GET /api/allergens (public anonyme, lecture seule) : les 14 allergenes INCO
  (id/code/name) via App\Catalogue\AllergenRepository. CatalogueController::allergens
  (meme enveloppe {data,total} + present que les autres lectures catalogue).
- La borne CONSERVE son JSON statique (data/allergens.json) : il porte les
  descriptions riches, absentes du schema allergen (code+name seulement). Le swap
  reste possible si les descriptions sont ajoutees cote API ; commentaire data.js maj.
- Prix : decision confirmee -- centimes en stockage/API (price_cents), euros a
  l'affichage (state.formatPrice). Aucun changement de convention requis.
- Test : AllergenReadDbTest (integration, vraie DB : les 14 INCO). 351 PHP verts,
  PHPStan L6 propre, /api/allergens verifie live (200, total 14, same-origin).
2026-06-19 18:27:08 +00:00

48 lines
1.4 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Tests\Integration;
use PHPUnit\Framework\TestCase;
use Throwable;
use App\Catalogue\AllergenRepository;
use App\Core\Config;
use App\Core\Database;
/**
* AllergenRepository contre une vraie MariaDB (schema migre + seed reference).
* Auto-skip si WAKDO_DB_TESTS != 1. Lecture seule (donnees de reference) : aucun
* fixture/teardown. Verifie que les 14 allergenes INCO sont references avec code+name.
*/
final class AllergenReadDbTest extends TestCase
{
private Database $db;
protected function setUp(): void
{
if (getenv('WAKDO_DB_TESTS') !== '1') {
self::markTestSkipped('Tests DB desactives (definir WAKDO_DB_TESTS=1 + DB_*).');
}
$this->db = new Database(new Config());
try {
$this->db->fetch('SELECT 1');
} catch (Throwable $exception) {
self::markTestSkipped('Base injoignable: ' . $exception->getMessage());
}
}
public function testListsIncoReferenceWithCodeAndName(): void
{
$rows = (new AllergenRepository($this->db))->all();
self::assertGreaterThanOrEqual(14, count($rows), 'les 14 allergenes INCO doivent etre references');
foreach ($rows as $a) {
self::assertArrayHasKey('code', $a);
self::assertArrayHasKey('name', $a);
self::assertNotSame('', (string) ($a['name'] ?? ''));
}
}
}