feat(ReserverController): Ajoute vérification de disponibilité produit.
🛠️ refactor(BackupCommand): Utilise DatabaseDumper et ZipArchiver.
 feat(GitSyncLogCommand): Utilise Gemini pour messages plus clairs.
 feat(GenerateVideoThumbsCommand): Utilise VideoThumbnailer service.
 feat(AppWarmupImagesCommand): Utilise StorageInterface pour warmup.
🔒️ security(nelmio_security): Renforce la sécurité avec des en-têtes.
🔧 chore(caddy): Améliore la configuration de Caddy pour la performance.
🐛 fix(makefile): Corrige les commandes de test.
🧪 chore(.env.test): Supprime la ligne vide à la fin du fichier.
🔧 chore(doctrine): Active native_lazy_objects.
🔧 chore(cache): Ajoute un cache system.
```
This commit is contained in:
Serreau Jovann
2026-01-30 17:58:12 +01:00
parent a6fc8fdf3b
commit 36a51c5a54
34 changed files with 1879 additions and 164 deletions

View File

@@ -0,0 +1,106 @@
<?php
namespace App\Tests\Controller;
use App\Controller\ReserverController;
use App\Entity\Product;
use App\Entity\ProductReserve;
use App\Repository\ProductRepository;
use App\Repository\ProductReserveRepository;
use PHPUnit\Framework\TestCase;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
class ReserverControllerTest extends TestCase
{
public function testProductCheckAvailable()
{
// 1. Mock Repositories
$productRepository = $this->createMock(ProductRepository::class);
$productReserveRepository = $this->createMock(ProductReserveRepository::class);
// 2. Setup Data
$productId = "1";
$startStr = "2026-02-07";
$endStr = "2026-02-14";
$product = new Product();
// We can't set ID easily if it's generated, but the repo find returning it is enough.
$productRepository->expects($this->once())
->method('find')
->with($productId)
->willReturn($product);
$productReserveRepository->expects($this->once())
->method('checkAvailability')
->willReturn(true);
// 3. Create Request
$request = new Request([], [], [], [], [], [], json_encode([
'id' => $productId,
'start' => $startStr,
'end' => $endStr
]));
$request->setMethod('POST');
$request->headers->set('Content-Type', 'application/json');
// 4. Instantiate Controller
$controller = new ReserverController();
// 5. Call Method
$response = $controller->productCheck($request, $productReserveRepository, $productRepository);
// 6. Assertions
$this->assertInstanceOf(JsonResponse::class, $response);
$content = json_decode($response->getContent(), true);
$this->assertArrayHasKey('dispo', $content);
$this->assertTrue($content['dispo']);
}
public function testProductCheckNotAvailable()
{
// 1. Mock Repositories
$productRepository = $this->createMock(ProductRepository::class);
$productReserveRepository = $this->createMock(ProductReserveRepository::class);
// 2. Setup Data
$productId = "1";
$startStr = "2026-02-07";
$endStr = "2026-02-14";
$product = new Product();
$productRepository->expects($this->once())
->method('find')
->with($productId)
->willReturn($product);
$productReserveRepository->expects($this->once())
->method('checkAvailability')
->willReturn(false);
// 3. Create Request
$request = new Request([], [], [], [], [], [], json_encode([
'id' => $productId,
'start' => $startStr,
'end' => $endStr
]));
$request->setMethod('POST');
$request->headers->set('Content-Type', 'application/json');
// 4. Instantiate Controller
$controller = new ReserverController();
// 5. Call Method
$response = $controller->productCheck($request, $productReserveRepository, $productRepository);
// 6. Assertions
$this->assertInstanceOf(JsonResponse::class, $response);
$content = json_decode($response->getContent(), true);
$this->assertArrayHasKey('dispo', $content);
$this->assertFalse($content['dispo']);
}
}