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']); } }