Files
backend/tests/Controller/InfoclinicaControllerTest.php
2026-05-27 19:36:32 +03:00

89 lines
3.7 KiB
PHP

<?php
namespace App\Tests\Controller;
use App\Entity\User;
use App\Service\DecoderJWT\Interfaces\JWTDecoderServiceInterface;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\HttpFoundation\Response;
final class InfoclinicaControllerTest extends WebTestCase
{
public function testClvisitsovacheckpassWithoutFilial(): void
{
$client = static::createClient();
// Тестируем GET запрос без filial - должен вернуть 404
$client->request('GET', '/infoclinica/clvisitsovacheckpass');
self::assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND);
}
public function testClvisitsovacheckpassWithInvalidFilial(): void
{
$client = static::createClient();
// Тестируем GET запрос с невалидным filial (не число) - должен вернуть 404
// requirements: ['filial' => '\d+'] требует только цифры
$client->request('GET', '/infoclinica/clvisitsovacheckpass/abc');
self::assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND);
}
public function testClvisitsovacheckpassWithPostMethod(): void
{
$client = static::createClient();
// Тестируем POST запрос - должен вернуть 405 Method Not Allowed
// так как эндпоинт принимает только GET
$client->request('POST', '/infoclinica/clvisitsovacheckpass/123');
self::assertResponseStatusCodeSame(Response::HTTP_METHOD_NOT_ALLOWED);
}
public function testClvisitsovacheckpassWithValidFilial(): void
{
$client = static::createClient();
// Мокируем JWTDecoderService через контейнер
$container = static::getContainer();
$jwtDecoderServiceMock = $this->createMock(JWTDecoderServiceInterface::class);
$user = $this->createMock(User::class);
$jwtDecoderServiceMock->method('getUser')->willReturn($user);
// Заменяем сервис в контейнере
$container->set(JWTDecoderServiceInterface::class, $jwtDecoderServiceMock);
// Тестируем GET запрос с валидным filial
$client->request('GET', '/infoclinica/clvisitsovacheckpass/123');
self::assertResponseIsSuccessful();
self::assertResponseHeaderSame('content-type', 'application/json');
$responseData = json_decode($client->getResponse()->getContent(), true);
self::assertTrue($responseData);
}
public function testClvisitsovacheckpassWithoutAuth(): void
{
$client = static::createClient();
// Мокируем JWTDecoderService чтобы вернуть null (нет пользователя)
$container = static::getContainer();
$jwtDecoderServiceMock = $this->createMock(JWTDecoderServiceInterface::class);
$jwtDecoderServiceMock->method('getUser')->willReturn(null);
// Заменяем сервис в контейнере
$container->set(JWTDecoderServiceInterface::class, $jwtDecoderServiceMock);
// Тестируем GET запрос без авторизации
$client->request('GET', '/infoclinica/clvisitsovacheckpass/123');
self::assertResponseStatusCodeSame(Response::HTTP_UNAUTHORIZED);
$responseData = json_decode($client->getResponse()->getContent(), true);
self::assertArrayHasKey('error', $responseData);
self::assertEquals('Пользователь не найден', $responseData['error']);
}
}