validator = self::getContainer()->get(ValidatorInterface::class); $this->serializer = self::getContainer()->get(SerializerInterface::class); } public function testAddComment(): void { $controller = $this->buildController(willFlush: true); $ticket = new Ticket(); $request = new Request(content: <<<'JSON' {"content": "test"} JSON); $response = $controller->__invoke($ticket, $request); self::assertEquals(201, $response->getStatusCode()); } public function testAddCommentWithBlankContent(): void { $controller = $this->buildController(willFlush: false); $ticket = new Ticket(); $request = new Request(content: <<<'JSON' {"content": ""} JSON); $response = $controller->__invoke($ticket, $request); self::assertEquals(422, $response->getStatusCode()); $request = new Request(content: <<<'JSON' {"content": null} JSON); $response = $controller->__invoke($ticket, $request); self::assertEquals(422, $response->getStatusCode()); } private function buildController(bool $willFlush): AddCommentController { $security = $this->prophesize(Security::class); $security->isGranted('ROLE_USER')->willReturn(true); $entityManager = $this->prophesize(EntityManagerInterface::class); if ($willFlush) { $entityManager->persist(Argument::type(Comment::class))->shouldBeCalled(); $entityManager->flush()->shouldBeCalled(); } $commandHandler = new AddCommentCommandHandler($entityManager->reveal()); return new AddCommentController( $security->reveal(), $this->serializer, $this->validator, $commandHandler, $entityManager->reveal(), ); } }